graphdb-workbench-tests
Version:
Cypress tests for GraphDB workbench
182 lines (159 loc) • 9.54 kB
JavaScript
import {ModalDialogSteps} from "../../steps/modal-dialog-steps";
import HomeSteps from '../../steps/home-steps.js';
import {RepositoryErrorsWidgetSteps} from '../../steps/widgets/repository-errors-widget-steps.js';
import {RepositorySteps} from '../../steps/repository-steps.js';
import {RepositorySelectorSteps} from '../../steps/repository-selector-steps.js';
import {ErrorPageSteps} from '../../steps/error-page-steps.js';
import {MainMenuSteps} from '../../steps/main-menu-steps.js';
describe('URL with Repository ID parameter', () => {
let repositoryId;
let secondRepositoryId;
describe('When repository is changed', () => {
beforeEach(() => {
repositoryId = 'repository-in-url-' + Date.now();
cy.createRepository({id: repositoryId});
secondRepositoryId = 'second-repository-in-url-' + Date.now();
cy.createRepository({id: secondRepositoryId});
cy.presetRepository(repositoryId);
})
afterEach(() => {
cy.deleteRepository(repositoryId);
cy.deleteRepository(secondRepositoryId);
});
it('should update URL', () => {
RepositorySteps.visit();
RepositorySteps.getActiveRepositoryRow().should('contain', repositoryId);
RepositorySelectorSteps.getSelectedRepository().should('contain', repositoryId);
cy.url().should('include', 'repositoryId=' + repositoryId);
RepositorySelectorSteps.selectRepository(secondRepositoryId);
RepositorySteps.getActiveRepositoryRow().should('contain', secondRepositoryId);
RepositorySelectorSteps.getSelectedRepository().should('contain', secondRepositoryId);
cy.url().should('include', 'repositoryId=' + secondRepositoryId);
RepositorySteps.activateRepository(repositoryId);
RepositorySteps.getActiveRepositoryRow().should('contain', repositoryId);
RepositorySelectorSteps.getSelectedRepository().should('contain', repositoryId);
cy.url().should('include', 'repositoryId=' + repositoryId);
});
});
describe('When there is no active repository and no repository in URL', () => {
// 1. active repo no, repo in url no -> no action - just show repo selector
it('should show repository selector with no repository selected', () => {
HomeSteps.visit();
RepositoryErrorsWidgetSteps.getWidget().should('be.visible');
cy.url().should('not.include', 'repositoryId=');
HomeSteps.getSelectedRepository().should('contain', 'No accessible repositories');
// no modal dialog should be shown
ModalDialogSteps.getDialog().should('not.exist');
})
})
describe('When there is no active repository and repository in URL is present', () => {
beforeEach(() => {
repositoryId = 'repository-in-url-' + Date.now();
cy.createRepository({id: repositoryId});
})
afterEach(() => {
cy.deleteRepository(repositoryId);
});
// 2. active repo no, repo in url yes, url repo exists -> set active repo same as the url
it('should set active repository to the one in URL if it exists', () => {
HomeSteps.visitWithRepositoryInUrl(repositoryId);
RepositoryErrorsWidgetSteps.getWidget().should('not.exist');
cy.url().should('include', 'repositoryId=' + repositoryId);
HomeSteps.getSelectedRepository().should('contain', repositoryId);
});
// 3. active repo no, repo in url yes, url repo missing -> show warning, keep url
it('should show warning if repository in URL does not exist', () => {
HomeSteps.visitWithRepositoryInUrl('mising-repo');
RepositoryErrorsWidgetSteps.getWidget().should('be.visible');
HomeSteps.getSelectedRepository().should('contain', 'Choose repository');
ModalDialogSteps.getModalAlert().should('be.visible');
ModalDialogSteps.getDialogBody().should('contain', 'The repository "mising-repo" specified in the URL does not exist. Please select an existing repository.');
ModalDialogSteps.close();
cy.url().should('include', 'repositoryId=mising-repo');
});
});
describe('When there is an active repository and no repository in URL', () => {
beforeEach(() => {
repositoryId = 'repository-in-url-' + Date.now();
cy.createRepository({id: repositoryId});
cy.presetRepository(repositoryId);
})
afterEach(() => {
cy.deleteRepository(repositoryId);
cy.deleteRepository(secondRepositoryId);
});
// 4. active repo yes, repo in url no -> update url
it('should update URL to include active repository', () => {
HomeSteps.visit();
RepositoryErrorsWidgetSteps.getWidget().should('be.hidden');
cy.url().should('include', 'repositoryId=' + repositoryId);
HomeSteps.getSelectedRepository().should('contain', repositoryId);
});
// 5. active repo yes, repo in url yes, url repo exists -> show confirmation, update active repo on confirmation
it('should show confirmation and update active repository if repository in URL exists', () => {
secondRepositoryId = 'second-repository-in-url-' + Date.now();
cy.createRepository({id: secondRepositoryId});
HomeSteps.visitWithRepositoryInUrl(secondRepositoryId);
cy.url().should('include', 'repositoryId=' + secondRepositoryId);
HomeSteps.getSelectedRepository().should('contain', repositoryId);
HomeSteps.getView().should('be.visible');
HomeSteps.getActiveRepositoryWidget().should('be.visible');
RepositoryErrorsWidgetSteps.getWidget().should('be.hidden');
ModalDialogSteps.getDialog().should('be.visible');
ModalDialogSteps.getDialogBody().should('contain', `Active repository will be changed to "${secondRepositoryId}". Do you want to proceed?`);
ModalDialogSteps.confirm();
ModalDialogSteps.getDialog().should('not.exist');
HomeSteps.getSelectedRepository().should('contain', secondRepositoryId);
cy.url().should('include', 'repositoryId=' + secondRepositoryId);
});
// 5. active repo yes, repo in url yes, url repo exists -> show confirmation, keep active repo on reject
it('should show confirmation and keep active repository if repository in URL exists but user rejects', () => {
// active repo yes, repo in url yes, url repo exists -> show confirmation, update active repo
secondRepositoryId = 'second-repository-in-url-' + Date.now();
cy.createRepository({id: secondRepositoryId});
HomeSteps.visitWithRepositoryInUrl(secondRepositoryId);
cy.url().should('include', 'repositoryId=' + secondRepositoryId);
HomeSteps.getSelectedRepository().should('contain', repositoryId);
HomeSteps.getView().should('be.visible');
HomeSteps.getActiveRepositoryWidget().should('be.visible');
RepositoryErrorsWidgetSteps.getWidget().should('be.hidden');
ModalDialogSteps.getDialog().should('be.visible');
ModalDialogSteps.getDialogBody().should('contain', `Active repository will be changed to "${secondRepositoryId}". Do you want to proceed?`);
ModalDialogSteps.cancel();
ModalDialogSteps.getDialog().should('not.exist');
HomeSteps.getSelectedRepository().should('contain', repositoryId);
cy.url().should('include', 'repositoryId=' + repositoryId);
});
// 6. active repo yes, repo in url yes, url repo missing-> show warning, keep the active repo
it('should show warning if repository in URL does not exist and keep active repository', () => {
HomeSteps.visitWithRepositoryInUrl('mising-repo');
cy.url().should('include', 'repositoryId=mising-repo');
ModalDialogSteps.getModalAlert().should('be.visible');
ModalDialogSteps.clickOKButton();
ModalDialogSteps.getModalAlert().should('not.exist');
HomeSteps.getSelectedRepository().should('contain', repositoryId);
cy.url().should('include', 'repositoryId=' + repositoryId);
});
});
describe('When navigating between legacy and new workbench', () => {
beforeEach(() => {
repositoryId = 'repository-in-url-' + Date.now();
cy.createRepository({id: repositoryId});
cy.initializeRepository(repositoryId);
cy.presetRepository(repositoryId);
})
afterEach(() => {
cy.deleteRepository(repositoryId);
});
it('should preserve repositoryId parameter when navigating from 404 (new workbench) to legacy page', () => {
// Given I am on the 404 page which is in the new workbench
ErrorPageSteps.visit404();
ErrorPageSteps.get404Page().should('be.visible');
cy.url().should('include', `repositoryId=${repositoryId}`);
// When I navigate to some legacy page
MainMenuSteps.clickOnSparqlMenu();
// Then repositoryId parameter should be preserved in the URL
cy.url().should('include', `repositoryId=${repositoryId}`);
});
});
});