Skip to content

Commit

Permalink
Add tests for renaming and deleting views
Browse files Browse the repository at this point in the history
  • Loading branch information
AaronPlave committed Nov 28, 2023
1 parent 2271b0d commit 27e8d9b
Show file tree
Hide file tree
Showing 4 changed files with 233 additions and 93 deletions.
34 changes: 8 additions & 26 deletions e2e-tests/fixtures/Plan.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ export class Plan {
gridMenu: Locator;
gridMenuButton: Locator;
gridMenuItem: (name: string) => Locator;
invalidPlanFilePath: string = 'e2e-tests/data/invalid-view.json';
navButtonConstraints: Locator;
navButtonConstraintsMenu: Locator;
navButtonExpansion: Locator;
Expand All @@ -25,11 +24,6 @@ export class Plan {
navButtonSchedulingMenu: Locator;
navButtonSimulation: Locator;
navButtonSimulationMenu: Locator;
navButtonView: Locator;
navButtonViewMenu: Locator;
navButtonViewSaveAsMenuButton: Locator;
navButtonViewSavedViewsMenuButton: Locator;
navButtonViewUploadViewMenuButton: Locator;
panelActivityDirectivesTable: Locator;
panelActivityForm: Locator;
panelActivityTypes: Locator;
Expand All @@ -42,6 +36,7 @@ export class Plan {
panelTimeline: Locator;
panelTimelineEditor: Locator;
planTitle: Locator;
roleSelector: Locator;
scheduleButton: Locator;
schedulingConditionEnabledCheckbox: Locator;
schedulingConditionListItemSelector: string;
Expand All @@ -54,7 +49,6 @@ export class Plan {
schedulingGoalNewButton: Locator;
schedulingSatisfiedActivity: Locator;
schedulingStatusSelector: (status: string) => string;
validPlanFilePath: string = 'e2e-tests/data/valid-view.json';

constructor(
public page: Page,
Expand Down Expand Up @@ -142,20 +136,6 @@ export class Plan {
await this.panelSimulation.getByPlaceholder('Enter template name').blur();
}

async fillViewInputFile(planFilePath: string = this.validPlanFilePath) {
const viewFileInput = this.page.locator('.modal-content input[name="file"]');
await viewFileInput.focus();
await viewFileInput.setInputFiles(planFilePath);
await viewFileInput.evaluate(e => e.blur());
}

async fillViewInputName() {
const viewNameInput = this.page.locator('.modal-content input[name="name"]');
await viewNameInput.focus();
await viewNameInput.fill(uniqueNamesGenerator({ dictionaries: [adjectives, colors, animals] }));
await viewNameInput.evaluate(e => e.blur());
}

/**
* Wait for Hasura events to finish seeding the database after a model is created.
* If we do not wait then navigation to the plan will fail because the data is not there yet.
Expand Down Expand Up @@ -260,6 +240,12 @@ export class Plan {
expect(await this.panelSimulation.getByRole('textbox', { name: templateName })).toBeVisible();
}

async setRoleIfNeeded(role: string = 'aerie_admin') {
if (this.roleSelector) {
this.roleSelector.selectOption(role);
}
}

async showConstraintsLayout() {
await this.showPanel('Constraints');
await this.panelConstraints.waitFor({ state: 'attached' });
Expand Down Expand Up @@ -320,11 +306,6 @@ export class Plan {
this.navButtonSchedulingMenu = page.locator(`.nav-button:has-text("Scheduling") .menu`);
this.navButtonSimulation = page.locator(`.nav-button:has-text("Simulation")`);
this.navButtonSimulationMenu = page.locator(`.nav-button:has-text("Simulation") .menu`);
this.navButtonView = page.locator('.view-menu');
this.navButtonViewMenu = page.locator(`.view-menu .menu`);
this.navButtonViewSaveAsMenuButton = page.locator(`.view-menu .menu .menu-item:has-text("Save as")`);
this.navButtonViewSavedViewsMenuButton = page.locator(`.view-menu .menu .menu-item:has-text("Browse saved views")`);
this.navButtonViewUploadViewMenuButton = page.locator(`.view-menu .menu .menu-item:has-text("Upload view file")`);
this.page = page;
this.panelActivityDirectivesTable = page.locator('[data-component-name="ActivityDirectivesTablePanel"]');
this.panelActivityForm = page.locator('[data-component-name="ActivityFormPanel"]');
Expand All @@ -338,6 +319,7 @@ export class Plan {
this.panelTimeline = page.locator('[data-component-name="TimelinePanel"]');
this.panelTimelineEditor = page.locator('[data-component-name="TimelineEditorPanel"]');
this.planTitle = page.locator(`.plan-title:has-text("${this.plans.planName}")`);
this.roleSelector = page.locator(`.nav select`);
this.scheduleButton = page.locator('.header-actions button[aria-label="Schedule"]');
this.analyzeButton = page.locator('.header-actions button[aria-label="Analyze"]');
this.schedulingGoal = page.locator('.scheduling-goal').first();
Expand Down
119 changes: 119 additions & 0 deletions e2e-tests/fixtures/View.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
import { expect, type Locator, type Page } from '@playwright/test';
import { adjectives, animals, colors, uniqueNamesGenerator } from 'unique-names-generator';

export class View {
confirmModal: Locator;
confirmModalDeleteButton: Locator;
invalidViewFilePath: string = 'e2e-tests/data/invalid-view.json';
navButtonView: Locator;
navButtonViewMenu: Locator;
navButtonViewMenuTitle: Locator;
navButtonViewRenameViewMenuButton: Locator;
navButtonViewSaveAsMenuButton: Locator;
navButtonViewSavedViewsMenuButton: Locator;
navButtonViewUploadViewMenuButton: Locator;
renameViewMenuSaveViewButton: Locator;
saveAsMenuSaveAsButton: Locator;
tableRowDeleteButtonSelector: (viewName: string) => Locator;
tableRowSelector: (viewName: string) => Locator;
validViewFilePath: string = 'e2e-tests/data/valid-view.json';

constructor(public page: Page) {
this.updatePage(page);
}

async createView(viewName: string = this.createViewName()) {
await this.openSaveAs();
await this.fillViewInputName(viewName);
await this.saveAsMenuSaveAsButton.click();
}

createViewName() {
return uniqueNamesGenerator({ dictionaries: [adjectives, colors, animals] });
}

async deleteView(viewName: string) {
await this.openSavedViews();
await expect(this.tableRowSelector(viewName)).toBeVisible();
await expect(this.tableRowDeleteButtonSelector(viewName)).not.toBeVisible();

await this.tableRowSelector(viewName).hover();
await this.tableRowDeleteButtonSelector(viewName).waitFor({ state: 'attached' });
await this.tableRowDeleteButtonSelector(viewName).waitFor({ state: 'visible' });
await expect(this.tableRowDeleteButtonSelector(viewName)).toBeVisible();

await expect(this.confirmModal).not.toBeVisible();
await this.tableRowDeleteButtonSelector(viewName).click();
await this.confirmModal.waitFor({ state: 'attached' });
await this.confirmModal.waitFor({ state: 'visible' });
await expect(this.confirmModal).toBeVisible();

await expect(this.confirmModalDeleteButton).toBeVisible();
await this.confirmModalDeleteButton.click();
await this.tableRowSelector(viewName).waitFor({ state: 'detached' });
await this.tableRowSelector(viewName).waitFor({ state: 'hidden' });
await expect(this.tableRowSelector(viewName)).not.toBeVisible();
}

async fillViewInputFile(planFilePath: string = this.validViewFilePath) {
const viewFileInput = this.page.locator('.modal-content input[name="file"]');
await viewFileInput.focus();
await viewFileInput.setInputFiles(planFilePath);
await viewFileInput.evaluate(e => e.blur());
}

async fillViewInputName(viewName: string = this.createViewName()) {
const viewNameInput = this.page.locator('.modal-content input[name="name"]');
await viewNameInput.focus();
await viewNameInput.fill(viewName);
await viewNameInput.evaluate(e => e.blur());
}

async openRenameView() {
await expect(this.navButtonViewRenameViewMenuButton).not.toBeVisible();
await this.openViewMenu();
await expect(this.navButtonViewRenameViewMenuButton).toBeVisible();
await this.navButtonViewRenameViewMenuButton.click();
}

async openSaveAs() {
await this.openViewMenu();
await expect(this.navButtonViewSaveAsMenuButton).toBeVisible();
await this.navButtonViewSaveAsMenuButton.click();
}

async openSavedViews() {
await this.openViewMenu();
await expect(this.navButtonViewSavedViewsMenuButton).toBeVisible();
await this.navButtonViewSavedViewsMenuButton.click();
await expect(this.page.locator('.modal .modal-header:has-text("Saved Views")')).toBeVisible();
}

async openViewMenu() {
this.navButtonView.hover();
await expect(this.navButtonViewMenu).toBeVisible();
}

async renameView(viewName: string) {
await this.openRenameView();
await this.fillViewInputName(viewName);
await this.renameViewMenuSaveViewButton.click();
}

updatePage(page: Page): void {
this.confirmModal = page.locator(`.modal:has-text("Delete View")`);
this.confirmModalDeleteButton = page.locator(`.modal:has-text("Delete View") >> button:has-text("Delete")`);
this.navButtonView = page.locator('.view-menu-button');
this.navButtonViewMenu = page.locator(`.view-menu`);
this.navButtonViewMenuTitle = page.locator(`.view-menu-button .nav-button-title`);
this.navButtonViewSaveAsMenuButton = page.locator(`.view-menu .menu-item:has-text("Save as")`);
this.navButtonViewUploadViewMenuButton = page.locator(`.view-menu .menu-item:has-text("Upload view file")`);
this.navButtonViewSavedViewsMenuButton = page.locator(`.view-menu .menu-item:has-text("Browse saved views")`);
this.navButtonViewRenameViewMenuButton = page.locator(`.view-menu .menu-item:has-text("Rename view")`);
this.renameViewMenuSaveViewButton = page.locator('.modal .st-button:has-text("Save View")');
this.saveAsMenuSaveAsButton = page.locator('.modal .st-button:has-text("Save View")');
this.tableRowSelector = (viewName: string) => page.locator(`.ag-row:has-text("${viewName}")`);
this.tableRowDeleteButtonSelector = (viewName: string) =>
page.locator(`.ag-row:has-text("${viewName}") >> button[aria-label="Delete View"]`);
}
}
67 changes: 0 additions & 67 deletions e2e-tests/tests/plan.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -129,73 +129,6 @@ test.describe.serial('Plan', () => {
await expect(plan.navButtonSchedulingMenu).not.toBeVisible();
});

test(`Hovering on 'Default View' in the top navigation bar should show the view menu`, async () => {
await expect(plan.navButtonViewMenu).not.toBeVisible();
plan.navButtonView.hover();
await expect(plan.navButtonViewMenu).toBeVisible();
plan.planTitle.hover();
await expect(plan.navButtonViewMenu).not.toBeVisible();
});

test(`Clicking on 'Saved Views' in the view menu should pop up a SavedViewsModal`, async () => {
await expect(plan.navButtonViewMenu).not.toBeVisible();
plan.navButtonView.hover();
await expect(plan.navButtonViewMenu).toBeVisible();
await expect(plan.navButtonViewSavedViewsMenuButton).toBeVisible();
await plan.navButtonViewSavedViewsMenuButton.click();
await expect(page.locator('.modal .modal-header:has-text("Saved Views")')).toBeVisible();
await page.locator('.modal .st-button .bi-x').click();
});

test(`Clicking on 'Upload view file' in the view menu should pop up a UploadViewModal`, async () => {
await expect(plan.navButtonViewMenu).not.toBeVisible();
plan.navButtonView.hover();
await expect(plan.navButtonViewMenu).toBeVisible();
await expect(plan.navButtonViewUploadViewMenuButton).toBeVisible();
await plan.navButtonViewUploadViewMenuButton.click();
await expect(page.locator('.modal .modal-header:has-text("Upload View JSON")')).toBeVisible();
await page.locator('.modal .st-button:has-text("Cancel")').click();
});

test(`Clicking on 'Save As' in the view menu should pop up a CreateViewModal`, async () => {
await expect(plan.navButtonViewMenu).not.toBeVisible();
plan.navButtonView.click();
await expect(plan.navButtonViewMenu).toBeVisible();
await expect(plan.navButtonViewSaveAsMenuButton).toBeVisible();
await plan.navButtonViewSaveAsMenuButton.click();
await expect(page.locator('.modal .modal-header:has-text("Save new view")')).toBeVisible();
await page.locator('.modal .st-button:has-text("Cancel")').click();
});

test(`Selecting an invalid view file should display an error and prevent the file from being uploaded`, async () => {
await expect(plan.navButtonViewMenu).not.toBeVisible();
plan.navButtonView.hover();
await expect(plan.navButtonViewMenu).toBeVisible();
await expect(plan.navButtonViewUploadViewMenuButton).toBeVisible();
await plan.navButtonViewUploadViewMenuButton.click();
await plan.fillViewInputName();
await plan.fillViewInputFile(plan.invalidPlanFilePath);
await expect(page.locator('.modal-content .error')).toBeVisible();
await expect(page.locator('.modal .st-button:has-text("Upload View")')).toBeDisabled();
await expect(page.locator('.modal')).toBeVisible();
// Expect validation error collapse to be visible
await expect(page.locator('.modal-content .collapse')).toBeVisible();
await page.locator('.modal .st-button:has-text("Cancel")').click();
});

test(`Selecting an valid view file should not display an error and not prevent the file from being uploaded`, async () => {
await expect(plan.navButtonViewMenu).not.toBeVisible();
plan.navButtonView.hover();
await expect(plan.navButtonViewMenu).toBeVisible();
await expect(plan.navButtonViewUploadViewMenuButton).toBeVisible();
await plan.navButtonViewUploadViewMenuButton.click();
await plan.fillViewInputName();
await plan.fillViewInputFile();
await expect(page.locator('.modal-content .error')).not.toBeVisible();
await page.locator('.modal .st-button:has-text("Upload View")').click();
await expect(page.locator('.modal')).not.toBeVisible();
});

test(`Changing to a new plan should clear the selected activity`, async () => {
// Create an activity which will be auto selected
await plan.panelActivityTypes.getByRole('button', { name: 'CreateActivity-GrowBanana' }).click();

Check failure on line 134 in e2e-tests/tests/plan.test.ts

View workflow job for this annotation

GitHub Actions / test

tests/plan.test.ts:132:3 › Plan › Changing to a new plan should clear the selected activity

1) tests/plan.test.ts:132:3 › Plan › Changing to a new plan should clear the selected activity ─── Error: locator.click: Target closed =========================== logs =========================== waiting for locator('[data-component-name="ActivityTypesPanel"]').getByRole('button', { name: 'CreateActivity-GrowBanana' }) ============================================================ 132 | test(`Changing to a new plan should clear the selected activity`, async () => { 133 | // Create an activity which will be auto selected > 134 | await plan.panelActivityTypes.getByRole('button', { name: 'CreateActivity-GrowBanana' }).click(); | ^ 135 | 136 | // Switch to a new branch and ensure no activity is selected 137 | await plan.createBranch(); at /home/runner/work/***-ui/***-ui/e2e-tests/tests/plan.test.ts:134:94

Check failure on line 134 in e2e-tests/tests/plan.test.ts

View workflow job for this annotation

GitHub Actions / test

tests/plan.test.ts:132:3 › Plan › Changing to a new plan should clear the selected activity

1) tests/plan.test.ts:132:3 › Plan › Changing to a new plan should clear the selected activity ─── Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: locator.click: Target closed =========================== logs =========================== waiting for locator('[data-component-name="ActivityTypesPanel"]').getByRole('button', { name: 'CreateActivity-GrowBanana' }) ============================================================ 132 | test(`Changing to a new plan should clear the selected activity`, async () => { 133 | // Create an activity which will be auto selected > 134 | await plan.panelActivityTypes.getByRole('button', { name: 'CreateActivity-GrowBanana' }).click(); | ^ 135 | 136 | // Switch to a new branch and ensure no activity is selected 137 | await plan.createBranch(); at /home/runner/work/***-ui/***-ui/e2e-tests/tests/plan.test.ts:134:94

Check failure on line 134 in e2e-tests/tests/plan.test.ts

View workflow job for this annotation

GitHub Actions / test

tests/plan.test.ts:132:3 › Plan › Changing to a new plan should clear the selected activity

1) tests/plan.test.ts:132:3 › Plan › Changing to a new plan should clear the selected activity ─── Retry #2 ─────────────────────────────────────────────────────────────────────────────────────── Error: locator.click: Target closed =========================== logs =========================== waiting for locator('[data-component-name="ActivityTypesPanel"]').getByRole('button', { name: 'CreateActivity-GrowBanana' }) ============================================================ 132 | test(`Changing to a new plan should clear the selected activity`, async () => { 133 | // Create an activity which will be auto selected > 134 | await plan.panelActivityTypes.getByRole('button', { name: 'CreateActivity-GrowBanana' }).click(); | ^ 135 | 136 | // Switch to a new branch and ensure no activity is selected 137 | await plan.createBranch(); at /home/runner/work/***-ui/***-ui/e2e-tests/tests/plan.test.ts:134:94
Expand Down
106 changes: 106 additions & 0 deletions e2e-tests/tests/view.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
import { Constraints } from '../fixtures/Constraints.js';
import { Models } from '../fixtures/Models.js';
import { Plan } from '../fixtures/Plan.js';
import { Plans } from '../fixtures/Plans.js';
import { expect, test, type BrowserContext, type Page } from '../fixtures/PlaywrightTest.js';
import { SchedulingConditions } from '../fixtures/SchedulingConditions.js';
import { SchedulingGoals } from '../fixtures/SchedulingGoals.js';
import { View } from '../fixtures/View.js';

let context: BrowserContext;
let models: Models;
let page: Page;
let plan: Plan;
let plans: Plans;
let view: View;
let constraints: Constraints;
let schedulingConditions: SchedulingConditions;
let schedulingGoals: SchedulingGoals;

test.beforeAll(async ({ browser }) => {
context = await browser.newContext();
page = await context.newPage();

models = new Models(page);
plans = new Plans(page, models);
constraints = new Constraints(page, models);
schedulingConditions = new SchedulingConditions(page, models);
schedulingGoals = new SchedulingGoals(page, models);
plan = new Plan(page, plans, constraints, schedulingGoals, schedulingConditions);
view = new View(page);

await models.goto();
await models.createModel();
await plans.goto();
await plans.createPlan();
await plan.goto();
await plan.setRoleIfNeeded();
});

test.afterAll(async () => {
await plans.goto();
await plans.deletePlan();
await models.goto();
await models.deleteModel();
await page.close();
await context.close();
});

test.describe.serial('View', () => {
test(`Clicking on 'Browse Saved Views' in the view menu should pop up a SavedViewsModal`, async () => {
await view.openViewMenu();
await view.openSavedViews();
await page.locator('.modal .st-button .bi-x').click();
});

test(`Clicking on 'Upload view file' in the view menu should pop up a UploadViewModal`, async () => {
await view.openViewMenu();
await expect(view.navButtonViewUploadViewMenuButton).toBeVisible();
await view.navButtonViewUploadViewMenuButton.click();
await expect(page.locator('.modal .modal-header:has-text("Upload View JSON")')).toBeVisible();
await page.locator('.modal .st-button:has-text("Cancel")').click();
});

test(`Clicking on 'Rename View' in the view menu should pop up an EditViewModal`, async () => {
await view.openViewMenu();
// Since no view is loaded the rename menu button should not be visible
await expect(view.navButtonViewRenameViewMenuButton).not.toBeVisible();
const viewName = view.createViewName();
const viewName2 = view.createViewName();
await view.createView(viewName);
await view.renameView(viewName2);
await expect(view.navButtonViewMenuTitle).toHaveText(viewName);

Check failure on line 72 in e2e-tests/tests/view.test.ts

View workflow job for this annotation

GitHub Actions / test

tests/view.test.ts:64:3 › View › Clicking on 'Rename View' in the view menu should pop up an EditViewModal

2) tests/view.test.ts:64:3 › View › Clicking on 'Rename View' in the view menu should pop up an EditViewModal Error: Timed out 5000ms waiting for expect(received).toHaveText(expected) Expected string: "intensive_silver_porcupine" Received string: "wispy_ivory_ptarmigan" Call log: - expect.toHaveText with timeout 5000ms - waiting for locator('.view-menu-button .nav-button-title') - locator resolved to <div class="nav-button-title svelte-3t4lv">wispy_ivory_ptarmigan</div> - unexpected value "wispy_ivory_ptarmigan" - locator resolved to <div class="nav-button-title svelte-3t4lv">wispy_ivory_ptarmigan</div> - unexpected value "wispy_ivory_ptarmigan" - locator resolved to <div class="nav-button-title svelte-3t4lv">wispy_ivory_ptarmigan</div> - unexpected value "wispy_ivory_ptarmigan" - locator resolved to <div class="nav-button-title svelte-3t4lv">wispy_ivory_ptarmigan</div> - unexpected value "wispy_ivory_ptarmigan" - locator resolved to <div class="nav-button-title svelte-3t4lv">wispy_ivory_ptarmigan</div> - unexpected value "wispy_ivory_ptarmigan" - locator resolved to <div class="nav-button-title svelte-3t4lv">wispy_ivory_ptarmigan</div> - unexpected value "wispy_ivory_ptarmigan" - locator resolved to <div class="nav-button-title svelte-3t4lv">wispy_ivory_ptarmigan</div> - unexpected value "wispy_ivory_ptarmigan" - locator resolved to <div class="nav-button-title svelte-3t4lv">wispy_ivory_ptarmigan</div> - unexpected value "wispy_ivory_ptarmigan" - locator resolved to <div class="nav-button-title svelte-3t4lv">wispy_ivory_ptarmigan</div> - unexpected value "wispy_ivory_ptarmigan" 70 | await view.createView(viewName); 71 | await view.renameView(viewName2); > 72 | await expect(view.navButtonViewMenuTitle).toHaveText(viewName); | ^ 73 | await view.deleteView(viewName2); 74 | }); 75 | at /home/runner/work/***-ui/***-ui/e2e-tests/tests/view.test.ts:72:47

Check failure on line 72 in e2e-tests/tests/view.test.ts

View workflow job for this annotation

GitHub Actions / test

tests/view.test.ts:64:3 › View › Clicking on 'Rename View' in the view menu should pop up an EditViewModal

2) tests/view.test.ts:64:3 › View › Clicking on 'Rename View' in the view menu should pop up an EditViewModal Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: Timed out 5000ms waiting for expect(received).toHaveText(expected) Expected string: "combative_copper_goose" Received string: "convenient_black_stoat" Call log: - expect.toHaveText with timeout 5000ms - waiting for locator('.view-menu-button .nav-button-title') - locator resolved to <div class="nav-button-title svelte-3t4lv">convenient_black_stoat</div> - unexpected value "convenient_black_stoat" - locator resolved to <div class="nav-button-title svelte-3t4lv">convenient_black_stoat</div> - unexpected value "convenient_black_stoat" - locator resolved to <div class="nav-button-title svelte-3t4lv">convenient_black_stoat</div> - unexpected value "convenient_black_stoat" - locator resolved to <div class="nav-button-title svelte-3t4lv">convenient_black_stoat</div> - unexpected value "convenient_black_stoat" - locator resolved to <div class="nav-button-title svelte-3t4lv">convenient_black_stoat</div> - unexpected value "convenient_black_stoat" - locator resolved to <div class="nav-button-title svelte-3t4lv">convenient_black_stoat</div> - unexpected value "convenient_black_stoat" - locator resolved to <div class="nav-button-title svelte-3t4lv">convenient_black_stoat</div> - unexpected value "convenient_black_stoat" - locator resolved to <div class="nav-button-title svelte-3t4lv">convenient_black_stoat</div> - unexpected value "convenient_black_stoat" - locator resolved to <div class="nav-button-title svelte-3t4lv">convenient_black_stoat</div> - unexpected value "convenient_black_stoat" 70 | await view.createView(viewName); 71 | await view.renameView(viewName2); > 72 | await expect(view.navButtonViewMenuTitle).toHaveText(viewName); | ^ 73 | await view.deleteView(viewName2); 74 | }); 75 | at /home/runner/work/***-ui/***-ui/e2e-tests/tests/view.test.ts:72:47

Check failure on line 72 in e2e-tests/tests/view.test.ts

View workflow job for this annotation

GitHub Actions / test

tests/view.test.ts:64:3 › View › Clicking on 'Rename View' in the view menu should pop up an EditViewModal

2) tests/view.test.ts:64:3 › View › Clicking on 'Rename View' in the view menu should pop up an EditViewModal Retry #2 ─────────────────────────────────────────────────────────────────────────────────────── Error: Timed out 5000ms waiting for expect(received).toHaveText(expected) Expected string: "mass_coral_louse" Received string: "pure_jade_harrier" Call log: - expect.toHaveText with timeout 5000ms - waiting for locator('.view-menu-button .nav-button-title') - locator resolved to <div class="nav-button-title svelte-3t4lv">pure_jade_harrier</div> - unexpected value "pure_jade_harrier" - locator resolved to <div class="nav-button-title svelte-3t4lv">pure_jade_harrier</div> - unexpected value "pure_jade_harrier" - locator resolved to <div class="nav-button-title svelte-3t4lv">pure_jade_harrier</div> - unexpected value "pure_jade_harrier" - locator resolved to <div class="nav-button-title svelte-3t4lv">pure_jade_harrier</div> - unexpected value "pure_jade_harrier" - locator resolved to <div class="nav-button-title svelte-3t4lv">pure_jade_harrier</div> - unexpected value "pure_jade_harrier" - locator resolved to <div class="nav-button-title svelte-3t4lv">pure_jade_harrier</div> - unexpected value "pure_jade_harrier" - locator resolved to <div class="nav-button-title svelte-3t4lv">pure_jade_harrier</div> - unexpected value "pure_jade_harrier" - locator resolved to <div class="nav-button-title svelte-3t4lv">pure_jade_harrier</div> - unexpected value "pure_jade_harrier" - locator resolved to <div class="nav-button-title svelte-3t4lv">pure_jade_harrier</div> - unexpected value "pure_jade_harrier" 70 | await view.createView(viewName); 71 | await view.renameView(viewName2); > 72 | await expect(view.navButtonViewMenuTitle).toHaveText(viewName); | ^ 73 | await view.deleteView(viewName2); 74 | }); 75 | at /home/runner/work/***-ui/***-ui/e2e-tests/tests/view.test.ts:72:47
await view.deleteView(viewName2);
});

test(`Clicking on 'Save As' in the view menu should pop up a CreateViewModal`, async () => {
await view.openSaveAs();
await expect(page.locator('.modal .modal-header:has-text("Save new view")')).toBeVisible();
await page.locator('.modal .st-button:has-text("Cancel")').click();
});

test(`Selecting an invalid view file should display an error and prevent the file from being uploaded`, async () => {
await view.openViewMenu();
await expect(view.navButtonViewUploadViewMenuButton).toBeVisible();
await view.navButtonViewUploadViewMenuButton.click();
await view.fillViewInputName();
await view.fillViewInputFile(view.invalidViewFilePath);
await expect(page.locator('.modal-content .error')).toBeVisible();
await expect(page.locator('.modal .st-button:has-text("Upload View")')).toBeDisabled();
await expect(page.locator('.modal')).toBeVisible();
// Expect validation error collapse to be visible
await expect(page.locator('.modal-content .collapse')).toBeVisible();
await page.locator('.modal .st-button:has-text("Cancel")').click();
});

test(`Selecting an valid view file should not display an error and not prevent the file from being uploaded`, async () => {
await view.openViewMenu();
await expect(view.navButtonViewUploadViewMenuButton).toBeVisible();
await view.navButtonViewUploadViewMenuButton.click();
await view.fillViewInputName();
await view.fillViewInputFile();
await expect(page.locator('.modal-content .error')).not.toBeVisible();
await page.locator('.modal .st-button:has-text("Upload View")').click();
await expect(page.locator('.modal')).not.toBeVisible();
});
});

0 comments on commit 27e8d9b

Please sign in to comment.