mirror of
https://github.com/nasa/openmct.git
synced 2025-06-15 13:48:12 +00:00
Fix and re-enable disabled unit test suites (#6990)
* fix: register event listeners etc in `created()` hook * fix: initialize `stalenessSubscription` before composition load and in `created()` hook * refactor(test): make `openmct` const * refactor: update overlayPlot spec to Vue 3 and fix tests * refactor: fix eslint errors * refactor: move initialization steps to `created()` hook * test: re-enable and fix stackedPlot test suite * fix: `hideTree=true` hides the tree again * fix: add back in check on mount * test: fix Layout tests * fix: BarGraph test * fix: plot inspector tests * fix: reenable grand search tests * fix: inspectorStyles test suite * fix: re-enable most timeline tests * fix: no need to hideTree in appactions * fix: re-enable more tests * test: re-enable more tests * test: re-enable most plot tests * chore: `lint:fix` * test: re-enable timelist suite * fix(#7016): timers count down or up to a target date * test: add regression tests to cover disabled unit tests * refactor: lint:fix * refactor: no need for momentjs here * fix: timerAction missed refactor * fix: ensure timestamp is always UTC string * test: use role selectors * docs: add instructions for clock override in e2e * docs: update * Update readme * lint * spelling fixes --------- Co-authored-by: Scott Bell <scott@traclabs.com> Co-authored-by: John Hill <john.c.hill@nasa.gov>
This commit is contained in:
@ -25,12 +25,15 @@ const {
|
||||
openObjectTreeContextMenu,
|
||||
createDomainObjectWithDefaults
|
||||
} = require('../../../../appActions');
|
||||
import { MISSION_TIME } from '../../../../constants';
|
||||
|
||||
test.describe('Timer', () => {
|
||||
let timer;
|
||||
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await page.goto('./', { waitUntil: 'domcontentloaded' });
|
||||
timer = await createDomainObjectWithDefaults(page, { type: 'timer' });
|
||||
await assertTimerElements(page, timer);
|
||||
});
|
||||
|
||||
test('Can perform actions on the Timer', async ({ page }) => {
|
||||
@ -63,6 +66,70 @@ test.describe('Timer', () => {
|
||||
});
|
||||
});
|
||||
|
||||
test.describe('Timer with target date', () => {
|
||||
let timer;
|
||||
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await page.goto('./', { waitUntil: 'domcontentloaded' });
|
||||
timer = await createDomainObjectWithDefaults(page, { type: 'timer' });
|
||||
await assertTimerElements(page, timer);
|
||||
});
|
||||
|
||||
// Override clock
|
||||
test.use({
|
||||
clockOptions: {
|
||||
now: MISSION_TIME,
|
||||
shouldAdvanceTime: true
|
||||
}
|
||||
});
|
||||
|
||||
test('Can count down to a target date', async ({ page }) => {
|
||||
// Set the target date to 2024-11-24 03:30:00
|
||||
await page.getByTitle('More options').click();
|
||||
await page.getByRole('menuitem', { name: /Edit Properties.../ }).click();
|
||||
await page.getByPlaceholder('YYYY-MM-DD').fill('2024-11-24');
|
||||
await page.locator('input[name="hour"]').fill('3');
|
||||
await page.locator('input[name="min"]').fill('30');
|
||||
await page.locator('input[name="sec"]').fill('00');
|
||||
await page.getByLabel('Save').click();
|
||||
|
||||
// Get the current timer seconds value
|
||||
const timerSecValue = (await page.locator('.c-timer__value').innerText()).split(':').at(-1);
|
||||
await expect(page.locator('.c-timer__direction')).toHaveClass(/icon-minus/);
|
||||
|
||||
// Wait for the timer to count down and assert
|
||||
await expect
|
||||
.poll(async () => {
|
||||
const newTimerValue = (await page.locator('.c-timer__value').innerText()).split(':').at(-1);
|
||||
return Number(newTimerValue);
|
||||
})
|
||||
.toBeLessThan(Number(timerSecValue));
|
||||
});
|
||||
|
||||
test('Can count up from a target date', async ({ page }) => {
|
||||
// Set the target date to 2020-11-23 03:30:00
|
||||
await page.getByTitle('More options').click();
|
||||
await page.getByRole('menuitem', { name: /Edit Properties.../ }).click();
|
||||
await page.getByPlaceholder('YYYY-MM-DD').fill('2020-11-23');
|
||||
await page.locator('input[name="hour"]').fill('3');
|
||||
await page.locator('input[name="min"]').fill('30');
|
||||
await page.locator('input[name="sec"]').fill('00');
|
||||
await page.getByLabel('Save').click();
|
||||
|
||||
// Get the current timer seconds value
|
||||
const timerSecValue = (await page.locator('.c-timer__value').innerText()).split(':').at(-1);
|
||||
await expect(page.locator('.c-timer__direction')).toHaveClass(/icon-plus/);
|
||||
|
||||
// Wait for the timer to count up and assert
|
||||
await expect
|
||||
.poll(async () => {
|
||||
const newTimerValue = (await page.locator('.c-timer__value').innerText()).split(':').at(-1);
|
||||
return Number(newTimerValue);
|
||||
})
|
||||
.toBeGreaterThan(Number(timerSecValue));
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Actions that can be performed on a timer from context menus.
|
||||
* @typedef {'Start' | 'Stop' | 'Pause' | 'Restart at 0'} TimerAction
|
||||
@ -141,14 +208,17 @@ function buttonTitleFromAction(action) {
|
||||
* @param {TimerAction} action
|
||||
*/
|
||||
async function assertTimerStateAfterAction(page, action) {
|
||||
const timerValue = page.locator('.c-timer__value');
|
||||
let timerStateClass;
|
||||
switch (action) {
|
||||
case 'Start':
|
||||
case 'Restart at 0':
|
||||
timerStateClass = 'is-started';
|
||||
expect(await timerValue.innerText()).toBe('0D 00:00:00');
|
||||
break;
|
||||
case 'Stop':
|
||||
timerStateClass = 'is-stopped';
|
||||
expect(await timerValue.innerText()).toBe('--:--:--');
|
||||
break;
|
||||
case 'Pause':
|
||||
timerStateClass = 'is-paused';
|
||||
@ -157,3 +227,25 @@ async function assertTimerStateAfterAction(page, action) {
|
||||
|
||||
await expect.soft(page.locator('.c-timer')).toHaveClass(new RegExp(timerStateClass));
|
||||
}
|
||||
|
||||
/**
|
||||
* Assert that all the major components of a timer are present in the DOM.
|
||||
* @param {import('@playwright/test').Page} page
|
||||
* @param {import('../../../../appActions').CreatedObjectInfo} timer
|
||||
*/
|
||||
async function assertTimerElements(page, timer) {
|
||||
const timerElement = page.locator('.c-timer');
|
||||
const resetButton = page.getByRole('button', { name: 'Reset' });
|
||||
const pausePlayButton = page
|
||||
.getByRole('button', { name: 'Pause' })
|
||||
.or(page.getByRole('button', { name: 'Start' }));
|
||||
const timerDirectionIcon = page.locator('.c-timer__direction');
|
||||
const timerValue = page.locator('.c-timer__value');
|
||||
|
||||
expect(await page.locator('.l-browse-bar__object-name').innerText()).toBe(timer.name);
|
||||
expect(timerElement).toBeAttached();
|
||||
expect(resetButton).toBeAttached();
|
||||
expect(pausePlayButton).toBeAttached();
|
||||
expect(timerDirectionIcon).toBeAttached();
|
||||
expect(timerValue).toBeAttached();
|
||||
}
|
||||
|
Reference in New Issue
Block a user