| 
 | 1 | +/*****************************************************************************  | 
 | 2 | + * Open MCT, Copyright (c) 2014-2024, United States Government  | 
 | 3 | + * as represented by the Administrator of the National Aeronautics and Space  | 
 | 4 | + * Administration. All rights reserved.  | 
 | 5 | + *  | 
 | 6 | + * Open MCT is licensed under the Apache License, Version 2.0 (the  | 
 | 7 | + * "License"); you may not use this file except in compliance with the License.  | 
 | 8 | + * You may obtain a copy of the License at  | 
 | 9 | + * http://www.apache.org/licenses/LICENSE-2.0.  | 
 | 10 | + *  | 
 | 11 | + * Unless required by applicable law or agreed to in writing, software  | 
 | 12 | + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT  | 
 | 13 | + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the  | 
 | 14 | + * License for the specific language governing permissions and limitations  | 
 | 15 | + * under the License.  | 
 | 16 | + *  | 
 | 17 | + * Open MCT includes source code licensed under additional open source  | 
 | 18 | + * licenses. See the Open Source Licenses file (LICENSES.md) included with  | 
 | 19 | + * this source code distribution or the Licensing information page available  | 
 | 20 | + * at runtime from the About dialog for additional information.  | 
 | 21 | + *****************************************************************************/  | 
 | 22 | + | 
 | 23 | +import { createDomainObjectWithDefaults, setTimeConductorBounds } from '../../../../appActions.js';  | 
 | 24 | +import { expect, test } from '../../../../pluginFixtures.js';  | 
 | 25 | + | 
 | 26 | +test.describe('Event Timeline View', () => {  | 
 | 27 | +  let eventTimelineView;  | 
 | 28 | +  let eventGenerator1;  | 
 | 29 | + | 
 | 30 | +  test.beforeEach(async ({ page }) => {  | 
 | 31 | +    await page.goto('./', { waitUntil: 'domcontentloaded' });  | 
 | 32 | + | 
 | 33 | +    eventTimelineView = await createDomainObjectWithDefaults(page, {  | 
 | 34 | +      type: 'Time Strip'  | 
 | 35 | +    });  | 
 | 36 | + | 
 | 37 | +    await createDomainObjectWithDefaults(page, {  | 
 | 38 | +      type: 'Sine Wave Generator',  | 
 | 39 | +      parent: eventTimelineView.uuid  | 
 | 40 | +    });  | 
 | 41 | + | 
 | 42 | +    eventGenerator1 = await createDomainObjectWithDefaults(page, {  | 
 | 43 | +      type: 'Event Message Generator',  | 
 | 44 | +      parent: eventTimelineView.uuid  | 
 | 45 | +    });  | 
 | 46 | + | 
 | 47 | +    await createDomainObjectWithDefaults(page, {  | 
 | 48 | +      type: 'Event Message Generator with Acknowledge',  | 
 | 49 | +      parent: eventTimelineView.uuid  | 
 | 50 | +    });  | 
 | 51 | + | 
 | 52 | +    await setTimeConductorBounds(page, {  | 
 | 53 | +      startDate: '2024-01-01',  | 
 | 54 | +      endDate: '2024-01-01',  | 
 | 55 | +      startTime: '01:01:00',  | 
 | 56 | +      endTime: '01:04:00'  | 
 | 57 | +    });  | 
 | 58 | +  });  | 
 | 59 | + | 
 | 60 | +  test('Ensure we can build a Time Strip with event', async ({ page }) => {  | 
 | 61 | +    await page.goto(eventTimelineView.url);  | 
 | 62 | + | 
 | 63 | +    // click on an event  | 
 | 64 | +    await page  | 
 | 65 | +      .getByLabel(eventTimelineView.name)  | 
 | 66 | +      .getByLabel(/PROGRAM ALARM/)  | 
 | 67 | +      .click();  | 
 | 68 | + | 
 | 69 | +    // click on the event inspector tab  | 
 | 70 | +    await page.getByRole('tab', { name: 'Event' }).click();  | 
 | 71 | + | 
 | 72 | +    // ensure the event inspector has the the same event  | 
 | 73 | +    await expect(page.getByText(/PROGRAM ALARM/)).toBeVisible();  | 
 | 74 | + | 
 | 75 | +    // count the event lines  | 
 | 76 | +    const eventWrappersContainer = page.locator('.c-events-tsv__container');  | 
 | 77 | +    const eventWrappers = eventWrappersContainer.locator('.c-events-tsv__event-line');  | 
 | 78 | +    const expectedEventWrappersCount = 25;  | 
 | 79 | +    await expect(eventWrappers).toHaveCount(expectedEventWrappersCount);  | 
 | 80 | + | 
 | 81 | +    // click on another event  | 
 | 82 | +    await page  | 
 | 83 | +      .getByLabel(eventTimelineView.name)  | 
 | 84 | +      .getByLabel(/pegged/)  | 
 | 85 | +      .click();  | 
 | 86 | + | 
 | 87 | +    // ensure the tooltip shows up  | 
 | 88 | +    await expect(  | 
 | 89 | +      page.getByRole('tooltip').getByText(/pegged on horizontal velocity/)  | 
 | 90 | +    ).toBeVisible();  | 
 | 91 | + | 
 | 92 | +    // and that event appears in the inspector  | 
 | 93 | +    await expect(  | 
 | 94 | +      page.getByLabel('Inspector Views').getByText(/pegged on horizontal velocity/)  | 
 | 95 | +    ).toBeVisible();  | 
 | 96 | + | 
 | 97 | +    // turn on extended lines  | 
 | 98 | +    await page  | 
 | 99 | +      .getByRole('button', {  | 
 | 100 | +        name: `Toggle extended event lines overlay for ${eventGenerator1.name}`  | 
 | 101 | +      })  | 
 | 102 | +      .click();  | 
 | 103 | + | 
 | 104 | +    // count the extended lines  | 
 | 105 | +    const overlayLinesContainer = page.locator('.c-timeline__overlay-lines');  | 
 | 106 | +    const extendedLines = overlayLinesContainer.locator('.c-timeline__event-line--extended');  | 
 | 107 | +    const expectedCount = 25;  | 
 | 108 | +    await expect(extendedLines).toHaveCount(expectedCount);  | 
 | 109 | +  });  | 
 | 110 | +});  | 
0 commit comments