* Ensure timelist scrolling happens correctly for clock as well as fixed time * If an activity has already started, show the duration as time to/since the end of the activity * Addresses review comments: Reverse +/- indicators, removes milliseconds from times. * Fix linting issues * Add e2e test for timelist display * Scroll to 'now' if available
		
			
				
	
	
		
			123 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/*****************************************************************************
 | 
						|
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
						|
 * as represented by the Administrator of the National Aeronautics and Space
 | 
						|
 * Administration. All rights reserved.
 | 
						|
 *
 | 
						|
 * Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
						|
 * "License"); you may not use this file except in compliance with the License.
 | 
						|
 * You may obtain a copy of the License at
 | 
						|
 * http://www.apache.org/licenses/LICENSE-2.0.
 | 
						|
 *
 | 
						|
 * Unless required by applicable law or agreed to in writing, software
 | 
						|
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
						|
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
						|
 * License for the specific language governing permissions and limitations
 | 
						|
 * under the License.
 | 
						|
 *
 | 
						|
 * Open MCT includes source code licensed under additional open source
 | 
						|
 * licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
						|
 * this source code distribution or the Licensing information page available
 | 
						|
 * at runtime from the About dialog for additional information.
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
const { test, expect } = require('../../../pluginFixtures');
 | 
						|
const { createDomainObjectWithDefaults, createPlanFromJSON } = require('../../../appActions');
 | 
						|
 | 
						|
const testPlan = {
 | 
						|
  TEST_GROUP: [
 | 
						|
    {
 | 
						|
      name: 'Past event 1',
 | 
						|
      start: 1660320408000,
 | 
						|
      end: 1660343797000,
 | 
						|
      type: 'TEST-GROUP',
 | 
						|
      color: 'orange',
 | 
						|
      textColor: 'white'
 | 
						|
    },
 | 
						|
    {
 | 
						|
      name: 'Past event 2',
 | 
						|
      start: 1660406808000,
 | 
						|
      end: 1660429160000,
 | 
						|
      type: 'TEST-GROUP',
 | 
						|
      color: 'orange',
 | 
						|
      textColor: 'white'
 | 
						|
    },
 | 
						|
    {
 | 
						|
      name: 'Past event 3',
 | 
						|
      start: 1660493208000,
 | 
						|
      end: 1660503981000,
 | 
						|
      type: 'TEST-GROUP',
 | 
						|
      color: 'orange',
 | 
						|
      textColor: 'white'
 | 
						|
    },
 | 
						|
    {
 | 
						|
      name: 'Past event 4',
 | 
						|
      start: 1660579608000,
 | 
						|
      end: 1660624108000,
 | 
						|
      type: 'TEST-GROUP',
 | 
						|
      color: 'orange',
 | 
						|
      textColor: 'white'
 | 
						|
    },
 | 
						|
    {
 | 
						|
      name: 'Past event 5',
 | 
						|
      start: 1660666008000,
 | 
						|
      end: 1660681529000,
 | 
						|
      type: 'TEST-GROUP',
 | 
						|
      color: 'orange',
 | 
						|
      textColor: 'white'
 | 
						|
    }
 | 
						|
  ]
 | 
						|
};
 | 
						|
 | 
						|
test.describe('Time List', () => {
 | 
						|
  test('Create a Time List, add a single Plan to it and verify all the activities are displayed with no milliseconds', async ({
 | 
						|
    page
 | 
						|
  }) => {
 | 
						|
    // Goto baseURL
 | 
						|
    await page.goto('./', { waitUntil: 'domcontentloaded' });
 | 
						|
 | 
						|
    const timelist = await test.step('Create a Time List', async () => {
 | 
						|
      const createdTimeList = await createDomainObjectWithDefaults(page, { type: 'Time List' });
 | 
						|
      const objectName = await page.locator('.l-browse-bar__object-name').innerText();
 | 
						|
      expect(objectName).toBe(createdTimeList.name);
 | 
						|
 | 
						|
      return createdTimeList;
 | 
						|
    });
 | 
						|
 | 
						|
    await test.step('Create a Plan and add it to the timelist', async () => {
 | 
						|
      const createdPlan = await createPlanFromJSON(page, {
 | 
						|
        name: 'Test Plan',
 | 
						|
        json: testPlan
 | 
						|
      });
 | 
						|
 | 
						|
      await page.goto(timelist.url);
 | 
						|
      // Expand the tree to show the plan
 | 
						|
      await page.click("button[title='Show selected item in tree']");
 | 
						|
      await page.dragAndDrop(`role=treeitem[name=/${createdPlan.name}/]`, '.c-object-view');
 | 
						|
      await page.click("button[title='Save']");
 | 
						|
      await page.click("li[title='Save and Finish Editing']");
 | 
						|
      const startBound = testPlan.TEST_GROUP[0].start;
 | 
						|
      const endBound = testPlan.TEST_GROUP[testPlan.TEST_GROUP.length - 1].end;
 | 
						|
 | 
						|
      // Switch to fixed time mode with all plan events within the bounds
 | 
						|
      await page.goto(
 | 
						|
        `${timelist.url}?tc.mode=fixed&tc.startBound=${startBound}&tc.endBound=${endBound}&tc.timeSystem=utc&view=timelist.view`
 | 
						|
      );
 | 
						|
 | 
						|
      // Verify all events are displayed
 | 
						|
      const eventCount = await page.locator('.js-list-item').count();
 | 
						|
      expect(eventCount).toEqual(testPlan.TEST_GROUP.length);
 | 
						|
    });
 | 
						|
 | 
						|
    await test.step('Does not show milliseconds in times', async () => {
 | 
						|
      // Get the first activity
 | 
						|
      const row = await page.locator('.js-list-item').first();
 | 
						|
      // Verify that none fo the times have milliseconds displayed.
 | 
						|
      // Example: 2024-11-17T16:00:00Z is correct and 2024-11-17T16:00:00.000Z is wrong
 | 
						|
 | 
						|
      await expect(row.locator('.--start')).not.toContainText('.');
 | 
						|
      await expect(row.locator('.--end')).not.toContainText('.');
 | 
						|
      await expect(row.locator('.--duration')).not.toContainText('.');
 | 
						|
    });
 | 
						|
  });
 | 
						|
});
 |