Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions frontendtests/codecept.conf.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ export const config: CodeceptJS.MainConfig = {
include: {
filters: "./helpers/filters",
ortePage: "./pages/OrtePage",
konzertPage: "./pages/KonzertPage",
konzertGaestePage: "./pages/KonzertGaestePage",
},
bootstrap: async () => {
new SqliteHelper(config).createData("userstore", "admin");
Expand Down
27 changes: 27 additions & 0 deletions frontendtests/data/veranstaltungenstore/Replacervorlage.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"startDate": "2020-03-20T17:30:00.000Z",
"endDate": "2020-03-20T19:00:00.000Z",
"id": "[title]",
"url": "[title]",
"kopf": {
"titel": "[title]",
"beschreibung": "",
"eventTyp": "Club Konzert",
"flaeche": 100,
"kooperation": "",
"ort": "Jazzclub",
"pressename": "Jazzclub Karlsruhe",
"presseIn": "im Jazzclub Karlsruhe",
"genre": "",
"confirmed": false,
"rechnungAnKooperation": false,
"abgesagt": false,
"fotografBestellen": false,
"kannAufHomePage": false,
"kannInSocialMedia": false
},
"artist": {},
"presse": {},
"technik": {},
"unterkunft": {}
}
20 changes: 20 additions & 0 deletions frontendtests/helpers/SqliteHelper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,26 @@ class SqliteHelper extends Helper {
});
}

createDataWithReplacer(
collectionName: string,
filename: string,
replacer: Map<string, string>,
) {
doInSqlite((db) => {
let json = fs.readFileSync(
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Keine let variablen bitte

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ich brauche aber eine Variable die geändert werden kann für die replacer.

`${__dirname}/../data/${collectionName}/${filename}.json`,
"utf8",
);

replacer.forEach((value, key) => {
json = json.replaceAll("[" + key + "]", value);
});

const object = JSON.parse(json);
this.storeInCollection(db, collectionName, object);
});
}

createObject(collectionName, object) {
doInSqlite((db) => {
this.storeInCollection(db, collectionName, object);
Expand Down
63 changes: 63 additions & 0 deletions frontendtests/pages/KonzertGaestePage.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
const { I } = inject();

const buttons = {
addInTable: '(//button[@data-testid="add-in-table"])',
speichern: "Speichern",
};

export async function goToGaestePage() {
I.click(locate('div[role="tab"]').withText("Gäste am Abend"));

I.waitForText("Gästeliste");
}

export async function addGaesteListe(guest: {
name: string;
comment: string;
number: number;
alreadyIn: number;
}) {
I.click(buttons.addInTable);
I.click('[data-testid="name0"]');
I.fillField("#name", guest.name);
I.pressKey("Tab");
I.fillField("#comment", guest.comment);
I.pressKey("Tab");
I.fillField("#number", guest.number);

I.click(buttons.speichern);
}

export async function setAlreadyIn(row: number, value: number) {
I.click('[data-testid="alreadyIn' + row + '"]');
I.fillField("#alreadyIn", value);

// I.wait(5);

I.pressKey("Tab");

// I.wait(5);

I.click(buttons.speichern);
}

export async function verifyGuestInStore(
title: string,
guest: {
name: string;
comment: string;
number: number;
alreadyIn: number;
},
index: number = 0,
) {
const res = await I.loadObjectInCollection("veranstaltungenstore", title);

I.assertDeepEqual(res.gaesteliste[index], {
name: guest.name,
comment: guest.comment,
number: guest.number,
alreadyIn: guest.alreadyIn,
key: "row" + index,
});
}
21 changes: 21 additions & 0 deletions frontendtests/pages/KonzertPage.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
const { I } = inject();

export async function createExampleKonzert(title: string) {
I.createData("optionenstore", "optionen");
I.createData("optionenstore", "orte");

const replacer = new Map<string, string>();
replacer.set("title", title);

I.createDataWithReplacer("veranstaltungenstore", "Replacervorlage", replacer);
}

export async function goToEditKonzert(konzertTitle: string) {
I.amOnPage("/vue/veranstaltungen");
I.waitForText(konzertTitle);

I.click(locate("span.ant-collapse-header-text").withText(konzertTitle));

I.click(".bi-keyboard");
I.waitForText("Allgemein");
}
4 changes: 4 additions & 0 deletions frontendtests/steps.d.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
/// <reference types='codeceptjs' />
type filters = typeof import("./helpers/filters");
type ortePage = typeof import("./pages/OrtePage");
type konzertPage = typeof import("./pages/KonzertPage");
type konzertGaestePage = typeof import("./pages/KonzertGaestePage");
type SqliteHelper = import("./helpers/SqliteHelper");
type ChaiWrapper = import("codeceptjs-chai");

Expand All @@ -11,6 +13,8 @@ declare namespace CodeceptJS {
login: any;
filters: filters;
ortePage: ortePage;
konzertPage: konzertPage;
konzertGaestePage: konzertGaestePage;
}
interface Methods extends Playwright, SqliteHelper, ChaiWrapper {}
interface I extends WithTranslation<Methods> {}
Expand Down
34 changes: 34 additions & 0 deletions frontendtests/tests/05_konzert_gaeste_test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
Feature("Konzert Gäste");

Before(({ login }) => {
login("admin");
});

Scenario(
"Erstelle Gast in Gästeliste und setze alreadyIn",
async ({ konzertPage, konzertGaestePage }) => {
const konzertTitle = "GaesteBeispiel";
await konzertPage.createExampleKonzert(konzertTitle);

await konzertPage.goToEditKonzert(konzertTitle);
await konzertGaestePage.goToGaestePage();

const guest = {
name: "Stefan Rinderle",
comment: "Kommt später",
number: 2,
alreadyIn: 0,
};

await konzertGaestePage.addGaesteListe(guest);

await konzertGaestePage.verifyGuestInStore(konzertTitle, guest);

await konzertGaestePage.setAlreadyIn(0, 1);

await konzertGaestePage.verifyGuestInStore(konzertTitle, {
...guest,
alreadyIn: 1,
});
},
);