mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-13 16:07:46 +00:00
ci(e2e): Run Tests in Pipelines (#3903)
* cy10 changes
* test: setup local e2e env
* test(e2e): migrate e2e setup
* add more config
* make e2e setup work
* align variables
* fix config
* skip mfa
* set user register to false
* read ids from database if not provided
* don't read ids withing env file
* fix escaping in id queries
* fix project root
* export projectRoot path
* export projectRoot
* add e2e-setup.sh
* specify GOOS and GOARCH for dockerfile compatible binary
* add org default redirect uri
* correctly initialize org policy
* await ids
* fix awaiting ids
* fix cypress configuration
* fix some tests
* initial compose setup
* fix working directory
* fix references
* make tests less flaky
* run go tests
* compose works until e2e-setup incl
* pass created e2e sa key
* make cypress run
* derive e2e orgs domain from baseurl
* use host from baseurl for setup ctx
* move defaults.yaml back to cmd pkg
* just create org owner
* Don't render element if no roles are passed
* use map instead of switchMap
* fix e2e tests
* added testdata for e3e
* zipped dump
* removed dumpDir
* cypress workflow with compose
* quote name
* cleanup vars
* eliminate need for e2e setup
* compose has no builds anymore
* use compose run and zitadel nw
* test e2e on pr (#4114)
* test e2e on pr
* install goreleaser
* install npm dev dependencies
* run cypress wf
* dynamic release version
* skip flaky user tests
* skip flaky permissions test
* cache docker layers in pipeline
* Update .github/workflows/cypress.yml
Co-authored-by: Florian Forster <florian@caos.ch>
* align goreleaser version
* get rid of install.sh
* remove cypress-terminal-report
* Revert "remove cypress-terminal-report"
This reverts commit 254b5a1f87
.
* just one npm e2e:build command
* cache npm dependencies
* install node modules using docker
* dedicated e2e context
* fix syntax
* don't copy node modules from goreleaser
* add npm-copy target
* add tsconfig.json
* remove docker caching
* deleted unneeded shellscript
* naming and cleanup
Co-authored-by: Florian Forster <florian@caos.ch>
Co-authored-by: Christian Jakob <christian@caos.ch>
* cleanup
Co-authored-by: Elio Bischof <eliobischof@gmail.com>
Co-authored-by: Christian Jakob <christian@caos.ch>
Co-authored-by: Florian Forster <florian@caos.ch>
This commit is contained in:
42
e2e/cypress/e2e/applications/applications.cy.ts
Normal file
42
e2e/cypress/e2e/applications/applications.cy.ts
Normal file
@@ -0,0 +1,42 @@
|
||||
import { Apps, ensureProjectExists, ensureProjectResourceDoesntExist } from "../../support/api/projects";
|
||||
import { apiAuth } from "../../support/api/apiauth";
|
||||
|
||||
describe('applications', () => {
|
||||
|
||||
const testProjectName = 'e2eprojectapplication'
|
||||
const testAppName = 'e2eappundertest'
|
||||
|
||||
beforeEach(`ensure it doesn't exist already`, () => {
|
||||
apiAuth().then(api => {
|
||||
ensureProjectExists(api, testProjectName).then(projectID => {
|
||||
ensureProjectResourceDoesntExist(api, projectID, Apps, testAppName).then(() => {
|
||||
cy.visit(`/ui/console/projects/${projectID}`)
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
it('add app', () => {
|
||||
cy.get('mat-spinner')
|
||||
cy.get('mat-spinner').should('not.exist')
|
||||
cy.get('[data-e2e="app-card-add"]').should('be.visible').click()
|
||||
// select webapp
|
||||
cy.get('[formcontrolname="name"]').type(testAppName)
|
||||
cy.get('[for="WEB"]').click()
|
||||
cy.get('[data-e2e="continue-button-nameandtype"]').click()
|
||||
//select authentication
|
||||
cy.get('[for="PKCE"]').click()
|
||||
cy.get('[data-e2e="continue-button-authmethod"]').click()
|
||||
//enter URL
|
||||
cy.get('cnsl-redirect-uris').eq(0).type("https://testurl.org")
|
||||
cy.get('cnsl-redirect-uris').eq(1).type("https://testlogouturl.org")
|
||||
cy.get('[data-e2e="continue-button-redirecturis"]').click()
|
||||
cy.get('[data-e2e="create-button"]').click().then(() => {
|
||||
cy.get('[id*=overlay]').should('exist')
|
||||
})
|
||||
cy.get('.data-e2e-success')
|
||||
cy.wait(200)
|
||||
cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist')
|
||||
//TODO: check client ID/Secret
|
||||
})
|
||||
})
|
57
e2e/cypress/e2e/humans/humans.cy.ts
Normal file
57
e2e/cypress/e2e/humans/humans.cy.ts
Normal file
@@ -0,0 +1,57 @@
|
||||
import { apiAuth } from '../../support/api/apiauth';
|
||||
import { ensureHumanUserExists, ensureUserDoesntExist } from '../../support/api/users';
|
||||
import { loginname } from '../../support/login/users';
|
||||
|
||||
describe.skip('humans', () => {
|
||||
const humansPath = `/ui/console/users?type=human`;
|
||||
const testHumanUserNameAdd = 'e2ehumanusernameadd';
|
||||
const testHumanUserNameRemove = 'e2ehumanusernameremove';
|
||||
|
||||
describe('add', () => {
|
||||
before(`ensure it doesn't exist already`, () => {
|
||||
apiAuth().then((apiCallProperties) => {
|
||||
ensureUserDoesntExist(apiCallProperties, testHumanUserNameAdd).then(()=>{
|
||||
cy.visit(humansPath);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should add a user', () => {
|
||||
cy.get('[data-e2e="action-key-add"]').parents('[data-e2e="create-user-button"]').click();
|
||||
cy.url().should('contain', 'users/create');
|
||||
cy.get('[formcontrolname="email"]').type(loginname('e2ehuman'));
|
||||
//force needed due to the prefilled username prefix
|
||||
cy.get('[formcontrolname="userName"]').type(testHumanUserNameAdd, { force: true });
|
||||
cy.get('[formcontrolname="firstName"]').type('e2ehumanfirstname');
|
||||
cy.get('[formcontrolname="lastName"]').type('e2ehumanlastname');
|
||||
cy.get('[formcontrolname="phone"]').type('+41 123456789');
|
||||
cy.get('[data-e2e="create-button"]').click();
|
||||
cy.get('.data-e2e-success');
|
||||
cy.wait(200);
|
||||
cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist');
|
||||
});
|
||||
});
|
||||
|
||||
describe('remove', () => {
|
||||
before('ensure it exists', () => {
|
||||
apiAuth().then((api) => {
|
||||
ensureHumanUserExists(api, testHumanUserNameRemove).then(()=>{
|
||||
cy.visit(humansPath);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should delete a human user', () => {
|
||||
cy.contains('tr', testHumanUserNameRemove)
|
||||
// doesn't work, need to force click.
|
||||
// .trigger('mouseover')
|
||||
.find('[e2e-data="enabled-delete-button"]')
|
||||
.click({force: true});
|
||||
cy.get('[e2e-data="confirm-dialog-input"]').click().type(loginname(testHumanUserNameRemove, Cypress.env('org')));
|
||||
cy.get('[e2e-data="confirm-dialog-button"]').click();
|
||||
cy.get('.data-e2e-success');
|
||||
cy.wait(200);
|
||||
cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist');
|
||||
});
|
||||
});
|
||||
});
|
55
e2e/cypress/e2e/machines/machines.cy.ts
Normal file
55
e2e/cypress/e2e/machines/machines.cy.ts
Normal file
@@ -0,0 +1,55 @@
|
||||
import { apiAuth } from '../../support/api/apiauth';
|
||||
import { ensureMachineUserExists, ensureUserDoesntExist } from '../../support/api/users';
|
||||
import { loginname } from '../../support/login/users';
|
||||
|
||||
describe.skip('machines', () => {
|
||||
const machinesPath = `/ui/console/users?type=machine`;
|
||||
const testMachineUserNameAdd = 'e2emachineusernameadd';
|
||||
const testMachineUserNameRemove = 'e2emachineusernameremove';
|
||||
|
||||
describe('add', () => {
|
||||
before(`ensure it doesn't exist already`, () => {
|
||||
apiAuth().then((apiCallProperties) => {
|
||||
ensureUserDoesntExist(apiCallProperties, testMachineUserNameAdd).then(()=>{
|
||||
cy.visit(machinesPath);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should add a machine', () => {
|
||||
cy.get('[data-e2e="action-key-add"]').parents('[data-e2e="create-user-button"]').click();
|
||||
cy.url().should('contain', 'users/create-machine');
|
||||
//force needed due to the prefilled username prefix
|
||||
cy.get('[formcontrolname="userName"]').type(testMachineUserNameAdd, { force: true });
|
||||
cy.get('[formcontrolname="name"]').type('e2emachinename');
|
||||
cy.get('[formcontrolname="description"]').type('e2emachinedescription');
|
||||
cy.get('[data-e2e="create-button"]').click();
|
||||
cy.get('.data-e2e-success');
|
||||
cy.wait(200);
|
||||
cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist');
|
||||
});
|
||||
});
|
||||
|
||||
describe('remove', () => {
|
||||
before('ensure it exists', () => {
|
||||
apiAuth().then((api) => {
|
||||
ensureMachineUserExists(api, testMachineUserNameRemove).then(()=>{
|
||||
cy.visit(machinesPath);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should delete a machine', () => {
|
||||
cy.contains('tr', testMachineUserNameRemove, { timeout: 1000 })
|
||||
// doesn't work, need to force click.
|
||||
// .trigger('mouseover')
|
||||
.find('[e2e-data="enabled-delete-button"]')
|
||||
.click({force: true});
|
||||
cy.get('[e2e-data="confirm-dialog-input"]').click().type(loginname(testMachineUserNameRemove, Cypress.env('org')));
|
||||
cy.get('[e2e-data="confirm-dialog-button"]').click();
|
||||
cy.get('.data-e2e-success');
|
||||
cy.wait(200);
|
||||
cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist');
|
||||
});
|
||||
});
|
||||
});
|
111
e2e/cypress/e2e/permissions/permissions.cy.ts
Normal file
111
e2e/cypress/e2e/permissions/permissions.cy.ts
Normal file
@@ -0,0 +1,111 @@
|
||||
import { apiAuth } from "../../support/api/apiauth";
|
||||
import { ensureProjectExists, ensureProjectResourceDoesntExist, Roles } from "../../support/api/projects";
|
||||
|
||||
describe.skip('permissions', () => {
|
||||
|
||||
const testProjectName = 'e2eprojectpermission'
|
||||
const testAppName = 'e2eapppermission'
|
||||
const testRoleName = 'e2eroleundertestname'
|
||||
const testRoleDisplay = 'e2eroleundertestdisplay'
|
||||
const testRoleGroup = 'e2eroleundertestgroup'
|
||||
const testGrantName = 'e2egrantundertest'
|
||||
|
||||
var projectId: number
|
||||
|
||||
beforeEach(() => {
|
||||
apiAuth().then(apiCalls => {
|
||||
ensureProjectExists(apiCalls, testProjectName).then(projId => {
|
||||
projectId = projId
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('add role', () => {
|
||||
beforeEach(()=> {
|
||||
apiAuth().then((api)=> {
|
||||
ensureProjectResourceDoesntExist(api, projectId, Roles, testRoleName)
|
||||
cy.visit(`/ui/console/projects/${projectId}?id=roles`)
|
||||
})
|
||||
})
|
||||
|
||||
it('should add a role', () => {
|
||||
cy.get('[data-e2e="add-new-role"]').click()
|
||||
cy.get('[formcontrolname="key"]').type(testRoleName)
|
||||
cy.get('[formcontrolname="displayName"]').type(testRoleDisplay)
|
||||
cy.get('[formcontrolname="group"]').type(testRoleGroup)
|
||||
cy.get('[data-e2e="save-button"]').click()
|
||||
cy.get('.data-e2e-success')
|
||||
cy.wait(200)
|
||||
cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist')
|
||||
})
|
||||
})
|
||||
})
|
||||
/*
|
||||
|
||||
describe('permissions', () => {
|
||||
|
||||
before(()=> {
|
||||
// cy.consolelogin(Cypress.env('username'), Cypress.env('password'), Cypress.config('baseUrl')/ui/console)
|
||||
})
|
||||
|
||||
it('should show projects ', () => {
|
||||
cy.visit(Cypress.config('baseUrl')/ui/console + '/projects')
|
||||
cy.url().should('contain', '/projects')
|
||||
})
|
||||
|
||||
it('should add a role', () => {
|
||||
cy.visit(Cypress.config('baseUrl')/ui/console + '/org').then(() => {
|
||||
cy.url().should('contain', '/org');
|
||||
})
|
||||
cy.visit(Cypress.config('baseUrl')/ui/console + '/projects').then(() => {
|
||||
cy.url().should('contain', '/projects');
|
||||
cy.get('.card').should('contain.text', "newProjectToTest")
|
||||
})
|
||||
cy.get('.card').filter(':contains("newProjectToTest")').click()
|
||||
cy.get('.app-container').filter(':contains("newAppToTest")').should('be.visible').click()
|
||||
let projectID
|
||||
cy.url().then(url => {
|
||||
cy.log(url.split('/')[4])
|
||||
projectID = url.split('/')[4]
|
||||
});
|
||||
|
||||
cy.then(() => cy.visit(Cypress.config('baseUrl')/ui/console + '/projects/' + projectID +'/roles/create'))
|
||||
cy.get('[formcontrolname^=key]').type("newdemorole")
|
||||
cy.get('[formcontrolname^=displayName]').type("newdemodisplayname")
|
||||
cy.get('[formcontrolname^=group]').type("newdemogroupname")
|
||||
cy.get('button').filter(':contains("Save")').should('be.visible').click()
|
||||
//let the Role get processed
|
||||
cy.wait(5000)
|
||||
})
|
||||
|
||||
it('should add a grant', () => {
|
||||
cy.visit(Cypress.config('baseUrl')/ui/console + '/org').then(() => {
|
||||
cy.url().should('contain', '/org');
|
||||
})
|
||||
cy.visit(Cypress.config('baseUrl')/ui/console + '/projects').then(() => {
|
||||
cy.url().should('contain', '/projects');
|
||||
cy.get('.card').should('contain.text', "newProjectToTest")
|
||||
})
|
||||
cy.get('.card').filter(':contains("newProjectToTest")').click()
|
||||
cy.get('.app-container').filter(':contains("newAppToTest")').should('be.visible').click()
|
||||
let projectID
|
||||
cy.url().then(url => {
|
||||
cy.log(url.split('/')[4])
|
||||
projectID = url.split('/')[4]
|
||||
});
|
||||
|
||||
cy.then(() => cy.visit(Cypress.config('baseUrl')/ui/console + '/grant-create/project/' + projectID ))
|
||||
cy.get('input').type("demo")
|
||||
cy.get('[role^=listbox]').filter(`:contains("${Cypress.env("fullUserName")}")`).should('be.visible').click()
|
||||
cy.wait(5000)
|
||||
//cy.get('.button').contains('Continue').click()
|
||||
cy.get('button').filter(':contains("Continue")').click()
|
||||
cy.wait(5000)
|
||||
cy.get('tr').filter(':contains("demo")').find('label').click()
|
||||
cy.get('button').filter(':contains("Save")').should('be.visible').click()
|
||||
//let the grant get processed
|
||||
cy.wait(5000)
|
||||
})
|
||||
})
|
||||
|
||||
*/
|
71
e2e/cypress/e2e/projects/projects.cy.ts
Normal file
71
e2e/cypress/e2e/projects/projects.cy.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
import { apiAuth } from '../../support/api/apiauth';
|
||||
import { ensureProjectDoesntExist, ensureProjectExists } from '../../support/api/projects';
|
||||
|
||||
describe('projects', () => {
|
||||
const testProjectNameCreate = 'e2eprojectcreate';
|
||||
const testProjectNameDeleteList = 'e2eprojectdeletelist';
|
||||
const testProjectNameDeleteGrid = 'e2eprojectdeletegrid';
|
||||
|
||||
describe('add project', () => {
|
||||
beforeEach(`ensure it doesn't exist already`, () => {
|
||||
apiAuth().then((api) => {
|
||||
ensureProjectDoesntExist(api, testProjectNameCreate);
|
||||
});
|
||||
cy.visit(`/ui/console/projects`);
|
||||
});
|
||||
|
||||
it('should add a project', () => {
|
||||
cy.get('.add-project-button').click({ force: true });
|
||||
cy.get('input').type(testProjectNameCreate);
|
||||
cy.get('[data-e2e="continue-button"]').click();
|
||||
cy.get('.data-e2e-success');
|
||||
cy.wait(200);
|
||||
cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist');
|
||||
});
|
||||
});
|
||||
|
||||
describe('remove project', () => {
|
||||
describe('list view', () => {
|
||||
beforeEach('ensure it exists', () => {
|
||||
apiAuth().then((api) => {
|
||||
ensureProjectExists(api, testProjectNameDeleteList);
|
||||
});
|
||||
cy.visit(`/ui/console/projects`);
|
||||
});
|
||||
|
||||
it('removes the project', () => {
|
||||
cy.get('[data-e2e=toggle-grid]').click();
|
||||
cy.get('[data-e2e=timestamp]');
|
||||
cy.contains('tr', testProjectNameDeleteList, { timeout: 1000 })
|
||||
.find('[data-e2e=delete-project-button]')
|
||||
.click({force: true});
|
||||
cy.get('[e2e-data="confirm-dialog-input"]').type(testProjectNameDeleteList);
|
||||
cy.get('[e2e-data="confirm-dialog-button"]').click();
|
||||
cy.get('.data-e2e-success');
|
||||
cy.wait(200);
|
||||
cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist');
|
||||
});
|
||||
});
|
||||
|
||||
describe('grid view', () => {
|
||||
beforeEach('ensure it exists', () => {
|
||||
apiAuth().then((api) => {
|
||||
ensureProjectExists(api, testProjectNameDeleteGrid);
|
||||
});
|
||||
cy.visit(`/ui/console/projects`);
|
||||
});
|
||||
|
||||
it('removes the project', () => {
|
||||
cy.contains('[data-e2e=grid-card]', testProjectNameDeleteGrid)
|
||||
.find('[data-e2e=delete-project-button]')
|
||||
.trigger('mouseover')
|
||||
.click();
|
||||
cy.get('[e2e-data="confirm-dialog-input"]').type(testProjectNameDeleteGrid);
|
||||
cy.get('[e2e-data="confirm-dialog-button"]').click();
|
||||
cy.get('.data-e2e-success');
|
||||
cy.wait(200);
|
||||
cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
0
e2e/cypress/e2e/register/register.cy.ts
Normal file
0
e2e/cypress/e2e/register/register.cy.ts
Normal file
45
e2e/cypress/e2e/settings/login-policy.cy.ts
Normal file
45
e2e/cypress/e2e/settings/login-policy.cy.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import { apiAuth } from "../../support/api/apiauth";
|
||||
import { ensureHumanUserExists } from "../../support/api/users";
|
||||
import { login, User } from "../../support/login/users";
|
||||
|
||||
describe("login policy", ()=> {
|
||||
|
||||
const orgPath = `/ui/console/org`
|
||||
|
||||
;[User.OrgOwner].forEach(user => {
|
||||
|
||||
describe(`as user "${user}"`, () => {
|
||||
|
||||
beforeEach(()=> {
|
||||
login(user)
|
||||
cy.visit(orgPath)
|
||||
// TODO: Why force?
|
||||
cy.contains('[data-e2e=policy-card]', 'Login Policy').contains('button', 'Modify').click({force: true}) // TODO: select data-e2e
|
||||
apiAuth().then(api => {
|
||||
ensureHumanUserExists(api, User.LoginPolicyUser)
|
||||
})
|
||||
})
|
||||
|
||||
// TODO: verify email
|
||||
|
||||
it.skip(`username and password disallowed`, () => {
|
||||
login(User.LoginPolicyUser, "123abcABC?&*")
|
||||
})
|
||||
it(`registering is allowed`)
|
||||
it(`registering is disallowed`)
|
||||
it(`login by an external IDP is allowed`)
|
||||
it(`login by an external IDP is disallowed`)
|
||||
it(`MFA is forced`)
|
||||
it(`MFA is not forced`)
|
||||
it(`the password reset option is hidden`)
|
||||
it(`the password reset option is shown`)
|
||||
it(`passwordless login is allowed`)
|
||||
it(`passwordless login is disallowed`)
|
||||
describe('identity providers', () => {
|
||||
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
|
34
e2e/cypress/e2e/settings/password-complexity.cy.ts
Normal file
34
e2e/cypress/e2e/settings/password-complexity.cy.ts
Normal file
@@ -0,0 +1,34 @@
|
||||
import { login, User } from "../../support/login/users";
|
||||
|
||||
describe("password complexity", ()=> {
|
||||
|
||||
const orgPath = `/ui/console/org`
|
||||
const testProjectName = 'e2eproject'
|
||||
|
||||
;[User.OrgOwner].forEach(user => {
|
||||
|
||||
describe(`as user "${user}"`, () => {
|
||||
|
||||
beforeEach(()=> {
|
||||
login(user)
|
||||
cy.visit(orgPath)
|
||||
// TODO: Why force?
|
||||
cy.contains('[data-e2e=policy-card]', 'Password Complexity').contains('button', 'Modify').click({force: true}) // TODO: select data-e2e
|
||||
})
|
||||
|
||||
// TODO: fix saving password complexity policy bug
|
||||
|
||||
it(`should restrict passwords that don't have the minimal length`)
|
||||
it(`should require passwords to contain a number if option is switched on`)
|
||||
it(`should not require passwords to contain a number if option is switched off`)
|
||||
it(`should require passwords to contain a symbol if option is switched on`)
|
||||
it(`should not require passwords to contain a symbol if option is switched off`)
|
||||
it(`should require passwords to contain a lowercase letter if option is switched on`)
|
||||
it(`should not require passwords to contain a lowercase letter if option is switched off`)
|
||||
it(`should require passwords to contain an uppercase letter if option is switched on`)
|
||||
it(`should not require passwords to contain an uppercase letter if option is switched off`)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
|
79
e2e/cypress/e2e/settings/private-labeling.cy.ts
Normal file
79
e2e/cypress/e2e/settings/private-labeling.cy.ts
Normal file
@@ -0,0 +1,79 @@
|
||||
import { apiAuth, apiCallProperties } from '../../support/api/apiauth';
|
||||
import { Policy, resetPolicy } from '../../support/api/policies';
|
||||
import { login, User } from '../../support/login/users';
|
||||
|
||||
describe('private labeling', () => {
|
||||
const orgPath = `/ui/console/org`;
|
||||
|
||||
[User.OrgOwner].forEach((user) => {
|
||||
describe(`as user "${user}"`, () => {
|
||||
let api: apiCallProperties;
|
||||
|
||||
beforeEach(() => {
|
||||
login(user);
|
||||
cy.visit(orgPath);
|
||||
// TODO: Why force?
|
||||
cy.contains('[data-e2e=policy-card]', 'Private Labeling').contains('button', 'Modify').click({ force: true }); // TODO: select data-e2e
|
||||
});
|
||||
|
||||
customize('white', user);
|
||||
customize('dark', user);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function customize(theme: string, user: User) {
|
||||
describe(`${theme} theme`, () => {
|
||||
beforeEach(() => {
|
||||
apiAuth().then((api) => {
|
||||
resetPolicy(api, Policy.Label);
|
||||
});
|
||||
});
|
||||
|
||||
describe.skip('logo', () => {
|
||||
beforeEach('expand logo category', () => {
|
||||
cy.contains('[data-e2e=policy-category]', 'Logo').click(); // TODO: select data-e2e
|
||||
cy.fixture('logo.png').as('logo');
|
||||
});
|
||||
|
||||
it('should update a logo', () => {
|
||||
cy.get('[data-e2e=image-part-logo]')
|
||||
.find('input')
|
||||
.then(function (el) {
|
||||
const blob = Cypress.Blob.base64StringToBlob(this.logo, 'image/png');
|
||||
const file = new File([blob], 'images/logo.png', { type: 'image/png' });
|
||||
const list = new DataTransfer();
|
||||
|
||||
list.items.add(file);
|
||||
const myFileList = list.files;
|
||||
|
||||
el[0].files = myFileList;
|
||||
el[0].dispatchEvent(new Event('change', { bubbles: true }));
|
||||
});
|
||||
});
|
||||
it('should delete a logo');
|
||||
});
|
||||
it('should update an icon');
|
||||
it('should delete an icon');
|
||||
it.skip('should update the background color', () => {
|
||||
cy.contains('[data-e2e=color]', 'Background Color').find('button').click(); // TODO: select data-e2e
|
||||
cy.get('color-editable-input').find('input').clear().type('#ae44dc');
|
||||
cy.get('[data-e2e=save-colors-button]').click();
|
||||
cy.get('[data-e2e=header-user-avatar]').click();
|
||||
cy.contains('Logout All Users').click(); // TODO: select data-e2e
|
||||
login(User.LoginPolicyUser, undefined, true, null, () => {
|
||||
cy.pause();
|
||||
});
|
||||
});
|
||||
it('should update the primary color');
|
||||
it('should update the warning color');
|
||||
it('should update the font color');
|
||||
it('should update the font style');
|
||||
it('should hide the loginname suffix');
|
||||
it('should show the loginname suffix');
|
||||
it('should hide the watermark');
|
||||
it('should show the watermark');
|
||||
it('should show the current configuration');
|
||||
it('should reset the policy');
|
||||
});
|
||||
}
|
Reference in New Issue
Block a user