Compare commits
	
		
			1 Commits
		
	
	
		
			omm-r5.0.0
			...
			playwright
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					98fd496c1f | 
@@ -1,6 +1,6 @@
 | 
			
		||||
# Open MCT License
 | 
			
		||||
 | 
			
		||||
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, Copyright (c) 2014-2022, 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.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
#*****************************************************************************
 | 
			
		||||
#* Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
#* Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
#* as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
#* Administration. All rights reserved.
 | 
			
		||||
#*
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
<!--
 | 
			
		||||
 Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 Administration. All rights reserved.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -159,26 +159,24 @@ async function expandTreePaneItemByName(page, name) {
 | 
			
		||||
 * @returns {Promise<CreatedObjectInfo>} An object containing information about the newly created domain object.
 | 
			
		||||
 */
 | 
			
		||||
async function createPlanFromJSON(page, { name, json, parent = 'mine' }) {
 | 
			
		||||
    if (!name) {
 | 
			
		||||
        name = `Plan:${genUuid()}`;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const parentUrl = await getHashUrlToDomainObject(page, parent);
 | 
			
		||||
 | 
			
		||||
    // Navigate to the parent object. This is necessary to create the object
 | 
			
		||||
    // in the correct location, such as a folder, layout, or plot.
 | 
			
		||||
    await page.goto(`${parentUrl}?hideTree=true`);
 | 
			
		||||
 | 
			
		||||
    // Click the Create button
 | 
			
		||||
    //Click the Create button
 | 
			
		||||
    await page.click('button:has-text("Create")');
 | 
			
		||||
 | 
			
		||||
    // Click 'Plan' menu option
 | 
			
		||||
    await page.click(`li:text("Plan")`);
 | 
			
		||||
 | 
			
		||||
    // Modify the name input field of the domain object to accept 'name'
 | 
			
		||||
    const nameInput = page.locator('form[name="mctForm"] .first input[type="text"]');
 | 
			
		||||
    await nameInput.fill("");
 | 
			
		||||
    await nameInput.fill(name);
 | 
			
		||||
    if (name) {
 | 
			
		||||
        const nameInput = page.locator('form[name="mctForm"] .first input[type="text"]');
 | 
			
		||||
        await nameInput.fill("");
 | 
			
		||||
        await nameInput.fill(name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Upload buffer from memory
 | 
			
		||||
    await page.locator('input#fileElem').setInputFiles({
 | 
			
		||||
@@ -196,7 +194,7 @@ async function createPlanFromJSON(page, { name, json, parent = 'mine' }) {
 | 
			
		||||
    ]);
 | 
			
		||||
 | 
			
		||||
    // Wait until the URL is updated
 | 
			
		||||
    await page.waitForURL(`**/${parent}/*`);
 | 
			
		||||
    await page.waitForURL(`**/mine/*`);
 | 
			
		||||
    const uuid = await getFocusedObjectUuid(page);
 | 
			
		||||
    const objectUrl = await getHashUrlToDomainObject(page, uuid);
 | 
			
		||||
 | 
			
		||||
@@ -385,25 +383,6 @@ async function setEndOffset(page, offset) {
 | 
			
		||||
    await setTimeConductorOffset(page, offset, endOffsetButton);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Selects an inspector tab based on the provided tab name
 | 
			
		||||
 *
 | 
			
		||||
 * @param {import('@playwright/test').Page} page
 | 
			
		||||
 * @param {String} name the name of the tab
 | 
			
		||||
 */
 | 
			
		||||
async function selectInspectorTab(page, name) {
 | 
			
		||||
    const inspectorTabs = page.getByRole('tablist');
 | 
			
		||||
    const inspectorTab = inspectorTabs.getByTitle(name);
 | 
			
		||||
    const inspectorTabClass = await inspectorTab.getAttribute('class');
 | 
			
		||||
    const isSelectedInspectorTab = inspectorTabClass.includes('is-current');
 | 
			
		||||
 | 
			
		||||
    // do not click a tab that is already selected or it will timeout your test
 | 
			
		||||
    // do to a { pointer-events: none; } on selected tabs
 | 
			
		||||
    if (!isSelectedInspectorTab) {
 | 
			
		||||
        await inspectorTab.click();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// eslint-disable-next-line no-undef
 | 
			
		||||
module.exports = {
 | 
			
		||||
    createDomainObjectWithDefaults,
 | 
			
		||||
@@ -417,6 +396,5 @@ module.exports = {
 | 
			
		||||
    setFixedTimeMode,
 | 
			
		||||
    setRealTimeMode,
 | 
			
		||||
    setStartOffset,
 | 
			
		||||
    setEndOffset,
 | 
			
		||||
    selectInspectorTab
 | 
			
		||||
    setEndOffset
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
/* eslint-disable no-undef */
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -32,8 +32,9 @@ async function enterTextEntry(page, text) {
 | 
			
		||||
    await page.locator(NOTEBOOK_DROP_AREA).click();
 | 
			
		||||
 | 
			
		||||
    // enter text
 | 
			
		||||
    await page.locator('[aria-label="Notebook Entry"].is-selected div.c-ne__text').fill(text);
 | 
			
		||||
    await commitEntry(page);
 | 
			
		||||
    await page.locator('div.c-ne__text').click();
 | 
			
		||||
    await page.locator('div.c-ne__text').fill(text);
 | 
			
		||||
    await page.locator('div.c-ne__text').press('Enter');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -50,15 +51,6 @@ async function dragAndDropEmbed(page, notebookObject) {
 | 
			
		||||
    await page.click('button[title="Show selected item in tree"]');
 | 
			
		||||
    // Drag and drop the SWG into the notebook
 | 
			
		||||
    await page.dragAndDrop(`text=${swg.name}`, NOTEBOOK_DROP_AREA);
 | 
			
		||||
    await commitEntry(page);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @private
 | 
			
		||||
 * @param {import('@playwright/test').Page} page
 | 
			
		||||
 */
 | 
			
		||||
async function commitEntry(page) {
 | 
			
		||||
    await page.locator('.c-ne__save-button > button').click();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// eslint-disable-next-line no-undef
 | 
			
		||||
 
 | 
			
		||||
@@ -1,92 +0,0 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * 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.
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
 | 
			
		||||
import { expect } from '../pluginFixtures';
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Asserts that the number of activities in the plan view matches the number of
 | 
			
		||||
 * activities in the plan data within the specified time bounds. Performs an assertion
 | 
			
		||||
 * for each activity in the plan data per group, using the earliest activity's
 | 
			
		||||
 * start time as the start bound and the current activity's end time as the end bound.
 | 
			
		||||
 * @param {import('@playwright/test').Page} page the page
 | 
			
		||||
 * @param {object} plan The raw plan json to assert against
 | 
			
		||||
 * @param {string} objectUrl The URL of the object to assert against (plan or gantt chart)
 | 
			
		||||
 */
 | 
			
		||||
export async function assertPlanActivities(page, plan, objectUrl) {
 | 
			
		||||
    const groups = Object.keys(plan);
 | 
			
		||||
    for (const group of groups) {
 | 
			
		||||
        for (let i = 0; i < plan[group].length; i++) {
 | 
			
		||||
            // Set the startBound to the start time of the first activity in the group
 | 
			
		||||
            const startBound = plan[group][0].start;
 | 
			
		||||
            // Set the endBound to the end time of the current activity
 | 
			
		||||
            let endBound = plan[group][i].end;
 | 
			
		||||
            if (endBound === startBound) {
 | 
			
		||||
                // Prevent oddities with setting start and end bound equal
 | 
			
		||||
                // via URL params
 | 
			
		||||
                endBound += 1;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Switch to fixed time mode with all plan events within the bounds
 | 
			
		||||
            await page.goto(`${objectUrl}?tc.mode=fixed&tc.startBound=${startBound}&tc.endBound=${endBound}&tc.timeSystem=utc&view=plan.view`);
 | 
			
		||||
 | 
			
		||||
            // Assert that the number of activities in the plan view matches the number of
 | 
			
		||||
            // activities in the plan data within the specified time bounds
 | 
			
		||||
            const eventCount = await page.locator('.activity-bounds').count();
 | 
			
		||||
            expect(eventCount).toEqual(Object.values(plan)
 | 
			
		||||
                .flat()
 | 
			
		||||
                .filter(event =>
 | 
			
		||||
                    activitiesWithinTimeBounds(event.start, event.end, startBound, endBound)).length);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Returns true if the activities time bounds overlap, false otherwise.
 | 
			
		||||
* @param {number} start1 the start time of the first activity
 | 
			
		||||
* @param {number} end1 the end time of the first activity
 | 
			
		||||
* @param {number} start2 the start time of the second activity
 | 
			
		||||
* @param {number} end2 the end time of the second activity
 | 
			
		||||
* @returns {boolean} true if the activities overlap, false otherwise
 | 
			
		||||
*/
 | 
			
		||||
function activitiesWithinTimeBounds(start1, end1, start2, end2) {
 | 
			
		||||
    return (start1 >= start2 && start1 <= end2)
 | 
			
		||||
         || (end1 >= start2 && end1 <= end2)
 | 
			
		||||
         || (start2 >= start1 && start2 <= end1)
 | 
			
		||||
         || (end2 >= start1 && end2 <= end1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Navigate to the plan view, switch to fixed time mode,
 | 
			
		||||
 * and set the bounds to span all activities.
 | 
			
		||||
 * @param {import('@playwright/test').Page} page
 | 
			
		||||
 * @param {object} planJson
 | 
			
		||||
 * @param {string} planObjectUrl
 | 
			
		||||
 */
 | 
			
		||||
export async function setBoundsToSpanAllActivities(page, planJson, planObjectUrl) {
 | 
			
		||||
    const activities = Object.values(planJson).flat();
 | 
			
		||||
    // Get the earliest start value
 | 
			
		||||
    const start = Math.min(...activities.map(activity => activity.start));
 | 
			
		||||
    // Get the latest end value
 | 
			
		||||
    const end = Math.max(...activities.map(activity => activity.end));
 | 
			
		||||
    // Set the start and end bounds to the earliest start and latest end
 | 
			
		||||
    await page.goto(`${planObjectUrl}?tc.mode=fixed&tc.startBound=${start}&tc.endBound=${end}&tc.timeSystem=utc&view=plan.view`);
 | 
			
		||||
}
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										51
									
								
								e2e/playwright-a11y.config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								e2e/playwright-a11y.config.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,51 @@
 | 
			
		||||
/* eslint-disable no-undef */
 | 
			
		||||
// playwright.config.js
 | 
			
		||||
// @ts-check
 | 
			
		||||
 | 
			
		||||
/** @type {import('@playwright/test').PlaywrightTestConfig<{ theme: string }>} */
 | 
			
		||||
const config = {
 | 
			
		||||
    retries: 0, // Visual tests should never retry due to snapshot comparison errors. Leaving as a shim
 | 
			
		||||
    testDir: 'tests/a11y',
 | 
			
		||||
    testMatch: '**/*.a11y.spec.js', // only run visual tests
 | 
			
		||||
    timeout: 60 * 1000,
 | 
			
		||||
    workers: 1, //Lower stress on Circle CI Agent for Visual tests https://github.com/percy/cli/discussions/1067
 | 
			
		||||
    webServer: {
 | 
			
		||||
        command: 'npm run start:coverage',
 | 
			
		||||
        url: 'http://localhost:8080/#',
 | 
			
		||||
        timeout: 200 * 1000,
 | 
			
		||||
        reuseExistingServer: !process.env.CI
 | 
			
		||||
    },
 | 
			
		||||
    use: {
 | 
			
		||||
        baseURL: 'http://localhost:8080/',
 | 
			
		||||
        headless: true, // this needs to remain headless to avoid visual changes due to GPU rendering in headed browsers
 | 
			
		||||
        ignoreHTTPSErrors: true,
 | 
			
		||||
        screenshot: 'only-on-failure',
 | 
			
		||||
        trace: 'on-first-retry',
 | 
			
		||||
        video: 'off'
 | 
			
		||||
    },
 | 
			
		||||
    projects: [
 | 
			
		||||
        {
 | 
			
		||||
            name: 'chrome',
 | 
			
		||||
            use: {
 | 
			
		||||
                browserName: 'chromium'
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            name: 'chrome-snow-theme', //Runs the same visual tests but with snow-theme enabled
 | 
			
		||||
            use: {
 | 
			
		||||
                browserName: 'chromium',
 | 
			
		||||
                theme: 'snow'
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    reporter: [
 | 
			
		||||
        ['list'],
 | 
			
		||||
        ['junit', { outputFile: '../test-results/results.xml' }],
 | 
			
		||||
        ['html', {
 | 
			
		||||
            open: 'never',
 | 
			
		||||
            outputFolder: '../html-test-results' //Must be in different location due to https://github.com/microsoft/playwright/issues/12840
 | 
			
		||||
        }]
 | 
			
		||||
    ]
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
module.exports = config;
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
/* eslint-disable no-undef */
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,44 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "Group 1": [
 | 
			
		||||
      {
 | 
			
		||||
          "name": "Past event 1",
 | 
			
		||||
          "start": 1660320408000,
 | 
			
		||||
          "end": 1660343797000,
 | 
			
		||||
          "type": "Group 1",
 | 
			
		||||
          "color": "orange",
 | 
			
		||||
          "textColor": "white"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
          "name": "Past event 2",
 | 
			
		||||
          "start": 1660406808000,
 | 
			
		||||
          "end": 1660429160000,
 | 
			
		||||
          "type": "Group 1",
 | 
			
		||||
          "color": "orange",
 | 
			
		||||
          "textColor": "white"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
          "name": "Past event 3",
 | 
			
		||||
          "start": 1660493208000,
 | 
			
		||||
          "end": 1660503981000,
 | 
			
		||||
          "type": "Group 1",
 | 
			
		||||
          "color": "orange",
 | 
			
		||||
          "textColor": "white"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
          "name": "Past event 4",
 | 
			
		||||
          "start": 1660579608000,
 | 
			
		||||
          "end": 1660624108000,
 | 
			
		||||
          "type": "Group 1",
 | 
			
		||||
          "color": "orange",
 | 
			
		||||
          "textColor": "white"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
          "name": "Past event 5",
 | 
			
		||||
          "start": 1660666008000,
 | 
			
		||||
          "end": 1660681529000,
 | 
			
		||||
          "type": "Group 1",
 | 
			
		||||
          "color": "orange",
 | 
			
		||||
          "textColor": "white"
 | 
			
		||||
      }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -1,38 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "Group 1": [
 | 
			
		||||
      {
 | 
			
		||||
          "name": "Group 1 event 1",
 | 
			
		||||
          "start": 1650320408000,
 | 
			
		||||
          "end": 1660343797000,
 | 
			
		||||
          "type": "Group 1",
 | 
			
		||||
          "color": "orange",
 | 
			
		||||
          "textColor": "white"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
          "name": "Group 1 event 2",
 | 
			
		||||
          "start": 1660005808000,
 | 
			
		||||
          "end": 1660429160000,
 | 
			
		||||
          "type": "Group 1",
 | 
			
		||||
          "color": "yellow",
 | 
			
		||||
          "textColor": "white"
 | 
			
		||||
      }
 | 
			
		||||
  ],
 | 
			
		||||
  "Group 2": [
 | 
			
		||||
      {
 | 
			
		||||
          "name": "Group 2 event 1",
 | 
			
		||||
          "start": 1660320408000,
 | 
			
		||||
          "end": 1660420408000,
 | 
			
		||||
          "type": "Group 2",
 | 
			
		||||
          "color": "green",
 | 
			
		||||
          "textColor": "white"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
          "name": "Group 2 event 2",
 | 
			
		||||
          "start": 1660406808000,
 | 
			
		||||
          "end": 1690429160000,
 | 
			
		||||
          "type": "Group 2",
 | 
			
		||||
          "color": "blue",
 | 
			
		||||
          "textColor": "white"
 | 
			
		||||
      }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										129
									
								
								e2e/tests/a11y/default.a11y.spec.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								e2e/tests/a11y/default.a11y.spec.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,129 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, 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, expandTreePaneItemByName } = require('../../appActions');
 | 
			
		||||
const { injectAxe, checkA11y, getViolations, reportViolations } = require('axe-playwright');
 | 
			
		||||
const { createHtmlReport } = require('axe-html-reporter');
 | 
			
		||||
const AxeBuilder = require('@axe-core/playwright').default; // 1
 | 
			
		||||
 | 
			
		||||
test.describe('Visual - Default', () => {
 | 
			
		||||
    test.beforeEach(async ({ page }) => {
 | 
			
		||||
        //Go to baseURL and Hide Tree
 | 
			
		||||
        await page.goto('./#/browse/mine?hideTree=true', { waitUntil: 'networkidle' });
 | 
			
		||||
        await injectAxe(page);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test.only('axe-playwright - basic reporting', async ({ page, theme }) => {
 | 
			
		||||
        // Verify that Create button is actionable
 | 
			
		||||
        await expect(page.locator('button:has-text("Create")')).toBeEnabled();
 | 
			
		||||
 | 
			
		||||
        await checkA11y(page, null, {
 | 
			
		||||
            detailedReport: true,
 | 
			
		||||
            detailedReportOptions: { html: true }
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('axe-playwright - notebook', async ({ page, theme, openmctConfig }) => {
 | 
			
		||||
        const { myItemsFolderName } = openmctConfig;
 | 
			
		||||
 | 
			
		||||
        // Create Notebook
 | 
			
		||||
        const notebook = await createDomainObjectWithDefaults(page, {
 | 
			
		||||
            type: 'Notebook',
 | 
			
		||||
            name: "Embed Test Notebook"
 | 
			
		||||
        });
 | 
			
		||||
        // Create Overlay Plot
 | 
			
		||||
        await createDomainObjectWithDefaults(page, {
 | 
			
		||||
            type: 'Overlay Plot',
 | 
			
		||||
            name: "Dropped Overlay Plot"
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        await expandTreePaneItemByName(page, myItemsFolderName);
 | 
			
		||||
 | 
			
		||||
        await page.goto(notebook.url);
 | 
			
		||||
        await page.dragAndDrop('role=treeitem[name=/Dropped Overlay Plot/]', '.c-notebook__drag-area');
 | 
			
		||||
 | 
			
		||||
        await percySnapshot(page, `Notebook w/ dropped embed (theme: ${theme})`);
 | 
			
		||||
 | 
			
		||||
        await checkA11y(page, null, {
 | 
			
		||||
            detailedReport: true,
 | 
			
		||||
            detailedReportOptions: { html: true }
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('axe-playwright - html reporting with wcag2aa rules 2', async ({ page, theme }) => {
 | 
			
		||||
        // Verify that Create button is actionable
 | 
			
		||||
        await expect(page.locator('button:has-text("Create")')).toBeEnabled();
 | 
			
		||||
 | 
			
		||||
        await checkA11y(page, null,
 | 
			
		||||
            {
 | 
			
		||||
                axeOptions: {
 | 
			
		||||
                    runOnly: {
 | 
			
		||||
                        type: 'tag',
 | 
			
		||||
                        values: ['wcag2aa']
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            true, 'default',
 | 
			
		||||
            {
 | 
			
		||||
                outputDirPath: './results',
 | 
			
		||||
                outputDir: 'accessibility',
 | 
			
		||||
                reportFileName: 'accessibility-audit.html'
 | 
			
		||||
            }
 | 
			
		||||
        );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('axe-playwright - html reporting with wcag2aa rules', async ({ page, theme }) => {
 | 
			
		||||
        // Verify that Create button is actionable
 | 
			
		||||
        await expect(page.locator('button:has-text("Create")')).toBeEnabled();
 | 
			
		||||
 | 
			
		||||
        await checkA11y(page, null,
 | 
			
		||||
            {
 | 
			
		||||
                axeOptions: {
 | 
			
		||||
                    runOnly: {
 | 
			
		||||
                        type: 'tag',
 | 
			
		||||
                        values: ['wcag2aa']
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            true, 'default',
 | 
			
		||||
            { reporter: 'html' }
 | 
			
		||||
        );
 | 
			
		||||
        await createHtmlReport(
 | 
			
		||||
            { results: { violations: args.violations } }
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('axeBuilder - should not have any automatically detectable accessibility issues', async ({ page }, testInfo) => {
 | 
			
		||||
 | 
			
		||||
        const accessibilityScanResults = await new AxeBuilder({ page }).withTags(['wcag2aa']).analyze(); // 4
 | 
			
		||||
 | 
			
		||||
        await testInfo.attach('accessibility-scan-results', {
 | 
			
		||||
            body: JSON.stringify(accessibilityScanResults, null, 2),
 | 
			
		||||
            contentType: 'application/json'
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        expect(accessibilityScanResults.violations).toEqual([]); // 5
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
});
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,85 +0,0 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * 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 { createPlanFromJSON, createDomainObjectWithDefaults, selectInspectorTab } = require('../../../appActions');
 | 
			
		||||
const testPlan1 = require('../../../test-data/examplePlans/ExamplePlan_Small1.json');
 | 
			
		||||
const testPlan2 = require('../../../test-data/examplePlans/ExamplePlan_Small2.json');
 | 
			
		||||
const { assertPlanActivities, setBoundsToSpanAllActivities } = require('../../../helper/planningUtils');
 | 
			
		||||
const { getPreciseDuration } = require('../../../../src/utils/duration');
 | 
			
		||||
 | 
			
		||||
test.describe("Gantt Chart", () => {
 | 
			
		||||
    let ganttChart;
 | 
			
		||||
    test.beforeEach(async ({ page }) => {
 | 
			
		||||
        await page.goto('./', { waitUntil: 'networkidle' });
 | 
			
		||||
        ganttChart = await createDomainObjectWithDefaults(page, {
 | 
			
		||||
            type: 'Gantt Chart'
 | 
			
		||||
        });
 | 
			
		||||
        await createPlanFromJSON(page, {
 | 
			
		||||
            json: testPlan1,
 | 
			
		||||
            parent: ganttChart.uuid
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test("Displays all plan events", async ({ page }) => {
 | 
			
		||||
        await page.goto(ganttChart.url);
 | 
			
		||||
 | 
			
		||||
        await assertPlanActivities(page, testPlan1, ganttChart.url);
 | 
			
		||||
    });
 | 
			
		||||
    test("Replaces a plan with a new plan", async ({ page }) => {
 | 
			
		||||
        await assertPlanActivities(page, testPlan1, ganttChart.url);
 | 
			
		||||
        await createPlanFromJSON(page, {
 | 
			
		||||
            json: testPlan2,
 | 
			
		||||
            parent: ganttChart.uuid
 | 
			
		||||
        });
 | 
			
		||||
        const replaceModal = page.getByRole('dialog').filter({ hasText: "This action will replace the current Plan. Do you want to continue?" });
 | 
			
		||||
        await expect(replaceModal).toBeVisible();
 | 
			
		||||
        await page.getByRole('button', { name: 'OK' }).click();
 | 
			
		||||
 | 
			
		||||
        await assertPlanActivities(page, testPlan2, ganttChart.url);
 | 
			
		||||
    });
 | 
			
		||||
    test("Can select a single activity and display its details in the inspector", async ({ page }) => {
 | 
			
		||||
        test.slow();
 | 
			
		||||
        await page.goto(ganttChart.url);
 | 
			
		||||
 | 
			
		||||
        await setBoundsToSpanAllActivities(page, testPlan1, ganttChart.url);
 | 
			
		||||
 | 
			
		||||
        const activities = Object.values(testPlan1).flat();
 | 
			
		||||
        const activity = activities[0];
 | 
			
		||||
        await page.locator('g').filter({ hasText: new RegExp(activity.name) }).click();
 | 
			
		||||
        await selectInspectorTab(page, 'Activity');
 | 
			
		||||
 | 
			
		||||
        const startDateTime = await page.locator('.c-inspect-properties__label:has-text("Start DateTime")+.c-inspect-properties__value').innerText();
 | 
			
		||||
        const endDateTime = await page.locator('.c-inspect-properties__label:has-text("End DateTime")+.c-inspect-properties__value').innerText();
 | 
			
		||||
        const duration = await page.locator('.c-inspect-properties__label:has-text("duration")+.c-inspect-properties__value').innerText();
 | 
			
		||||
 | 
			
		||||
        const expectedStartDate = new Date(activity.start).toISOString();
 | 
			
		||||
        const actualStartDate = new Date(startDateTime).toISOString();
 | 
			
		||||
        const expectedEndDate = new Date(activity.end).toISOString();
 | 
			
		||||
        const actualEndDate = new Date(endDateTime).toISOString();
 | 
			
		||||
        const expectedDuration = getPreciseDuration(activity.end - activity.start);
 | 
			
		||||
        const actualDuration = duration;
 | 
			
		||||
 | 
			
		||||
        expect(expectedStartDate).toEqual(actualStartDate);
 | 
			
		||||
        expect(expectedEndDate).toEqual(actualEndDate);
 | 
			
		||||
        expect(expectedDuration).toEqual(actualDuration);
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -19,21 +19,69 @@
 | 
			
		||||
 * this source code distribution or the Licensing information page available
 | 
			
		||||
 * at runtime from the About dialog for additional information.
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
const { test } = require('../../../pluginFixtures');
 | 
			
		||||
const { test, expect } = require('../../../pluginFixtures');
 | 
			
		||||
const { createPlanFromJSON } = require('../../../appActions');
 | 
			
		||||
const testPlan1 = require('../../../test-data/examplePlans/ExamplePlan_Small1.json');
 | 
			
		||||
const { assertPlanActivities } = require('../../../helper/planningUtils');
 | 
			
		||||
 | 
			
		||||
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("Plan", () => {
 | 
			
		||||
    let plan;
 | 
			
		||||
    test.beforeEach(async ({ page }) => {
 | 
			
		||||
    test("Create a Plan and display all plan events @unstable", async ({ page }) => {
 | 
			
		||||
        await page.goto('./', { waitUntil: 'networkidle' });
 | 
			
		||||
        plan = await createPlanFromJSON(page, {
 | 
			
		||||
            json: testPlan1
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test("Displays all plan events", async ({ page }) => {
 | 
			
		||||
        await assertPlanActivities(page, testPlan1, plan.url);
 | 
			
		||||
        const plan = await createPlanFromJSON(page, {
 | 
			
		||||
            name: 'Test Plan',
 | 
			
		||||
            json: testPlan
 | 
			
		||||
        });
 | 
			
		||||
        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(`${plan.url}?tc.mode=fixed&tc.startBound=${startBound}&tc.endBound=${endBound}&tc.timeSystem=utc&view=plan.view`);
 | 
			
		||||
        const eventCount = await page.locator('.activity-bounds').count();
 | 
			
		||||
        expect(eventCount).toEqual(testPlan.TEST_GROUP.length);
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -52,9 +52,10 @@ test.describe.serial('Condition Set CRUD Operations on @localStorage', () => {
 | 
			
		||||
 | 
			
		||||
        //Set object identifier from url
 | 
			
		||||
        conditionSetUrl = page.url();
 | 
			
		||||
        console.log('conditionSetUrl ' + conditionSetUrl);
 | 
			
		||||
 | 
			
		||||
        getConditionSetIdentifierFromUrl = conditionSetUrl.split('/').pop().split('?')[0];
 | 
			
		||||
        console.debug(`getConditionSetIdentifierFromUrl: ${getConditionSetIdentifierFromUrl}`);
 | 
			
		||||
        console.debug('getConditionSetIdentifierFromUrl ' + getConditionSetIdentifierFromUrl);
 | 
			
		||||
        await page.close();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
@@ -245,81 +246,4 @@ test.describe('Basic Condition Set Use', () => {
 | 
			
		||||
        await expect(page.getByRole('menuitem', { name: /Plot/ })).toBeVisible();
 | 
			
		||||
        await expect(page.getByRole('menuitem', { name: /Telemetry Table/ })).toBeVisible();
 | 
			
		||||
    });
 | 
			
		||||
    test('ConditionSet should output blank instead of the default value', async ({ page }) => {
 | 
			
		||||
        //Navigate to baseURL
 | 
			
		||||
        await page.goto('./', { waitUntil: 'networkidle' });
 | 
			
		||||
 | 
			
		||||
        //Click the Create button
 | 
			
		||||
        await page.click('button:has-text("Create")');
 | 
			
		||||
 | 
			
		||||
        // Click the object specified by 'type'
 | 
			
		||||
        await page.click(`li[role='menuitem']:text("Sine Wave Generator")`);
 | 
			
		||||
        await page.getByRole('spinbutton', { name: 'Loading Delay (ms)' }).fill('8000');
 | 
			
		||||
        const nameInput = page.locator('form[name="mctForm"] .first input[type="text"]');
 | 
			
		||||
        await nameInput.fill("Delayed Sine Wave Generator");
 | 
			
		||||
 | 
			
		||||
        // Click OK button and wait for Navigate event
 | 
			
		||||
        await Promise.all([
 | 
			
		||||
            page.waitForLoadState(),
 | 
			
		||||
            page.click('[aria-label="Save"]'),
 | 
			
		||||
            // Wait for Save Banner to appear
 | 
			
		||||
            page.waitForSelector('.c-message-banner__message')
 | 
			
		||||
        ]);
 | 
			
		||||
 | 
			
		||||
        // Create a new condition set
 | 
			
		||||
        await createDomainObjectWithDefaults(page, {
 | 
			
		||||
            type: 'Condition Set',
 | 
			
		||||
            name: "Test Blank Output of Condition Set"
 | 
			
		||||
        });
 | 
			
		||||
        // Change the object to edit mode
 | 
			
		||||
        await page.locator('[title="Edit"]').click();
 | 
			
		||||
 | 
			
		||||
        // Click Add Condition button twice
 | 
			
		||||
        await page.locator('#addCondition').click();
 | 
			
		||||
        await page.locator('#addCondition').click();
 | 
			
		||||
        await page.locator('#conditionCollection').getByRole('textbox').nth(0).fill('First Condition');
 | 
			
		||||
        await page.locator('#conditionCollection').getByRole('textbox').nth(1).fill('Second Condition');
 | 
			
		||||
 | 
			
		||||
        // Expand the 'My Items' folder in the left tree
 | 
			
		||||
        await page.locator('.c-tree__item__view-control.c-disclosure-triangle').first().click();
 | 
			
		||||
        // Add the Sine Wave Generator to the Condition Set and save changes
 | 
			
		||||
        const treePane = page.getByRole('tree', {
 | 
			
		||||
            name: 'Main Tree'
 | 
			
		||||
        });
 | 
			
		||||
        const sineWaveGeneratorTreeItem = treePane.getByRole('treeitem', { name: "Delayed Sine Wave Generator"});
 | 
			
		||||
        const conditionCollection = await page.locator('#conditionCollection');
 | 
			
		||||
 | 
			
		||||
        await sineWaveGeneratorTreeItem.dragTo(conditionCollection);
 | 
			
		||||
 | 
			
		||||
        const firstCriterionTelemetry = await page.locator('[aria-label="Criterion Telemetry Selection"] >> nth=0');
 | 
			
		||||
        firstCriterionTelemetry.selectOption({ label: 'Delayed Sine Wave Generator' });
 | 
			
		||||
 | 
			
		||||
        const secondCriterionTelemetry = await page.locator('[aria-label="Criterion Telemetry Selection"] >> nth=1');
 | 
			
		||||
        secondCriterionTelemetry.selectOption({ label: 'Delayed Sine Wave Generator' });
 | 
			
		||||
 | 
			
		||||
        const firstCriterionMetadata = await page.locator('[aria-label="Criterion Metadata Selection"] >> nth=0');
 | 
			
		||||
        firstCriterionMetadata.selectOption({ label: 'Sine' });
 | 
			
		||||
 | 
			
		||||
        const secondCriterionMetadata = await page.locator('[aria-label="Criterion Metadata Selection"] >> nth=1');
 | 
			
		||||
        secondCriterionMetadata.selectOption({ label: 'Sine' });
 | 
			
		||||
 | 
			
		||||
        const firstCriterionComparison = await page.locator('[aria-label="Criterion Comparison Selection"] >> nth=0');
 | 
			
		||||
        firstCriterionComparison.selectOption({ label: 'is greater than or equal to' });
 | 
			
		||||
 | 
			
		||||
        const secondCriterionComparison = await page.locator('[aria-label="Criterion Comparison Selection"] >> nth=1');
 | 
			
		||||
        secondCriterionComparison.selectOption({ label: 'is less than' });
 | 
			
		||||
 | 
			
		||||
        const firstCriterionInput = await page.locator('[aria-label="Criterion Input"] >> nth=0');
 | 
			
		||||
        await firstCriterionInput.fill("0");
 | 
			
		||||
 | 
			
		||||
        const secondCriterionInput = await page.locator('[aria-label="Criterion Input"] >> nth=1');
 | 
			
		||||
        await secondCriterionInput.fill("0");
 | 
			
		||||
 | 
			
		||||
        const saveButtonLocator = page.locator('button[title="Save"]');
 | 
			
		||||
        await saveButtonLocator.click();
 | 
			
		||||
        await page.getByRole('listitem', { name: 'Save and Finish Editing' }).click();
 | 
			
		||||
 | 
			
		||||
        const outputValue = await page.locator('[aria-label="Current Output Value"]');
 | 
			
		||||
        await expect(outputValue).toHaveText('---');
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -29,8 +29,8 @@ const { waitForAnimations } = require('../../../../baseFixtures');
 | 
			
		||||
const { test, expect } = require('../../../../pluginFixtures');
 | 
			
		||||
const { createDomainObjectWithDefaults } = require('../../../../appActions');
 | 
			
		||||
const backgroundImageSelector = '.c-imagery__main-image__background-image';
 | 
			
		||||
const panHotkey = process.platform === 'linux' ? ['Shift', 'Alt'] : ['Alt'];
 | 
			
		||||
const expectedAltText = process.platform === 'linux' ? 'Shift+Alt drag to pan' : 'Alt drag to pan';
 | 
			
		||||
const panHotkey = process.platform === 'linux' ? ['Control', 'Alt'] : ['Alt'];
 | 
			
		||||
const expectedAltText = process.platform === 'linux' ? 'Ctrl+Alt drag to pan' : 'Alt drag to pan';
 | 
			
		||||
const thumbnailUrlParamsRegexp = /\?w=100&h=100/;
 | 
			
		||||
 | 
			
		||||
//The following block of tests verifies the basic functionality of example imagery and serves as a template for Imagery objects embedded in other objects.
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -21,120 +21,7 @@
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
 | 
			
		||||
const { test, expect } = require('../../../../pluginFixtures');
 | 
			
		||||
const { createDomainObjectWithDefaults, setStartOffset, setFixedTimeMode, setRealTimeMode, selectInspectorTab } = require('../../../../appActions');
 | 
			
		||||
 | 
			
		||||
test.describe('Testing LAD table configuration', () => {
 | 
			
		||||
    test.beforeEach(async ({ page }) => {
 | 
			
		||||
        await page.goto('./', { waitUntil: 'networkidle' });
 | 
			
		||||
 | 
			
		||||
        // Create LAD table
 | 
			
		||||
        const ladTable = await createDomainObjectWithDefaults(page, {
 | 
			
		||||
            type: 'LAD Table',
 | 
			
		||||
            name: "Test LAD Table"
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        // Create Sine Wave Generator
 | 
			
		||||
        await createDomainObjectWithDefaults(page, {
 | 
			
		||||
            type: 'Sine Wave Generator',
 | 
			
		||||
            name: "Test Sine Wave Generator",
 | 
			
		||||
            parent: ladTable.uuid
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        await page.goto(ladTable.url);
 | 
			
		||||
    });
 | 
			
		||||
    test('in edit mode, LAD Tables provide ability to hide columns', async ({ page }) => {
 | 
			
		||||
        // Edit LAD table
 | 
			
		||||
        await page.locator('[title="Edit"]').click();
 | 
			
		||||
 | 
			
		||||
        // // Expand the 'My Items' folder in the left tree
 | 
			
		||||
        // await page.locator('.c-tree__item__view-control.c-disclosure-triangle').click();
 | 
			
		||||
        // // Add the Sine Wave Generator to the LAD table and save changes
 | 
			
		||||
        // await page.dragAndDrop('role=treeitem[name=/Test Sine Wave Generator/]', '.c-lad-table-wrapper');
 | 
			
		||||
        // select configuration tab in inspector
 | 
			
		||||
        await selectInspectorTab(page, 'LAD Table Configuration');
 | 
			
		||||
 | 
			
		||||
        // make sure headers are visible initially
 | 
			
		||||
        await expect(page.getByRole('cell', { name: 'Timestamp' })).toBeVisible();
 | 
			
		||||
        await expect(page.getByRole('cell', { name: 'Units' })).toBeVisible();
 | 
			
		||||
        await expect(page.getByRole('cell', { name: 'Type' })).toBeVisible();
 | 
			
		||||
 | 
			
		||||
        // hide timestamp column
 | 
			
		||||
        await page.getByLabel('Timestamp').uncheck();
 | 
			
		||||
        await expect(page.getByRole('cell', { name: 'Timestamp' })).toBeHidden();
 | 
			
		||||
        await expect(page.getByRole('cell', { name: 'Units' })).toBeVisible();
 | 
			
		||||
        await expect(page.getByRole('cell', { name: 'Type' })).toBeVisible();
 | 
			
		||||
 | 
			
		||||
        // hide units & type column
 | 
			
		||||
        await page.getByLabel('Units').uncheck();
 | 
			
		||||
        await page.getByLabel('Type').uncheck();
 | 
			
		||||
        await expect(page.getByRole('cell', { name: 'Timestamp' })).toBeHidden();
 | 
			
		||||
        await expect(page.getByRole('cell', { name: 'Units' })).toBeHidden();
 | 
			
		||||
        await expect(page.getByRole('cell', { name: 'Type' })).toBeHidden();
 | 
			
		||||
 | 
			
		||||
        // save and reload and verify they columns are still hidden
 | 
			
		||||
        await page.locator('button[title="Save"]').click();
 | 
			
		||||
        await page.locator('text=Save and Finish Editing').click();
 | 
			
		||||
        await page.reload();
 | 
			
		||||
        await expect(page.getByRole('cell', { name: 'Timestamp' })).toBeHidden();
 | 
			
		||||
        await expect(page.getByRole('cell', { name: 'Units' })).toBeHidden();
 | 
			
		||||
        await expect(page.getByRole('cell', { name: 'Type' })).toBeHidden();
 | 
			
		||||
 | 
			
		||||
        // Edit LAD table
 | 
			
		||||
        await page.locator('[title="Edit"]').click();
 | 
			
		||||
        await selectInspectorTab(page, 'LAD Table Configuration');
 | 
			
		||||
 | 
			
		||||
        // show timestamp column
 | 
			
		||||
        await page.getByLabel('Timestamp').check();
 | 
			
		||||
        await expect(page.getByRole('cell', { name: 'Units' })).toBeHidden();
 | 
			
		||||
        await expect(page.getByRole('cell', { name: 'Type' })).toBeHidden();
 | 
			
		||||
        await expect(page.getByRole('cell', { name: 'Timestamp' })).toBeVisible();
 | 
			
		||||
 | 
			
		||||
        // save and reload and make sure only timestamp is still visible
 | 
			
		||||
        await page.locator('button[title="Save"]').click();
 | 
			
		||||
        await page.locator('text=Save and Finish Editing').click();
 | 
			
		||||
        await page.reload();
 | 
			
		||||
        await expect(page.getByRole('cell', { name: 'Units' })).toBeHidden();
 | 
			
		||||
        await expect(page.getByRole('cell', { name: 'Type' })).toBeHidden();
 | 
			
		||||
        await expect(page.getByRole('cell', { name: 'Timestamp' })).toBeVisible();
 | 
			
		||||
 | 
			
		||||
        // Edit LAD table
 | 
			
		||||
        await page.locator('[title="Edit"]').click();
 | 
			
		||||
        await selectInspectorTab(page, 'LAD Table Configuration');
 | 
			
		||||
 | 
			
		||||
        // show units and type columns
 | 
			
		||||
        await page.getByLabel('Units').check();
 | 
			
		||||
        await page.getByLabel('Type').check();
 | 
			
		||||
        await expect(page.getByRole('cell', { name: 'Timestamp' })).toBeVisible();
 | 
			
		||||
        await expect(page.getByRole('cell', { name: 'Units' })).toBeVisible();
 | 
			
		||||
        await expect(page.getByRole('cell', { name: 'Type' })).toBeVisible();
 | 
			
		||||
 | 
			
		||||
        // save and reload and make sure all columns are still visible
 | 
			
		||||
        await page.locator('button[title="Save"]').click();
 | 
			
		||||
        await page.locator('text=Save and Finish Editing').click();
 | 
			
		||||
        await page.reload();
 | 
			
		||||
        await expect(page.getByRole('cell', { name: 'Timestamp' })).toBeVisible();
 | 
			
		||||
        await expect(page.getByRole('cell', { name: 'Units' })).toBeVisible();
 | 
			
		||||
        await expect(page.getByRole('cell', { name: 'Type' })).toBeVisible();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('LAD Tables don\'t allow selection of rows but does show context click menus', async ({ page }) => {
 | 
			
		||||
        const cell = await page.locator('.js-first-data');
 | 
			
		||||
        const userSelectable = await cell.evaluate((el) => {
 | 
			
		||||
            return window.getComputedStyle(el).getPropertyValue('user-select');
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        expect(userSelectable).toBe('none');
 | 
			
		||||
        // Right-click on the LAD table row
 | 
			
		||||
        await cell.click({
 | 
			
		||||
            button: 'right'
 | 
			
		||||
        });
 | 
			
		||||
        const menuOptions = page.locator('.c-menu ul');
 | 
			
		||||
        await expect.soft(menuOptions).toContainText('View Full Datum');
 | 
			
		||||
        await expect.soft(menuOptions).toContainText('View Historical Data');
 | 
			
		||||
        await expect.soft(menuOptions).toContainText('Remove');
 | 
			
		||||
        // await page.locator('li[title="Remove this object from its containing object."]').click();
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
const { createDomainObjectWithDefaults, setStartOffset, setFixedTimeMode, setRealTimeMode } = require('../../../../appActions');
 | 
			
		||||
 | 
			
		||||
test.describe('Testing LAD table @unstable', () => {
 | 
			
		||||
    let sineWaveObject;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -25,8 +25,7 @@ This test suite is dedicated to tests which verify form functionality.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
const { test, expect } = require('../../../../pluginFixtures');
 | 
			
		||||
const { createDomainObjectWithDefaults, selectInspectorTab } = require('../../../../appActions');
 | 
			
		||||
const nbUtils = require('../../../../helper/notebookUtils');
 | 
			
		||||
const { createDomainObjectWithDefaults } = require('../../../../appActions');
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * Creates a notebook object and adds an entry.
 | 
			
		||||
@@ -40,7 +39,12 @@ async function createNotebookAndEntry(page, iterations = 1) {
 | 
			
		||||
    const notebook = createDomainObjectWithDefaults(page, { type: 'Notebook' });
 | 
			
		||||
 | 
			
		||||
    for (let iteration = 0; iteration < iterations; iteration++) {
 | 
			
		||||
        await nbUtils.enterTextEntry(page, `Entry ${iteration}`);
 | 
			
		||||
        // Create an entry
 | 
			
		||||
        await page.locator('text=To start a new entry, click here or drag and drop any object').click();
 | 
			
		||||
        const entryLocator = `[aria-label="Notebook Entry Input"] >> nth = ${iteration}`;
 | 
			
		||||
        await page.locator(entryLocator).click();
 | 
			
		||||
        await page.locator(entryLocator).fill(`Entry ${iteration}`);
 | 
			
		||||
        await page.locator(entryLocator).press('Enter');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return notebook;
 | 
			
		||||
@@ -53,7 +57,7 @@ async function createNotebookAndEntry(page, iterations = 1) {
 | 
			
		||||
  */
 | 
			
		||||
async function createNotebookEntryAndTags(page, iterations = 1) {
 | 
			
		||||
    const notebook = await createNotebookAndEntry(page, iterations);
 | 
			
		||||
    await selectInspectorTab(page, 'Annotations');
 | 
			
		||||
    await page.locator('text=Annotations').click();
 | 
			
		||||
 | 
			
		||||
    for (let iteration = 0; iteration < iterations; iteration++) {
 | 
			
		||||
        // Hover and click "Add Tag" button
 | 
			
		||||
@@ -84,10 +88,7 @@ test.describe('Tagging in Notebooks @addInit', () => {
 | 
			
		||||
    test('Can load tags', async ({ page }) => {
 | 
			
		||||
        await createNotebookAndEntry(page);
 | 
			
		||||
 | 
			
		||||
        // TODO can be removed with fix for https://github.com/nasa/openmct/issues/6411
 | 
			
		||||
        await page.locator('[aria-label="Notebook Entry"].is-selected div.c-ne__text').click();
 | 
			
		||||
 | 
			
		||||
        await selectInspectorTab(page, 'Annotations');
 | 
			
		||||
        await page.locator('text=Annotations').click();
 | 
			
		||||
 | 
			
		||||
        await page.locator('button:has-text("Add Tag")').click();
 | 
			
		||||
 | 
			
		||||
@@ -110,30 +111,6 @@ test.describe('Tagging in Notebooks @addInit', () => {
 | 
			
		||||
        await expect(page.locator('[aria-label="Autocomplete Options"]')).not.toContainText("Driving");
 | 
			
		||||
        await expect(page.locator('[aria-label="Autocomplete Options"]')).toContainText("Drilling");
 | 
			
		||||
    });
 | 
			
		||||
    test('Can cancel adding tags', async ({ page }) => {
 | 
			
		||||
        await createNotebookAndEntry(page);
 | 
			
		||||
 | 
			
		||||
        // TODO can be removed with fix for https://github.com/nasa/openmct/issues/6411
 | 
			
		||||
        await page.locator('[aria-label="Notebook Entry"].is-selected div.c-ne__text').click();
 | 
			
		||||
 | 
			
		||||
        await selectInspectorTab(page, 'Annotations');
 | 
			
		||||
 | 
			
		||||
        // Test canceling adding a tag after we click "Type to select tag"
 | 
			
		||||
        await page.locator('button:has-text("Add Tag")').click();
 | 
			
		||||
 | 
			
		||||
        await page.locator('[placeholder="Type to select tag"]').click();
 | 
			
		||||
 | 
			
		||||
        await page.locator('[aria-label="OpenMCT Search"] input[type="search"]').click();
 | 
			
		||||
 | 
			
		||||
        await expect(page.locator('button:has-text("Add Tag")')).toBeVisible();
 | 
			
		||||
 | 
			
		||||
        // Test canceling adding a tag after we just click "Add Tag"
 | 
			
		||||
        await page.locator('button:has-text("Add Tag")').click();
 | 
			
		||||
 | 
			
		||||
        await page.locator('[aria-label="OpenMCT Search"] input[type="search"]').click();
 | 
			
		||||
 | 
			
		||||
        await expect(page.locator('button:has-text("Add Tag")')).toBeVisible();
 | 
			
		||||
    });
 | 
			
		||||
    test('Can search for tags and preview works properly', async ({ page }) => {
 | 
			
		||||
        await createNotebookEntryAndTags(page);
 | 
			
		||||
        await page.locator('[aria-label="OpenMCT Search"] input[type="search"]').click();
 | 
			
		||||
@@ -270,10 +247,8 @@ test.describe('Tagging in Notebooks @addInit', () => {
 | 
			
		||||
    test('Can cancel adding a tag', async ({ page }) => {
 | 
			
		||||
        await createNotebookAndEntry(page);
 | 
			
		||||
 | 
			
		||||
        // TODO can be removed with fix for https://github.com/nasa/openmct/issues/6411
 | 
			
		||||
        await page.locator('[aria-label="Notebook Entry"].is-selected div.c-ne__text').click();
 | 
			
		||||
 | 
			
		||||
        await selectInspectorTab(page, 'Annotations');
 | 
			
		||||
        // Click on Annotations tab
 | 
			
		||||
        await page.locator('.c-inspector__tab', { hasText: "Annotations" }).click();
 | 
			
		||||
 | 
			
		||||
        // Click on the "Add Tag" button
 | 
			
		||||
        await page.locator('button:has-text("Add Tag")').click();
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -24,7 +24,6 @@
 | 
			
		||||
Testsuite for plot autoscale.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
const { selectInspectorTab } = require('../../../../appActions');
 | 
			
		||||
const { test, expect } = require('../../../../pluginFixtures');
 | 
			
		||||
test.use({
 | 
			
		||||
    viewport: {
 | 
			
		||||
@@ -51,7 +50,6 @@ test.describe('Autoscale', () => {
 | 
			
		||||
        // enter edit mode
 | 
			
		||||
        await page.click('button[title="Edit"]');
 | 
			
		||||
 | 
			
		||||
        await selectInspectorTab(page, 'Config');
 | 
			
		||||
        await turnOffAutoscale(page);
 | 
			
		||||
 | 
			
		||||
        await setUserDefinedMinAndMax(page, '-2', '2');
 | 
			
		||||
 
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 15 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 16 KiB  | 
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -26,8 +26,6 @@ necessarily be used for reference when writing new tests in this area.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
const { test, expect } = require('../../../../pluginFixtures');
 | 
			
		||||
const { selectInspectorTab } = require('../../../../appActions');
 | 
			
		||||
 | 
			
		||||
test.describe('Log plot tests', () => {
 | 
			
		||||
    test('Log Plot ticks are functionally correct in regular and log mode and after refresh', async ({ page, openmctConfig }) => {
 | 
			
		||||
        const { myItemsFolderName } = openmctConfig;
 | 
			
		||||
@@ -38,7 +36,6 @@ test.describe('Log plot tests', () => {
 | 
			
		||||
        await makeOverlayPlot(page, myItemsFolderName);
 | 
			
		||||
        await testRegularTicks(page);
 | 
			
		||||
        await enableEditMode(page);
 | 
			
		||||
        await selectInspectorTab(page, 'Config');
 | 
			
		||||
        await enableLogMode(page);
 | 
			
		||||
        await testLogTicks(page);
 | 
			
		||||
        await disableLogMode(page);
 | 
			
		||||
@@ -189,7 +186,6 @@ async function enableEditMode(page) {
 | 
			
		||||
 */
 | 
			
		||||
async function enableLogMode(page) {
 | 
			
		||||
    // turn on log mode
 | 
			
		||||
    await expect(page.getByRole('listitem').filter({ hasText: 'Log mode' }).getByRole('checkbox')).not.toBeChecked();
 | 
			
		||||
    await page.getByRole('listitem').filter({ hasText: 'Log mode' }).getByRole('checkbox').check();
 | 
			
		||||
    // await page.locator('text=Y Axis Label Log mode Auto scale Padding >> input[type="checkbox"]').first().check();
 | 
			
		||||
}
 | 
			
		||||
@@ -199,7 +195,6 @@ async function enableLogMode(page) {
 | 
			
		||||
 */
 | 
			
		||||
async function disableLogMode(page) {
 | 
			
		||||
    // turn off log mode
 | 
			
		||||
    await expect(page.getByRole('listitem').filter({ hasText: 'Log mode' }).getByRole('checkbox')).toBeChecked();
 | 
			
		||||
    await page.getByRole('listitem').filter({ hasText: 'Log mode' }).getByRole('checkbox').uncheck();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -26,7 +26,7 @@ necessarily be used for reference when writing new tests in this area.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
const { test, expect } = require('../../../../pluginFixtures');
 | 
			
		||||
const { createDomainObjectWithDefaults, selectInspectorTab } = require('../../../../appActions');
 | 
			
		||||
const { createDomainObjectWithDefaults } = require('../../../../appActions');
 | 
			
		||||
 | 
			
		||||
test.describe('Overlay Plot', () => {
 | 
			
		||||
    test.beforeEach(async ({ page }) => {
 | 
			
		||||
@@ -45,8 +45,6 @@ test.describe('Overlay Plot', () => {
 | 
			
		||||
 | 
			
		||||
        await page.goto(overlayPlot.url);
 | 
			
		||||
 | 
			
		||||
        await selectInspectorTab(page, 'Config');
 | 
			
		||||
 | 
			
		||||
        // navigate to plot series color palette
 | 
			
		||||
        await page.click('.l-browse-bar__actions__edit');
 | 
			
		||||
        await page.locator('li.c-tree__item.menus-to-left .c-disclosure-triangle').click();
 | 
			
		||||
@@ -62,69 +60,6 @@ test.describe('Overlay Plot', () => {
 | 
			
		||||
        expect(color).toBe('rgb(255, 166, 61)');
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('Limit lines persist when series is moved to another Y Axis and on refresh', async ({ page }) => {
 | 
			
		||||
        test.info().annotations.push({
 | 
			
		||||
            type: 'issue',
 | 
			
		||||
            description: 'https://github.com/nasa/openmct/issues/6338'
 | 
			
		||||
        });
 | 
			
		||||
        // Create an Overlay Plot with a default SWG
 | 
			
		||||
        const overlayPlot = await createDomainObjectWithDefaults(page, {
 | 
			
		||||
            type: "Overlay Plot"
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        const swgA = await createDomainObjectWithDefaults(page, {
 | 
			
		||||
            type: "Sine Wave Generator",
 | 
			
		||||
            parent: overlayPlot.uuid
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        await page.goto(overlayPlot.url);
 | 
			
		||||
 | 
			
		||||
        // Assert that no limit lines are shown by default
 | 
			
		||||
        await page.waitForSelector('.js-limit-area', { state: 'attached' });
 | 
			
		||||
        expect(await page.locator('.c-plot-limit-line').count()).toBe(0);
 | 
			
		||||
 | 
			
		||||
        // Enter edit mode
 | 
			
		||||
        await page.click('button[title="Edit"]');
 | 
			
		||||
 | 
			
		||||
        // Expand the "Sine Wave Generator" plot series options and enable limit lines
 | 
			
		||||
        await selectInspectorTab(page, 'Config');
 | 
			
		||||
        await page.getByRole('list', { name: 'Plot Series Properties' }).locator('span').first().click();
 | 
			
		||||
        await page.getByRole('list', { name: 'Plot Series Properties' }).locator('[title="Display limit lines"]~div input').check();
 | 
			
		||||
 | 
			
		||||
        await assertLimitLinesExistAndAreVisible(page);
 | 
			
		||||
 | 
			
		||||
        // Save (exit edit mode)
 | 
			
		||||
        await page.locator('button[title="Save"]').click();
 | 
			
		||||
        await page.locator('li[title="Save and Finish Editing"]').click();
 | 
			
		||||
 | 
			
		||||
        await assertLimitLinesExistAndAreVisible(page);
 | 
			
		||||
 | 
			
		||||
        await page.reload();
 | 
			
		||||
 | 
			
		||||
        await assertLimitLinesExistAndAreVisible(page);
 | 
			
		||||
 | 
			
		||||
        // Enter edit mode
 | 
			
		||||
        await page.click('button[title="Edit"]');
 | 
			
		||||
 | 
			
		||||
        await selectInspectorTab(page, 'Elements');
 | 
			
		||||
 | 
			
		||||
        // Drag Sine Wave Generator series from Y Axis 1 into Y Axis 2
 | 
			
		||||
        await page.locator(`#inspector-elements-tree >> text=${swgA.name}`).dragTo(page.locator('[aria-label="Element Item Group Y Axis 2"]'));
 | 
			
		||||
 | 
			
		||||
        await assertLimitLinesExistAndAreVisible(page);
 | 
			
		||||
 | 
			
		||||
        // Save (exit edit mode)
 | 
			
		||||
        await page.locator('button[title="Save"]').click();
 | 
			
		||||
        await page.locator('li[title="Save and Finish Editing"]').click();
 | 
			
		||||
 | 
			
		||||
        await assertLimitLinesExistAndAreVisible(page);
 | 
			
		||||
 | 
			
		||||
        await page.reload();
 | 
			
		||||
 | 
			
		||||
        await assertLimitLinesExistAndAreVisible(page);
 | 
			
		||||
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('The elements pool supports dragging series into multiple y-axis buckets', async ({ page }) => {
 | 
			
		||||
        const overlayPlot = await createDomainObjectWithDefaults(page, {
 | 
			
		||||
            type: "Overlay Plot"
 | 
			
		||||
@@ -154,7 +89,22 @@ test.describe('Overlay Plot', () => {
 | 
			
		||||
        await page.goto(overlayPlot.url);
 | 
			
		||||
        await page.click('button[title="Edit"]');
 | 
			
		||||
 | 
			
		||||
        await selectInspectorTab(page, 'Elements');
 | 
			
		||||
        // Expand the elements pool vertically
 | 
			
		||||
        await page.locator('.l-pane.l-pane--vertical-handle-before', {
 | 
			
		||||
            hasText: 'Elements'
 | 
			
		||||
        }).locator('.l-pane__handle').hover();
 | 
			
		||||
        await page.mouse.down();
 | 
			
		||||
        await page.mouse.move(0, 100);
 | 
			
		||||
        await page.mouse.up();
 | 
			
		||||
 | 
			
		||||
        const yAxis1PropertyGroup = page.locator('[aria-label="Y Axis Properties"]');
 | 
			
		||||
        const yAxis2PropertyGroup = page.locator('[aria-label="Y Axis 2 Properties"]');
 | 
			
		||||
        const yAxis3PropertyGroup = page.locator('[aria-label="Y Axis 3 Properties"]');
 | 
			
		||||
 | 
			
		||||
        // Assert that Y Axis 1 property group is visible only
 | 
			
		||||
        await expect(yAxis1PropertyGroup).toBeVisible();
 | 
			
		||||
        await expect(yAxis2PropertyGroup).toBeHidden();
 | 
			
		||||
        await expect(yAxis3PropertyGroup).toBeHidden();
 | 
			
		||||
 | 
			
		||||
        // Drag swg a, c, e into Y Axis 2
 | 
			
		||||
        await page.locator(`#inspector-elements-tree >> text=${swgA.name}`).dragTo(page.locator('[aria-label="Element Item Group Y Axis 2"]'));
 | 
			
		||||
@@ -162,12 +112,6 @@ test.describe('Overlay Plot', () => {
 | 
			
		||||
        await page.locator(`#inspector-elements-tree >> text=${swgE.name}`).dragTo(page.locator('[aria-label="Element Item Group Y Axis 2"]'));
 | 
			
		||||
 | 
			
		||||
        // Assert that Y Axis 1 and Y Axis 2 property groups are visible only
 | 
			
		||||
        await selectInspectorTab(page, 'Config');
 | 
			
		||||
 | 
			
		||||
        const yAxis1PropertyGroup = page.locator('[aria-label="Y Axis Properties"]');
 | 
			
		||||
        const yAxis2PropertyGroup = page.locator('[aria-label="Y Axis 2 Properties"]');
 | 
			
		||||
        const yAxis3PropertyGroup = page.locator('[aria-label="Y Axis 3 Properties"]');
 | 
			
		||||
 | 
			
		||||
        await expect(yAxis1PropertyGroup).toBeVisible();
 | 
			
		||||
        await expect(yAxis2PropertyGroup).toBeVisible();
 | 
			
		||||
        await expect(yAxis3PropertyGroup).toBeHidden();
 | 
			
		||||
@@ -176,21 +120,15 @@ test.describe('Overlay Plot', () => {
 | 
			
		||||
        const yAxis2Group = page.getByLabel("Y Axis 2");
 | 
			
		||||
        const yAxis3Group = page.getByLabel("Y Axis 3");
 | 
			
		||||
 | 
			
		||||
        await selectInspectorTab(page, 'Elements');
 | 
			
		||||
 | 
			
		||||
        // Drag swg b into Y Axis 3
 | 
			
		||||
        await page.locator(`#inspector-elements-tree >> text=${swgB.name}`).dragTo(page.locator('[aria-label="Element Item Group Y Axis 3"]'));
 | 
			
		||||
 | 
			
		||||
        // Assert that all Y Axis property groups are visible
 | 
			
		||||
        await selectInspectorTab(page, 'Config');
 | 
			
		||||
 | 
			
		||||
        await expect(yAxis1PropertyGroup).toBeVisible();
 | 
			
		||||
        await expect(yAxis2PropertyGroup).toBeVisible();
 | 
			
		||||
        await expect(yAxis3PropertyGroup).toBeVisible();
 | 
			
		||||
 | 
			
		||||
        // Verify that the elements are in the correct buckets and in the correct order
 | 
			
		||||
        await selectInspectorTab(page, 'Elements');
 | 
			
		||||
 | 
			
		||||
        expect(yAxis1Group.getByRole('listitem', { name: swgD.name })).toBeTruthy();
 | 
			
		||||
        expect(yAxis1Group.getByRole('listitem').nth(0).getByText(swgD.name)).toBeTruthy();
 | 
			
		||||
        expect(yAxis2Group.getByRole('listitem', { name: swgE.name })).toBeTruthy();
 | 
			
		||||
@@ -216,10 +154,8 @@ test.describe('Overlay Plot', () => {
 | 
			
		||||
        await page.goto(overlayPlot.url);
 | 
			
		||||
        await page.click('button[title="Edit"]');
 | 
			
		||||
 | 
			
		||||
        await selectInspectorTab(page, 'Elements');
 | 
			
		||||
 | 
			
		||||
        await page.locator(`#inspector-elements-tree >> text=${swgA.name}`).click();
 | 
			
		||||
 | 
			
		||||
        await page.locator('.js-overlay canvas').nth(1);
 | 
			
		||||
        const plotPixelSize = await getCanvasPixelsWithData(page);
 | 
			
		||||
        expect(plotPixelSize).toBeGreaterThan(0);
 | 
			
		||||
    });
 | 
			
		||||
@@ -262,20 +198,3 @@ async function getCanvasPixelsWithData(page) {
 | 
			
		||||
 | 
			
		||||
    return getTelemValuePromise;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *
 | 
			
		||||
 * @param {import('@playwright/test').Page} page
 | 
			
		||||
 */
 | 
			
		||||
async function assertLimitLinesExistAndAreVisible(page) {
 | 
			
		||||
    // Wait for plot series data to load
 | 
			
		||||
    await expect(page.locator('.js-series-data-loaded')).toBeVisible();
 | 
			
		||||
    // Wait for limit lines to be created
 | 
			
		||||
    await page.waitForSelector('.js-limit-area', { state: 'attached' });
 | 
			
		||||
    const limitLineCount = await page.locator('.c-plot-limit-line').count();
 | 
			
		||||
    // There should be 10 limit lines created by default
 | 
			
		||||
    expect(await page.locator('.c-plot-limit-line').count()).toBe(10);
 | 
			
		||||
    for (let i = 0; i < limitLineCount; i++) {
 | 
			
		||||
        await expect(page.locator('.c-plot-limit-line').nth(i)).toBeVisible();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -25,7 +25,6 @@ Tests to verify log plot functionality. Note this test suite if very much under
 | 
			
		||||
necessarily be used for reference when writing new tests in this area.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
const { selectInspectorTab } = require('../../../../appActions');
 | 
			
		||||
const { test, expect } = require('../../../../pluginFixtures');
 | 
			
		||||
 | 
			
		||||
test.describe('Legend color in sync with plot color', () => {
 | 
			
		||||
@@ -34,8 +33,6 @@ test.describe('Legend color in sync with plot color', () => {
 | 
			
		||||
 | 
			
		||||
        // navigate to plot series color palette
 | 
			
		||||
        await page.click('.l-browse-bar__actions__edit');
 | 
			
		||||
        await selectInspectorTab(page, 'Config');
 | 
			
		||||
 | 
			
		||||
        await page.locator('li.c-tree__item.menus-to-left .c-disclosure-triangle').click();
 | 
			
		||||
        await page.locator('.c-click-swatch--menu').click();
 | 
			
		||||
        await page.locator('.c-palette__item[style="background: rgb(255, 166, 61);"]').click();
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -25,7 +25,7 @@
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
const { test, expect } = require('../../../../pluginFixtures');
 | 
			
		||||
const { createDomainObjectWithDefaults, selectInspectorTab } = require('../../../../appActions');
 | 
			
		||||
const { createDomainObjectWithDefaults } = require('../../../../appActions');
 | 
			
		||||
const uuid = require('uuid').v4;
 | 
			
		||||
 | 
			
		||||
test.describe('Scatter Plot', () => {
 | 
			
		||||
@@ -40,8 +40,8 @@ test.describe('Scatter Plot', () => {
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('Can add and remove telemetry sources', async ({ page }) => {
 | 
			
		||||
        const editButton = page.locator('button[title="Edit"]');
 | 
			
		||||
        const saveButton = page.locator('button[title="Save"]');
 | 
			
		||||
        const editButtonLocator = page.locator('button[title="Edit"]');
 | 
			
		||||
        const saveButtonLocator = page.locator('button[title="Save"]');
 | 
			
		||||
 | 
			
		||||
        // Create a sine wave generator within the scatter plot
 | 
			
		||||
        const swg1 = await createDomainObjectWithDefaults(page, {
 | 
			
		||||
@@ -53,10 +53,9 @@ test.describe('Scatter Plot', () => {
 | 
			
		||||
        // Navigate to the scatter plot and verify that
 | 
			
		||||
        // the SWG appears in the elements pool
 | 
			
		||||
        await page.goto(scatterPlot.url);
 | 
			
		||||
        await editButton.click();
 | 
			
		||||
        await selectInspectorTab(page, 'Elements');
 | 
			
		||||
        await editButtonLocator.click();
 | 
			
		||||
        await expect.soft(page.locator(`#inspector-elements-tree >> text=${swg1.name}`)).toBeVisible();
 | 
			
		||||
        await saveButton.click();
 | 
			
		||||
        await saveButtonLocator.click();
 | 
			
		||||
        await page.locator('li[title="Save and Finish Editing"]').click();
 | 
			
		||||
 | 
			
		||||
        // Create another sine wave generator within the scatter plot
 | 
			
		||||
@@ -73,13 +72,10 @@ test.describe('Scatter Plot', () => {
 | 
			
		||||
        // Navigate to the scatter plot and verify that the new SWG
 | 
			
		||||
        // appears in the elements pool and the old one is gone
 | 
			
		||||
        await page.goto(scatterPlot.url);
 | 
			
		||||
        await editButton.click();
 | 
			
		||||
 | 
			
		||||
        // Click the "Elements" tab
 | 
			
		||||
        await selectInspectorTab(page, 'Elements');
 | 
			
		||||
        await editButtonLocator.click();
 | 
			
		||||
        await expect.soft(page.locator(`#inspector-elements-tree >> text=${swg1.name}`)).toBeHidden();
 | 
			
		||||
        await expect.soft(page.locator(`#inspector-elements-tree >> text=${swg2.name}`)).toBeVisible();
 | 
			
		||||
        await saveButton.click();
 | 
			
		||||
        await saveButtonLocator.click();
 | 
			
		||||
 | 
			
		||||
        // Right click on the new SWG in the elements pool and delete it
 | 
			
		||||
        await page.locator(`#inspector-elements-tree >> text=${swg2.name}`).click({
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -26,7 +26,7 @@ necessarily be used for reference when writing new tests in this area.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
const { test, expect } = require('../../../../pluginFixtures');
 | 
			
		||||
const { createDomainObjectWithDefaults, selectInspectorTab } = require('../../../../appActions');
 | 
			
		||||
const { createDomainObjectWithDefaults } = require('../../../../appActions');
 | 
			
		||||
 | 
			
		||||
test.describe('Stacked Plot', () => {
 | 
			
		||||
    let stackedPlot;
 | 
			
		||||
@@ -65,7 +65,11 @@ test.describe('Stacked Plot', () => {
 | 
			
		||||
 | 
			
		||||
        await page.click('button[title="Edit"]');
 | 
			
		||||
 | 
			
		||||
        await selectInspectorTab(page, 'Elements');
 | 
			
		||||
        // Expand the elements pool vertically
 | 
			
		||||
        await page.locator('.l-pane__handle').nth(2).hover({ trial: true });
 | 
			
		||||
        await page.mouse.down();
 | 
			
		||||
        await page.mouse.move(0, 100);
 | 
			
		||||
        await page.mouse.up();
 | 
			
		||||
 | 
			
		||||
        await swgBElementsPoolItem.click({ button: 'right' });
 | 
			
		||||
        await page.getByRole('menuitem').filter({ hasText: /Remove/ }).click();
 | 
			
		||||
@@ -88,7 +92,11 @@ test.describe('Stacked Plot', () => {
 | 
			
		||||
 | 
			
		||||
        await page.click('button[title="Edit"]');
 | 
			
		||||
 | 
			
		||||
        await selectInspectorTab(page, 'Elements');
 | 
			
		||||
        // Expand the elements pool vertically
 | 
			
		||||
        await page.locator('.l-pane__handle').nth(2).hover({ trial: true });
 | 
			
		||||
        await page.mouse.down();
 | 
			
		||||
        await page.mouse.move(0, 100);
 | 
			
		||||
        await page.mouse.up();
 | 
			
		||||
 | 
			
		||||
        const stackedPlotItem1 = page.locator('.c-plot--stacked-container').nth(0);
 | 
			
		||||
        const stackedPlotItem2 = page.locator('.c-plot--stacked-container').nth(1);
 | 
			
		||||
@@ -115,9 +123,6 @@ test.describe('Stacked Plot', () => {
 | 
			
		||||
        await expect(stackedPlotItem2).toHaveAttribute('aria-label', `Stacked Plot Item ${swgC.name}`);
 | 
			
		||||
        await expect(stackedPlotItem3).toHaveAttribute('aria-label', `Stacked Plot Item ${swgA.name}`);
 | 
			
		||||
 | 
			
		||||
        // collapse inspector
 | 
			
		||||
        await page.locator('.l-shell__pane-inspector .l-pane__collapse-button').click();
 | 
			
		||||
 | 
			
		||||
        // Save (exit edit mode)
 | 
			
		||||
        await page.locator('button[title="Save"]').click();
 | 
			
		||||
        await page.locator('li[title="Save and Finish Editing"]').click();
 | 
			
		||||
@@ -131,8 +136,6 @@ test.describe('Stacked Plot', () => {
 | 
			
		||||
    test('Selecting a child plot while in browse and edit modes shows its properties in the inspector', async ({ page }) => {
 | 
			
		||||
        await page.goto(stackedPlot.url);
 | 
			
		||||
 | 
			
		||||
        await selectInspectorTab(page, 'Config');
 | 
			
		||||
 | 
			
		||||
        // Click on the 1st plot
 | 
			
		||||
        await page.locator(`[aria-label="Stacked Plot Item ${swgA.name}"] canvas`).nth(1).click();
 | 
			
		||||
 | 
			
		||||
@@ -160,8 +163,6 @@ test.describe('Stacked Plot', () => {
 | 
			
		||||
        // Go into edit mode
 | 
			
		||||
        await page.click('button[title="Edit"]');
 | 
			
		||||
 | 
			
		||||
        await selectInspectorTab(page, 'Config');
 | 
			
		||||
 | 
			
		||||
        // Click on canvas for the 1st plot
 | 
			
		||||
        await page.locator(`[aria-label="Stacked Plot Item ${swgA.name}"]`).click();
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -28,14 +28,6 @@ const { test, expect } = require('../../../../pluginFixtures');
 | 
			
		||||
const { createDomainObjectWithDefaults, setRealTimeMode, setFixedTimeMode } = require('../../../../appActions');
 | 
			
		||||
 | 
			
		||||
test.describe('Plot Tagging', () => {
 | 
			
		||||
    /**
 | 
			
		||||
     * Given a canvas and a set of points, tags the points on the canvas.
 | 
			
		||||
     * @param {import('@playwright/test').Page} page
 | 
			
		||||
     * @param {HTMLCanvasElement} canvas a telemetry item with a plot
 | 
			
		||||
     * @param {Number} xEnd a telemetry item with a plot
 | 
			
		||||
     * @param {Number} yEnd a telemetry item with a plot
 | 
			
		||||
     * @returns {Promise}
 | 
			
		||||
     */
 | 
			
		||||
    async function createTags({page, canvas, xEnd, yEnd}) {
 | 
			
		||||
        await canvas.hover({trial: true});
 | 
			
		||||
 | 
			
		||||
@@ -72,20 +64,12 @@ test.describe('Plot Tagging', () => {
 | 
			
		||||
        await page.getByText('Science').click();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Given a telemetry item (e.g., a Sine Wave Generator) with a plot, tests that the plot can be tagged.
 | 
			
		||||
     * @param {import('@playwright/test').Page} page
 | 
			
		||||
     * @param {import('../../../../appActions').CreatedObjectInfo} telemetryItem a telemetry item with a plot
 | 
			
		||||
     * @returns {Promise}
 | 
			
		||||
     */
 | 
			
		||||
    async function testTelemetryItem(page, telemetryItem) {
 | 
			
		||||
    async function testTelemetryItem(page, canvas, telemetryItem) {
 | 
			
		||||
        // Check that telemetry item also received the tag
 | 
			
		||||
        await page.goto(telemetryItem.url);
 | 
			
		||||
 | 
			
		||||
        await expect(page.getByText('No tags to display for this item')).toBeVisible();
 | 
			
		||||
 | 
			
		||||
        const canvas = page.locator('canvas').nth(1);
 | 
			
		||||
 | 
			
		||||
        //Wait for canvas to stablize.
 | 
			
		||||
        await canvas.hover({trial: true});
 | 
			
		||||
 | 
			
		||||
@@ -101,32 +85,20 @@ test.describe('Plot Tagging', () => {
 | 
			
		||||
        await expect(page.getByText('Driving')).toBeHidden();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Given a page, tests that tags are searchable, deletable, and persist across reloads.
 | 
			
		||||
     * @param {import('@playwright/test').Page} page
 | 
			
		||||
     * @returns {Promise}
 | 
			
		||||
     */
 | 
			
		||||
    async function basicTagsTests(page) {
 | 
			
		||||
        // Search for Driving
 | 
			
		||||
        await page.locator('[aria-label="OpenMCT Search"] input[type="search"]').click();
 | 
			
		||||
 | 
			
		||||
        // Clicking elsewhere should cause annotation selection to be cleared
 | 
			
		||||
        await expect(page.getByText('No tags to display for this item')).toBeVisible();
 | 
			
		||||
 | 
			
		||||
        await page.locator('[aria-label="OpenMCT Search"] input[type="search"]').fill('driv');
 | 
			
		||||
        // click on the search result
 | 
			
		||||
        await page.getByRole('searchbox', { name: 'OpenMCT Search' }).getByText(/Sine Wave/).first().click();
 | 
			
		||||
 | 
			
		||||
        // Delete Driving
 | 
			
		||||
        await page.hover('[aria-label="Tag"]:has-text("Driving")');
 | 
			
		||||
        await page.locator('[aria-label="Remove tag Driving"]').click();
 | 
			
		||||
 | 
			
		||||
    async function basicTagsTests(page, canvas) {
 | 
			
		||||
        // Search for Science
 | 
			
		||||
        await page.locator('[aria-label="OpenMCT Search"] input[type="search"]').click();
 | 
			
		||||
        await page.locator('[aria-label="OpenMCT Search"] input[type="search"]').fill('sc');
 | 
			
		||||
        await expect(page.locator('[aria-label="Search Result"]').nth(0)).toContainText("Science");
 | 
			
		||||
        await expect(page.locator('[aria-label="Search Result"]').nth(0)).not.toContainText("Drilling");
 | 
			
		||||
 | 
			
		||||
        // Delete Driving
 | 
			
		||||
        await page.hover('[aria-label="Tag"]:has-text("Driving")');
 | 
			
		||||
        await page.locator('[aria-label="Remove tag Driving"]').click();
 | 
			
		||||
 | 
			
		||||
        await expect(page.locator('[aria-label="Tags Inspector"]')).toContainText("Science");
 | 
			
		||||
        await expect(page.locator('[aria-label="Tags Inspector"]')).not.toContainText("Driving");
 | 
			
		||||
 | 
			
		||||
        // Search for Driving
 | 
			
		||||
        await page.locator('[aria-label="OpenMCT Search"] input[type="search"]').click();
 | 
			
		||||
        await page.locator('[aria-label="OpenMCT Search"] input[type="search"]').fill('driv');
 | 
			
		||||
@@ -137,13 +109,12 @@ test.describe('Plot Tagging', () => {
 | 
			
		||||
            page.reload(),
 | 
			
		||||
            page.waitForLoadState('networkidle')
 | 
			
		||||
        ]);
 | 
			
		||||
        // wait for plots to load
 | 
			
		||||
        await expect(page.locator('.js-series-data-loaded')).toBeVisible();
 | 
			
		||||
        // wait for plot progress bar to disappear
 | 
			
		||||
        await page.locator('.l-view-section.c-progress-bar').waitFor({ state: 'detached' });
 | 
			
		||||
 | 
			
		||||
        await page.getByText('Annotations').click();
 | 
			
		||||
        await expect(page.getByText('No tags to display for this item')).toBeVisible();
 | 
			
		||||
 | 
			
		||||
        const canvas = page.locator('canvas').nth(1);
 | 
			
		||||
        // click on the tagged plot point
 | 
			
		||||
        await canvas.click({
 | 
			
		||||
            position: {
 | 
			
		||||
@@ -200,23 +171,8 @@ test.describe('Plot Tagging', () => {
 | 
			
		||||
        // changing to fixed time mode rebuilds canvas?
 | 
			
		||||
        canvas = page.locator('canvas').nth(1);
 | 
			
		||||
 | 
			
		||||
        await basicTagsTests(page);
 | 
			
		||||
        await testTelemetryItem(page, alphaSineWave);
 | 
			
		||||
 | 
			
		||||
        // set to real time mode
 | 
			
		||||
        await setRealTimeMode(page);
 | 
			
		||||
 | 
			
		||||
        // Search for Science
 | 
			
		||||
        await page.locator('[aria-label="OpenMCT Search"] input[type="search"]').click();
 | 
			
		||||
        await page.locator('[aria-label="OpenMCT Search"] input[type="search"]').fill('sc');
 | 
			
		||||
        // click on the search result
 | 
			
		||||
        await page.getByRole('searchbox', { name: 'OpenMCT Search' }).getByText('Alpha Sine Wave').first().click();
 | 
			
		||||
        // wait for plots to load
 | 
			
		||||
        await expect(page.locator('.js-series-data-loaded')).toBeVisible();
 | 
			
		||||
        // expect plot to be paused
 | 
			
		||||
        await expect(page.locator('[title="Resume displaying real-time data"]')).toBeVisible();
 | 
			
		||||
 | 
			
		||||
        await setFixedTimeMode(page);
 | 
			
		||||
        await basicTagsTests(page, canvas);
 | 
			
		||||
        await testTelemetryItem(page, canvas, alphaSineWave);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('Tags work with Plot View of telemetry items', async ({ page }) => {
 | 
			
		||||
@@ -231,7 +187,7 @@ test.describe('Plot Tagging', () => {
 | 
			
		||||
            xEnd: 700,
 | 
			
		||||
            yEnd: 480
 | 
			
		||||
        });
 | 
			
		||||
        await basicTagsTests(page);
 | 
			
		||||
        await basicTagsTests(page, canvas);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('Tags work with Stacked Plots', async ({ page }) => {
 | 
			
		||||
@@ -261,7 +217,7 @@ test.describe('Plot Tagging', () => {
 | 
			
		||||
            xEnd: 700,
 | 
			
		||||
            yEnd: 215
 | 
			
		||||
        });
 | 
			
		||||
        await basicTagsTests(page);
 | 
			
		||||
        await testTelemetryItem(page, alphaSineWave);
 | 
			
		||||
        await basicTagsTests(page, canvas);
 | 
			
		||||
        await testTelemetryItem(page, canvas, alphaSineWave);
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -191,7 +191,7 @@ test.describe('Recent Objects', () => {
 | 
			
		||||
        expect(await clockBreadcrumbs.count()).toBe(2);
 | 
			
		||||
        expect(await clockBreadcrumbs.nth(0).innerText()).not.toEqual(await clockBreadcrumbs.nth(1).innerText());
 | 
			
		||||
    });
 | 
			
		||||
    test("Enforces a limit of 20 recent objects and clears the recent objects", async ({ page }) => {
 | 
			
		||||
    test("Enforces a limit of 20 recent objects", async ({ page }) => {
 | 
			
		||||
        // Creating 21 objects takes a while, so increase the timeout
 | 
			
		||||
        test.slow();
 | 
			
		||||
 | 
			
		||||
@@ -242,15 +242,6 @@ test.describe('Recent Objects', () => {
 | 
			
		||||
 | 
			
		||||
        // Assert that the Clock treeitem is no longer highlighted
 | 
			
		||||
        await expect(lastClockTreeItem.locator('.c-tree__item')).not.toHaveClass(/is-targeted-item/);
 | 
			
		||||
 | 
			
		||||
        // Click the aria-label="Clear Recently Viewed" button
 | 
			
		||||
        await page.getByRole('button', { name: 'Clear Recently Viewed' }).click();
 | 
			
		||||
 | 
			
		||||
        // Click on the "OK" button in the confirmation dialog
 | 
			
		||||
        await page.getByRole('button', { name: 'OK' }).click();
 | 
			
		||||
 | 
			
		||||
        // Assert that the list is empty
 | 
			
		||||
        expect(await recentObjectsList.locator('.c-recentobjects-listitem').count()).toBe(0);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    function assertInitialRecentObjectsListState() {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -24,7 +24,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
const { test, expect } = require('../../pluginFixtures');
 | 
			
		||||
const { createDomainObjectWithDefaults, selectInspectorTab } = require('../../appActions');
 | 
			
		||||
const { createDomainObjectWithDefaults } = require('../../appActions');
 | 
			
		||||
const { v4: uuid } = require('uuid');
 | 
			
		||||
 | 
			
		||||
test.describe('Grand Search', () => {
 | 
			
		||||
@@ -50,7 +50,7 @@ test.describe('Grand Search', () => {
 | 
			
		||||
        await expect(page.locator('[aria-label="Search Result"] >> nth=2')).toContainText(`Clock C ${myItemsFolderName} Red Folder Blue Folder`);
 | 
			
		||||
        await expect(page.locator('[aria-label="Search Result"] >> nth=3')).toContainText(`Clock D ${myItemsFolderName} Red Folder Blue Folder`);
 | 
			
		||||
        // Click the Elements pool to dismiss the search menu
 | 
			
		||||
        await selectInspectorTab(page, 'Elements');
 | 
			
		||||
        await page.locator('.l-pane__label:has-text("Elements")').click();
 | 
			
		||||
        await expect(page.locator('[aria-label="Search Result"] >> nth=0')).toBeHidden();
 | 
			
		||||
 | 
			
		||||
        await page.locator('[aria-label="OpenMCT Search"] [aria-label="Search Input"]').click();
 | 
			
		||||
@@ -63,7 +63,7 @@ test.describe('Grand Search', () => {
 | 
			
		||||
        await expect(page.locator('[aria-label="Search Result"] >> nth=0')).toContainText(`Clock A ${myItemsFolderName} Red Folder Blue Folder`);
 | 
			
		||||
 | 
			
		||||
        // Click [aria-label="OpenMCT Search"] a >> nth=0
 | 
			
		||||
        await page.locator('[aria-label="Search Result"] >> nth=0').click();
 | 
			
		||||
        await page.locator('[aria-label="OpenMCT Search"] a').first().click();
 | 
			
		||||
        await expect(page.locator('[aria-label="Search Result"] >> nth=0')).toBeHidden();
 | 
			
		||||
 | 
			
		||||
        // Fill [aria-label="OpenMCT Search"] input[type="search"]
 | 
			
		||||
@@ -133,7 +133,6 @@ test.describe('Grand Search', () => {
 | 
			
		||||
        const searchResults = page.locator(searchResultSelector);
 | 
			
		||||
 | 
			
		||||
        // Verify that one result is found
 | 
			
		||||
        await expect(searchResults).toBeVisible();
 | 
			
		||||
        expect(await searchResults.count()).toBe(1);
 | 
			
		||||
        await expect(searchResults).toHaveText(folderName);
 | 
			
		||||
    });
 | 
			
		||||
@@ -195,7 +194,7 @@ test.describe('Grand Search', () => {
 | 
			
		||||
        // Wait for search to finish
 | 
			
		||||
        await waitForSearchCompletion(page);
 | 
			
		||||
 | 
			
		||||
        const searchResultDropDown = page.locator(searchResultDropDownSelector);
 | 
			
		||||
        const searchResultDropDown = await page.locator(searchResultDropDownSelector);
 | 
			
		||||
 | 
			
		||||
        // Verify that the search result/s correctly match the search query
 | 
			
		||||
        await expect(searchResultDropDown).toContainText(folderName1);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -26,80 +26,10 @@ const {
 | 
			
		||||
    openObjectTreeContextMenu
 | 
			
		||||
} = require('../../appActions.js');
 | 
			
		||||
 | 
			
		||||
test.describe('Main Tree', () => {
 | 
			
		||||
    test.beforeEach(async ({ page }) => {
 | 
			
		||||
        await page.goto('./', { waitUntil: 'networkidle' });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('Creating a child object within a folder and immediately opening it shows the created object in the tree @couchdb', async ({ page }) => {
 | 
			
		||||
        test.info().annotations.push({
 | 
			
		||||
            type: 'issue',
 | 
			
		||||
            description: 'https://github.com/nasa/openmct/issues/5975'
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        const folder = await createDomainObjectWithDefaults(page, {
 | 
			
		||||
            type: 'Folder'
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        await page.getByTitle('Show selected item in tree').click();
 | 
			
		||||
 | 
			
		||||
        const clock = await createDomainObjectWithDefaults(page, {
 | 
			
		||||
            type: 'Clock',
 | 
			
		||||
            parent: folder.uuid
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        await expandTreePaneItemByName(page, folder.name);
 | 
			
		||||
        await assertTreeItemIsVisible(page, clock.name);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('Creating a child object on one tab and expanding its parent on the other shows the correct composition @2p', async ({ page, openmctConfig }) => {
 | 
			
		||||
        test.info().annotations.push({
 | 
			
		||||
            type: 'issue',
 | 
			
		||||
            description: 'https://github.com/nasa/openmct/issues/6391'
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        const { myItemsFolderName } = openmctConfig;
 | 
			
		||||
        const page2 = await page.context().newPage();
 | 
			
		||||
 | 
			
		||||
        // Both pages: Go to baseURL
 | 
			
		||||
        await Promise.all([
 | 
			
		||||
            page.goto('./', { waitUntil: 'networkidle' }),
 | 
			
		||||
            page2.goto('./', { waitUntil: 'networkidle' })
 | 
			
		||||
        ]);
 | 
			
		||||
 | 
			
		||||
        const page1Folder = await createDomainObjectWithDefaults(page, {
 | 
			
		||||
            type: 'Folder'
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        await expandTreePaneItemByName(page2, myItemsFolderName);
 | 
			
		||||
        await assertTreeItemIsVisible(page2, page1Folder.name);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('Creating a child object on one tab and expanding its parent on the other shows the correct composition @couchdb @2p', async ({ page, openmctConfig }) => {
 | 
			
		||||
        test.info().annotations.push({
 | 
			
		||||
            type: 'issue',
 | 
			
		||||
            description: 'https://github.com/nasa/openmct/issues/6391'
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        const { myItemsFolderName } = openmctConfig;
 | 
			
		||||
        const page2 = await page.context().newPage();
 | 
			
		||||
 | 
			
		||||
        // Both pages: Go to baseURL
 | 
			
		||||
        await Promise.all([
 | 
			
		||||
            page.goto('./', { waitUntil: 'networkidle' }),
 | 
			
		||||
            page2.goto('./', { waitUntil: 'networkidle' })
 | 
			
		||||
        ]);
 | 
			
		||||
 | 
			
		||||
        const page1Folder = await createDomainObjectWithDefaults(page, {
 | 
			
		||||
            type: 'Folder'
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        await expandTreePaneItemByName(page2, myItemsFolderName);
 | 
			
		||||
        await assertTreeItemIsVisible(page2, page1Folder.name);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
test.describe('Tree operations', () => {
 | 
			
		||||
    test('Renaming an object reorders the tree @unstable', async ({ page, openmctConfig }) => {
 | 
			
		||||
        const { myItemsFolderName } = openmctConfig;
 | 
			
		||||
        await page.goto('./', { waitUntil: 'networkidle' });
 | 
			
		||||
 | 
			
		||||
        await createDomainObjectWithDefaults(page, {
 | 
			
		||||
            type: 'Folder',
 | 
			
		||||
@@ -181,30 +111,17 @@ async function getAndAssertTreeItems(page, expected) {
 | 
			
		||||
    expect(allTexts).toEqual(expected);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async function assertTreeItemIsVisible(page, name) {
 | 
			
		||||
    const mainTree = page.getByRole('tree', {
 | 
			
		||||
        name: 'Main Tree'
 | 
			
		||||
    });
 | 
			
		||||
    const treeItem = mainTree.getByRole('treeitem', {
 | 
			
		||||
        name
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    await expect(treeItem).toBeVisible();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @param {import('@playwright/test').Page} page
 | 
			
		||||
 * @param {string} name
 | 
			
		||||
 */
 | 
			
		||||
async function expandTreePaneItemByName(page, name) {
 | 
			
		||||
    const mainTree = page.getByRole('tree', {
 | 
			
		||||
    const treePane = page.getByRole('tree', {
 | 
			
		||||
        name: 'Main Tree'
 | 
			
		||||
    });
 | 
			
		||||
    const treeItem = mainTree.getByRole('treeitem', {
 | 
			
		||||
        name,
 | 
			
		||||
        expanded: false
 | 
			
		||||
    });
 | 
			
		||||
    await treeItem.locator('.c-disclosure-triangle').click();
 | 
			
		||||
    const treeItem = treePane.locator(`role=treeitem[expanded=false][name=/${name}/]`);
 | 
			
		||||
    const expandTriangle = treeItem.locator('.c-disclosure-triangle');
 | 
			
		||||
    await expandTriangle.click();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
@@ -138,7 +138,6 @@ test.describe('Performance tests', () => {
 | 
			
		||||
        await page.evaluate(() => window.performance.mark("notebook-search-processed"));
 | 
			
		||||
 | 
			
		||||
        //Clear Search
 | 
			
		||||
        await page.locator('.c-search.c-notebook__search .c-search__input').hover();
 | 
			
		||||
        await page.locator('.c-search.c-notebook__search .c-search__clear-input').click();
 | 
			
		||||
        await page.evaluate(() => window.performance.mark("notebook-search-processed"));
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
/* eslint-disable no-undef */
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										68
									
								
								e2e/tests/visual/addTag.visual.spec.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								e2e/tests/visual/addTag.visual.spec.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,68 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * 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.
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This test is dedicated to test the blur behavior of the add tag button.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
const { test } = require("../../pluginFixtures");
 | 
			
		||||
const percySnapshot = require('@percy/playwright');
 | 
			
		||||
const { createDomainObjectWithDefaults } = require('../../appActions');
 | 
			
		||||
 | 
			
		||||
test.describe("Visual - Check blur of Add Tag button", () => {
 | 
			
		||||
 | 
			
		||||
    test.beforeEach(async ({ page }) => {
 | 
			
		||||
        // Open a browser, navigate to the main page, and wait until all network events to resolve
 | 
			
		||||
        await page.goto('./', { waitUntil: 'networkidle' });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test("Blur 'Add tag'", async ({ page, theme }) => {
 | 
			
		||||
        createDomainObjectWithDefaults(page, { type: 'Notebook' });
 | 
			
		||||
 | 
			
		||||
        await page.locator('text=To start a new entry, click here or drag and drop any object').click();
 | 
			
		||||
        const entryLocator = `[aria-label="Notebook Entry Input"] >> nth = 0`;
 | 
			
		||||
        await page.locator(entryLocator).click();
 | 
			
		||||
        await page.locator(entryLocator).fill(`Entry 0`);
 | 
			
		||||
        await page.locator(entryLocator).press('Enter');
 | 
			
		||||
 | 
			
		||||
        // Click on Annotations tab
 | 
			
		||||
        await page.locator('.c-inspector__tab', { hasText: "Annotations" }).click();
 | 
			
		||||
 | 
			
		||||
        // Take snapshot of the notebook with the Annotations tab opened
 | 
			
		||||
        await percySnapshot(page, `Notebook Annotation (theme: '${theme}')`);
 | 
			
		||||
 | 
			
		||||
        // Click on the "Add Tag" button
 | 
			
		||||
        await page.locator('button:has-text("Add Tag")').click();
 | 
			
		||||
 | 
			
		||||
        // Take snapshot of the notebook with the AutoComplete field visible
 | 
			
		||||
        await percySnapshot(page, `Notebook Add Tag (theme: '${theme}')`);
 | 
			
		||||
 | 
			
		||||
        // Click inside the AutoComplete field
 | 
			
		||||
        await page.locator('[placeholder="Type to select tag"]').click();
 | 
			
		||||
 | 
			
		||||
        // Click on the "Tags" header (simulating a click outside the autocomplete field)
 | 
			
		||||
        await page.locator('div.c-inspect-properties__header:has-text("Tags")').click();
 | 
			
		||||
 | 
			
		||||
        // Take snapshot of the notebook with the AutoComplete field hidden and with the "Add Tag" button visible
 | 
			
		||||
        await percySnapshot(page, `Notebook Annotation de-select blur (theme: '${theme}')`);
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,52 +0,0 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * 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 } = require('../../pluginFixtures');
 | 
			
		||||
const { setBoundsToSpanAllActivities } = require('../../helper/planningUtils');
 | 
			
		||||
const { createDomainObjectWithDefaults, createPlanFromJSON } = require('../../appActions');
 | 
			
		||||
const percySnapshot = require('@percy/playwright');
 | 
			
		||||
const examplePlanLarge = require('../../test-data/examplePlans/ExamplePlan_Large.json');
 | 
			
		||||
 | 
			
		||||
test.describe('Visual - Planning', () => {
 | 
			
		||||
    test.beforeEach(async ({ page }) => {
 | 
			
		||||
        await page.goto('./', { waitUntil: 'networkidle' });
 | 
			
		||||
    });
 | 
			
		||||
    test('Plan View', async ({ page, theme }) => {
 | 
			
		||||
        const plan = await createPlanFromJSON(page, {
 | 
			
		||||
            json: examplePlanLarge
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        await setBoundsToSpanAllActivities(page, examplePlanLarge, plan.url);
 | 
			
		||||
        await percySnapshot(page, `Plan View (theme: ${theme})`);
 | 
			
		||||
    });
 | 
			
		||||
    test('Gantt Chart View', async ({ page, theme }) => {
 | 
			
		||||
        const ganttChart = await createDomainObjectWithDefaults(page, {
 | 
			
		||||
            type: 'Gantt Chart'
 | 
			
		||||
        });
 | 
			
		||||
        await createPlanFromJSON(page, {
 | 
			
		||||
            json: examplePlanLarge,
 | 
			
		||||
            parent: ganttChart.uuid
 | 
			
		||||
        });
 | 
			
		||||
        await setBoundsToSpanAllActivities(page, examplePlanLarge, ganttChart.url);
 | 
			
		||||
        await percySnapshot(page, `Gantt Chart View (theme: ${theme})`);
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2023, United States Government
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2022, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user