2023-06-16 19:45:59 +00:00
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2024-01-09 21:31:51 +00:00
* Open MCT , Copyright ( c ) 2014 - 2024 , United States Government
2023-06-16 19:45:59 +00:00
* 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 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
2024-01-08 23:14:33 +00:00
import fs from 'fs' ;
2023-06-16 19:45:59 +00:00
2024-08-07 21:36:14 +00:00
import {
createDomainObjectWithDefaults ,
createPlanFromJSON ,
navigateToObjectWithFixedTimeBounds
} from '../../../appActions.js' ;
2024-01-02 15:24:22 +00:00
import { expect , test } from '../../../pluginFixtures.js' ;
2023-06-16 19:45:59 +00:00
2024-01-28 23:46:10 +00:00
const examplePlanSmall1 = JSON . parse (
fs . readFileSync (
new URL ( '../../../test-data/examplePlans/ExamplePlan_Small1.json' , import . meta . url )
)
) ;
2023-06-16 19:45:59 +00:00
test . describe ( 'Time List' , ( ) => {
2024-01-28 23:46:10 +00:00
test ( "Create a Time List, add a single Plan to it, verify all the activities are displayed with no milliseconds and selecting an activity shows it's properties" , async ( {
2023-06-16 19:45:59 +00:00
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 ( ) => {
2024-01-08 23:14:33 +00:00
await createPlanFromJSON ( page , {
2023-06-16 19:45:59 +00:00
name : 'Test Plan' ,
2024-01-28 23:46:10 +00:00
json : examplePlanSmall1 ,
2024-01-08 23:14:33 +00:00
parent : timelist . uuid
2023-06-16 19:45:59 +00:00
} ) ;
2024-01-28 23:46:10 +00:00
const groups = Object . keys ( examplePlanSmall1 ) ;
const firstGroupKey = groups [ 0 ] ;
const firstGroupItems = examplePlanSmall1 [ firstGroupKey ] ;
const firstActivity = firstGroupItems [ 0 ] ;
const lastActivity = firstGroupItems [ firstGroupItems . length - 1 ] ;
const startBound = firstActivity . start ;
const endBound = lastActivity . end ;
2023-06-16 19:45:59 +00:00
// Switch to fixed time mode with all plan events within the bounds
2024-08-07 21:36:14 +00:00
await navigateToObjectWithFixedTimeBounds ( page , timelist . url , startBound , endBound ) ;
2023-06-16 19:45:59 +00:00
// Verify all events are displayed
2024-01-08 23:14:33 +00:00
const eventCount = await page . getByRole ( 'row' ) . count ( ) ;
// subtracting one for the header
2024-08-07 21:36:14 +00:00
expect ( eventCount - 1 ) . toEqual ( firstGroupItems . length ) ;
2023-06-16 19:45:59 +00:00
} ) ;
await test . step ( 'Does not show milliseconds in times' , async ( ) => {
2024-01-08 23:14:33 +00:00
// Get an activity
const row = page . getByRole ( 'row' ) . nth ( 2 ) ;
2023-06-16 19:45:59 +00:00
// 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 ( '.' ) ;
} ) ;
2024-01-28 23:46:10 +00:00
await test . step ( 'Shows activity properties when a row is selected' , async ( ) => {
await page . getByRole ( 'row' ) . nth ( 2 ) . click ( ) ;
// Find the activity state section in the inspector
await page . getByRole ( 'tab' , { name : 'Activity' } ) . click ( ) ;
// Check that activity state label is displayed in the inspector.
await expect ( page . getByLabel ( 'Activity Status' ) . locator ( "[aria-selected='true']" ) ) . toHaveText (
'Not started'
) ;
} ) ;
2024-01-31 00:30:57 +00:00
} ) ;
} ) ;
test ( "View a timelist in expanded view, verify all the activities are displayed and selecting an activity shows it's properties" , 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 ( ) => {
await createPlanFromJSON ( page , {
name : 'Test Plan' ,
json : examplePlanSmall1 ,
parent : timelist . uuid
} ) ;
// Ensure that all activities are shown in the expanded view
const groups = Object . keys ( examplePlanSmall1 ) ;
const firstGroupKey = groups [ 0 ] ;
const firstGroupItems = examplePlanSmall1 [ firstGroupKey ] ;
const firstActivity = firstGroupItems [ 0 ] ;
const lastActivity = firstGroupItems [ firstGroupItems . length - 1 ] ;
const startBound = firstActivity . start ;
const endBound = lastActivity . end ;
// Switch to fixed time mode with all plan events within the bounds
2024-08-07 21:36:14 +00:00
await navigateToObjectWithFixedTimeBounds ( page , timelist . url , startBound , endBound ) ;
2024-01-31 00:30:57 +00:00
// Change the object to edit mode
await page . getByRole ( 'button' , { name : 'Edit Object' } ) . click ( ) ;
// Find the display properties section in the inspector
await page . getByRole ( 'tab' , { name : 'View Properties' } ) . click ( ) ;
// Switch to expanded view and save the setting
await page . getByLabel ( 'Display Style' ) . selectOption ( { label : 'Expanded' } ) ;
// Click on the "Save" button
await page . getByRole ( 'button' , { name : 'Save' } ) . click ( ) ;
await page . getByRole ( 'listitem' , { name : 'Save and Finish Editing' } ) . click ( ) ;
// Verify all events are displayed
const eventCount = await page . getByRole ( 'row' ) . count ( ) ;
2024-08-07 21:36:14 +00:00
expect ( eventCount ) . toEqual ( firstGroupItems . length ) ;
2024-01-31 00:30:57 +00:00
} ) ;
2024-03-05 22:45:28 +00:00
await test . step ( 'Shows activity properties when a row is selected in the expanded view' , async ( ) => {
2024-01-31 00:30:57 +00:00
await page . getByRole ( 'row' ) . nth ( 2 ) . click ( ) ;
// Find the activity state section in the inspector
await page . getByRole ( 'tab' , { name : 'Activity' } ) . click ( ) ;
// Check that activity state label is displayed in the inspector.
await expect ( page . getByLabel ( 'Activity Status' ) . locator ( "[aria-selected='true']" ) ) . toHaveText (
'Not started'
) ;
2023-06-16 19:45:59 +00:00
} ) ;
2024-01-08 23:14:33 +00:00
2024-03-05 22:45:28 +00:00
await test . step ( "Verify absence of progress indication for an activity that's not in progress" , async ( ) => {
// When an activity is not in progress, the progress pie is not visible
2024-08-07 21:36:14 +00:00
const hidden = page . getByRole ( 'row' ) . locator ( 'path' ) . nth ( 1 ) ;
await expect ( hidden ) . toBeHidden ( ) ;
2024-01-08 23:14:33 +00:00
} ) ;
} ) ;