mirror of
https://github.com/zitadel/zitadel.git
synced 2025-01-10 06:43:40 +00:00
fc99ec87c5
* 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 254b5a1f87be71c64c1289b12fc1bf23a401ea64. * 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>
86 lines
2.9 KiB
TypeScript
86 lines
2.9 KiB
TypeScript
import { apiCallProperties } from "./apiauth"
|
|
|
|
export function ensureSomethingExists(api: apiCallProperties, searchPath: string, find: (entity: any) => boolean, createPath: string, body: any): Cypress.Chainable<number> {
|
|
|
|
return searchSomething(api, searchPath, find).then(sRes => {
|
|
if (sRes.entity) {
|
|
return cy.wrap({
|
|
id: sRes.entity.id,
|
|
initialSequence: 0
|
|
})
|
|
}
|
|
return cy.request({
|
|
method: 'POST',
|
|
url: `${api.mgntBaseURL}${createPath}`,
|
|
headers: {
|
|
Authorization: api.authHeader
|
|
},
|
|
body: body,
|
|
failOnStatusCode: false,
|
|
followRedirect: false,
|
|
}).then(cRes => {
|
|
expect(cRes.status).to.equal(200)
|
|
return {
|
|
id: cRes.body.id,
|
|
initialSequence: sRes.sequence
|
|
}
|
|
})
|
|
}).then((data) => {
|
|
awaitDesired(30, (entity) => !!entity, data.initialSequence, api, searchPath, find)
|
|
return cy.wrap<number>(data.id)
|
|
})
|
|
}
|
|
|
|
export function ensureSomethingDoesntExist(api: apiCallProperties, searchPath: string, find: (entity: any) => boolean, deletePath: (entity: any) => string): Cypress.Chainable<null> {
|
|
|
|
return searchSomething(api, searchPath, find).then(sRes => {
|
|
if (!sRes.entity) {
|
|
return cy.wrap(0)
|
|
}
|
|
return cy.request({
|
|
method: 'DELETE',
|
|
url: `${api.mgntBaseURL}${deletePath(sRes.entity)}`,
|
|
headers: {
|
|
Authorization: api.authHeader
|
|
},
|
|
failOnStatusCode: false
|
|
}).then((dRes) => {
|
|
expect(dRes.status).to.equal(200)
|
|
return sRes.sequence
|
|
})
|
|
}).then((initialSequence) => {
|
|
awaitDesired(30, (entity) => !entity , initialSequence, api, searchPath, find)
|
|
return null
|
|
})
|
|
}
|
|
|
|
type SearchResult = {
|
|
entity: any
|
|
sequence: number
|
|
}
|
|
|
|
function searchSomething(api: apiCallProperties, searchPath: string, find: (entity: any) => boolean): Cypress.Chainable<SearchResult> {
|
|
|
|
return cy.request({
|
|
method: 'POST',
|
|
url: `${api.mgntBaseURL}${searchPath}`,
|
|
headers: {
|
|
Authorization: api.authHeader
|
|
},
|
|
}).then(res => {
|
|
return {
|
|
entity: res.body.result?.find(find) || null,
|
|
sequence: res.body.details.processedSequence
|
|
}
|
|
})
|
|
}
|
|
|
|
function awaitDesired(trials: number, expectEntity: (entity: any) => boolean, initialSequence: number, api: apiCallProperties, searchPath: string, find: (entity: any) => boolean) {
|
|
searchSomething(api, searchPath, find).then(resp => {
|
|
if (!expectEntity(resp.entity) || resp.sequence <= initialSequence) {
|
|
expect(trials, `trying ${trials} more times`).to.be.greaterThan(0);
|
|
cy.wait(1000)
|
|
awaitDesired(trials - 1, expectEntity, initialSequence, api, searchPath, find)
|
|
}
|
|
})
|
|
} |