mirror of
https://github.com/nasa/openmct.git
synced 2025-06-24 18:25:19 +00:00
Compare commits
3 Commits
master
...
timestrip-
Author | SHA1 | Date | |
---|---|---|---|
2f79adcb88 | |||
92112cf8a2 | |||
56159843a2 |
46
e2e/tests/plugins/notebook/notebook.e2e.spec.js
Normal file
46
e2e/tests/plugins/notebook/notebook.e2e.spec.js
Normal file
@ -0,0 +1,46 @@
|
||||
/*****************************************************************************
|
||||
* 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.
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
This test suite is dedicated to tests which verify the basic operations surrounding Notebooks.
|
||||
*/
|
||||
|
||||
const { test, expect } = require('@playwright/test');
|
||||
|
||||
test.describe('Notebook CRUD Operations', () => {
|
||||
test.fixme('Can create a Notebook Object', async ({ page }) => {
|
||||
//Create domain object
|
||||
});
|
||||
test.fixme('Can update a Notebook Object', async ({ page }) => {
|
||||
//Create domain object
|
||||
//Save Domain Object
|
||||
//Verify that the newly created domain object can be exported as JSON from the 3 dot menu
|
||||
});
|
||||
test.fixme('Can view a perviously created Notebook Object', async ({ page }) => {
|
||||
// Create 2 objects with hierarchy
|
||||
// Export as JSON
|
||||
// Verify Hiearchy
|
||||
});
|
||||
test.fixme('Can Delete a Notebook Object', async ({ page }) => {
|
||||
// Other than non-persistible objects
|
||||
});
|
||||
});
|
114
e2e/tests/plugins/notebook/notebookTesting.md
Normal file
114
e2e/tests/plugins/notebook/notebookTesting.md
Normal file
@ -0,0 +1,114 @@
|
||||
Notebook Testing:
|
||||
## Useful commands:
|
||||
1. - To check default notebook:
|
||||
`JSON.parse(localStorage.getItem('notebook-storage'));`
|
||||
1. - Clear default notebook:
|
||||
`localStorage.setItem('notebook-storage', null);`
|
||||
|
||||
## I. Default Notebook:
|
||||
1. Make sure there is no default notebook
|
||||
`localStorage.setItem('notebook-storage', null);`
|
||||
2. Check for default notebook is null
|
||||
`JSON.parse(localStorage.getItem('notebook-storage'));`
|
||||
3. Create 2 notebooks, add entry into first one to make it default now add entry to other one. Verify by icon change and using following
|
||||
1. `JSON.parse(localStorage.getItem('notebook-storage'));`
|
||||
2. There is default icon on notebook inside tree and main view after notebook name
|
||||
3. Inside default notebook, default section and page has deafult icon.
|
||||
4. Delete default notebook and check for default notebook is null and default icons are removed.
|
||||
`JSON.parse(localStorage.getItem('notebook-storage'));`
|
||||
|
||||
## II. Sections and Pages:
|
||||
1. - Newly created notebook should have one Section and one page, 'Unnamed Section'/'Unnamed Page'
|
||||
|
||||
### - Sections:
|
||||
1. - Rename existing section '1 Section' and '1 Page'
|
||||
- click 'add section' new section - should be added 'Unnamed Section' with new page 'Unnamed Page'
|
||||
1. - Delete existing section
|
||||
- new 'Unnamed Section' automatically gets created.
|
||||
1. - Have 5 total sections without a default section/page
|
||||
- select 3nd section then delete 4th section
|
||||
- 3rd is still selected
|
||||
1. - Have 5 total sections without a default section/page
|
||||
- select 3rd section then delete 3rd section
|
||||
- 1st is now selected
|
||||
1. - Have 5 total sections with a 3rd section as default section
|
||||
- select 2nd section then delete 2nd section
|
||||
- 3rd (default) is now selected
|
||||
1. - Have 5 total sections with a 3rd section as default section
|
||||
- select 3rd section then delete 3rd section
|
||||
- 1st is now selected and there is no default notebook
|
||||
|
||||
### - Pages:
|
||||
1. - Delete existing page
|
||||
- new 'Unnamed Page' automatically gets created
|
||||
1. - Have 5 total pages without a default page
|
||||
- select 3nd page then delete 4th page
|
||||
- 3rd is still selected
|
||||
1. - Have 5 total pages without a default page
|
||||
- select 3rd page then delete 3rd page
|
||||
- 1st is now selected
|
||||
1. - Have 5 total pages with a 3rd page as default page
|
||||
- select 2nd page then delete 2nd page
|
||||
- 3rd (default) is now selected
|
||||
1. - Have 5 total pages with a 3rd page as default page
|
||||
- select 3rd page then delete 3rd page
|
||||
- 1st is now selected and there is no default notebook
|
||||
|
||||
## III. Entries:
|
||||
1. - Add new entry into page should create entry and focus on it
|
||||
1. - Drag and drop any telmetry object on 'drop object'
|
||||
- new entry gets created with telemtry object
|
||||
1. - Add new entry into page
|
||||
- drop any telmetry object on this entry
|
||||
- telmetry object appears inside this entry
|
||||
1. - Add new entry into page, enter text
|
||||
- navigate away and return
|
||||
- edit entry text
|
||||
- navigate away and return back
|
||||
- confirm text is correct
|
||||
1. - delete previously created entry
|
||||
|
||||
## IV: Snapshot Menu:
|
||||
1. - There should be no default notebook
|
||||
- Clear default notebook if exists using `localStorage.setItem('notebook-storage', null);`
|
||||
- refresh page
|
||||
- Click on 'Notebook Snaphot Menu'
|
||||
- Following popup option should be there
|
||||
1. save to Notebook Snapshots
|
||||
1. - Check for default notebook if there is one, else add some entry into one of notebook to make it default
|
||||
- Click on 'Notebook Snaphot Menu'
|
||||
- Following popup options should be there
|
||||
1. save to Default Notebook
|
||||
1. save to Notebook Snapshots
|
||||
1. - Select any telemetry object eg: SWG
|
||||
- From 'Notebook Snaphot Menu' click on 'save to Default Notebook'
|
||||
- Navigate to default notebook - section - page and verify that SWG snaphot has been added with correct details
|
||||
|
||||
## V: Snapshot container:
|
||||
1. - Select any telemetry object eg: SWG
|
||||
- Click on 'Notebook Snaphot Menu'
|
||||
- from popup options click on 'save to Notebook Snapshots'
|
||||
- Snapshots indicator should blink, click on it to view snapshots
|
||||
- drag and drop snapshot on droppable area for new enrty
|
||||
- this should create a new entry with given snaphot has been added to it
|
||||
1. - Select any telemetry object eg: SWG
|
||||
- Click on 'Notebook Snaphot Menu'
|
||||
- from popup options click on 'save to Notebook Snapshots'
|
||||
- Snapshots indicator should blink, click on it to view snapshots
|
||||
- goto any notebook with pre exisintg entry (if not create new entry)
|
||||
- drag and drop snapshot on exisintg entry
|
||||
- this should add a given snaphot inside that entry
|
||||
|
||||
## VI: Embeds:
|
||||
1. - Add SWG using snapshot to notebook
|
||||
- Go to that entry
|
||||
- click on thumbnail image
|
||||
- should open image with PNG, JPG and Annotate buttons
|
||||
- verify they all work as intended
|
||||
1. - Add SWG using snapshot to notebook
|
||||
- note down start and end time on time conductor and Fixed Timestamp/Local Clock
|
||||
- Go to that entry
|
||||
- change start and end time on time conductor if Local Clock
|
||||
- click on embed Name/Text
|
||||
- should take to that object
|
||||
- also verify that start and end time on time conductor (also should automatically switch to Fixed timestamp)*/
|
126
e2e/tests/visual/default.visual.spec.js
Normal file
126
e2e/tests/visual/default.visual.spec.js
Normal file
@ -0,0 +1,126 @@
|
||||
/*****************************************************************************
|
||||
* 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.
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
Collection of Visual Tests set to run in a default context. The tests within this suite
|
||||
are only meant to run against openmct's app.js started by `npm run start` within the
|
||||
`./e2e/playwright-visual.config.js` file.
|
||||
|
||||
These should only use functional expect statements to verify assumptions about the state
|
||||
in a test and not for functional verification of correctness. Visual tests are not supposed
|
||||
to "fail" on assertions. Instead, they should be used to detect changes between builds or branches.
|
||||
|
||||
Note: Larger testsuite sizes are OK due to the setup time associated with these tests.
|
||||
*/
|
||||
|
||||
const { test, expect } = require('@playwright/test');
|
||||
const percySnapshot = require('@percy/playwright');
|
||||
const path = require('path');
|
||||
const sinon = require('sinon');
|
||||
|
||||
const VISUAL_GRACE_PERIOD = 5 * 1000; //Lets the application "simmer" before the snapshot is taken
|
||||
|
||||
// // Snippet from https://github.com/microsoft/playwright/issues/6347#issuecomment-965887758
|
||||
// //Will replace with cy.clock() equivalent
|
||||
test.beforeEach(async ({ context }) => {
|
||||
await context.addInitScript({
|
||||
// eslint-disable-next-line no-undef
|
||||
path: path.join(__dirname, '../../..', './node_modules/sinon/pkg/sinon.js')
|
||||
});
|
||||
await context.addInitScript(() => {
|
||||
window.__clock = sinon.useFakeTimers({
|
||||
now: 1483228800000,
|
||||
shouldAdvanceTime: true
|
||||
}); //Set browser clock to UNIX Epoch
|
||||
});
|
||||
});
|
||||
|
||||
test('Visual - Display layout items view', async ({ page }) => {
|
||||
//Go to baseURL
|
||||
await page.goto('/', { waitUntil: 'networkidle' });
|
||||
|
||||
await page.evaluate(() => window.__clock.tick(1000));
|
||||
|
||||
//Click the Create button
|
||||
await page.click('button:has-text("Create")');
|
||||
|
||||
// Click text=Display Layout
|
||||
await page.click('text=Display Layout');
|
||||
|
||||
// Click text=OK
|
||||
await page.click('text=OK');
|
||||
|
||||
// Take a snapshot of the newly created Display Layout object
|
||||
await page.waitForTimeout(VISUAL_GRACE_PERIOD);
|
||||
await percySnapshot(page, 'Default Display Layout');
|
||||
|
||||
// Click text=Snapshot Save and Finish Editing Save and Continue Editing >> button >> nth=1
|
||||
await page.locator('text=Snapshot Save and Finish Editing Save and Continue Editing >> button').nth(1).click();
|
||||
|
||||
// Click text=Save and Finish Editing
|
||||
await page.locator('text=Save and Finish Editing').click();
|
||||
|
||||
//Click the Create button
|
||||
await page.click('button:has-text("Create")');
|
||||
|
||||
// Click text=Sine Wave Generator
|
||||
await page.click('text=Sine Wave Generator');
|
||||
|
||||
// Click text=Save In Open MCT No items >> input[type="search"]
|
||||
await page.locator('text=Save In Open MCT No items >> input[type="search"]').click();
|
||||
|
||||
// Fill text=Save In Open MCT No items >> input[type="search"]
|
||||
await page.locator('text=Save In Open MCT No items >> input[type="search"]').fill('Unnamed Display Layout');
|
||||
|
||||
// Click text=OK Cancel
|
||||
await page.locator('text=OK Cancel').click();
|
||||
|
||||
// Click text=OK
|
||||
await page.click('text=OK');
|
||||
|
||||
// Take a snapshot of the newly created Display Layout object
|
||||
await page.waitForTimeout(VISUAL_GRACE_PERIOD);
|
||||
await percySnapshot(page, 'Default Sine Wave Generator');
|
||||
|
||||
});
|
||||
|
||||
test.skip('Visual - Timestrip', async ({ page }) => {
|
||||
//Go to baseURL
|
||||
await page.goto('/', { waitUntil: 'networkidle' });
|
||||
|
||||
//Click the Create button
|
||||
await page.click('button:has-text("Create")');
|
||||
|
||||
// Click li:has-text("Example Imagery")
|
||||
await page.locator('li:has-text("Example Imagery")').click();
|
||||
|
||||
// Fill input[type="number"]
|
||||
//await page.locator('input[type="number"]').fill('500');
|
||||
|
||||
// Click text=OK
|
||||
await page.locator('text=OK').click();
|
||||
|
||||
await page.pause();
|
||||
//
|
||||
await page.waitForTimeout(VISUAL_GRACE_PERIOD);
|
||||
await percySnapshot(page, 'Default Timestrip created');
|
||||
});
|
@ -22,14 +22,14 @@
|
||||
|
||||
/*
|
||||
Collection of Visual Tests set to run in a default context. The tests within this suite
|
||||
are only meant to run against openmct's app.js started by `npm run start` within the
|
||||
are only meant to run against openmct's app.js started by `npm run start` within the
|
||||
`./e2e/playwright-visual.config.js` file.
|
||||
|
||||
These should only use functional expect statements to verify assumptions about the state
|
||||
These should only use functional expect statements to verify assumptions about the state
|
||||
in a test and not for functional verification of correctness. Visual tests are not supposed
|
||||
to "fail" on assertions. Instead, they should be used to detect changes between builds or branches.
|
||||
|
||||
Note: Larger testsuite sizes are OK due to the setup time associated with these tests.
|
||||
Note: Larger testsuite sizes are OK due to the setup time associated with these tests.
|
||||
*/
|
||||
|
||||
const { test, expect } = require('@playwright/test');
|
||||
@ -40,7 +40,7 @@ const sinon = require('sinon');
|
||||
const VISUAL_GRACE_PERIOD = 5 * 1000; //Lets the application "simmer" before the snapshot is taken
|
||||
|
||||
// Snippet from https://github.com/microsoft/playwright/issues/6347#issuecomment-965887758
|
||||
// Will replace with cy.clock() equivalent
|
||||
//Will replace with cy.clock() equivalent
|
||||
test.beforeEach(async ({ context }) => {
|
||||
await context.addInitScript({
|
||||
// eslint-disable-next-line no-undef
|
||||
@ -171,3 +171,25 @@ test('Visual - Sine Wave Generator Form', async ({ page }) => {
|
||||
await page.waitForTimeout(VISUAL_GRACE_PERIOD);
|
||||
await percySnapshot(page, 'removed amplitude property value');
|
||||
});
|
||||
|
||||
test.only('Visual - Timestrip', async ({ page }) => {
|
||||
//Go to baseURL
|
||||
await page.goto('/', { waitUntil: 'networkidle' });
|
||||
|
||||
//Click the Create button
|
||||
await page.click('button:has-text("Create")');
|
||||
|
||||
// Click li:has-text("Example Imagery")
|
||||
await page.locator('li:has-text("Example Imagery")').click();
|
||||
|
||||
// Fill input[type="number"]
|
||||
//await page.locator('input[type="number"]').fill('500');
|
||||
|
||||
// Click text=OK
|
||||
await page.locator('text=OK').click();
|
||||
|
||||
await page.pause();
|
||||
//
|
||||
await page.waitForTimeout(VISUAL_GRACE_PERIOD);
|
||||
await percySnapshot(page, 'Default Timestrip created');
|
||||
});
|
Reference in New Issue
Block a user