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
152 changes: 143 additions & 9 deletions frontendtests/pages/KonzertGaestePage.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,21 @@
const { I } = inject();

const guestTabIdentifier = "Gästeliste";
const reservationTabIdentifier = "Reservierungen";

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

export async function goToGaestePage() {
async function executeActionInTab(tabIdentifier: string, action: () => void) {
await within(locate(".ant-collapse-item").withText(tabIdentifier), action);
}

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

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

export async function addGaesteListe(guest: {
Expand All @@ -17,7 +24,32 @@ export async function addGaesteListe(guest: {
number: number;
alreadyIn: number;
}) {
I.click(buttons.addInTable);
await executeActionInTab(guestTabIdentifier, () => {
I.click(buttons.addInTable);
});

fillGuestDataInRow(guest);
}

export async function addReservation(guest: {
name: string;
comment: string;
number: number;
alreadyIn: number;
}) {
await executeActionInTab(reservationTabIdentifier, () => {
I.click(buttons.addInTable);
});

fillGuestDataInRow(guest);
}

function fillGuestDataInRow(guest: {
name: string;
comment: string;
number: number;
alreadyIn: number;
}) {
I.click('[data-testid="name0"]');
I.fillField("#name", guest.name);
I.pressKey("Tab");
Expand All @@ -28,15 +60,80 @@ export async function addGaesteListe(guest: {
I.click(buttons.speichern);
}

export async function setAlreadyIn(row: number, value: number) {
I.click('[data-testid="alreadyIn' + row + '"]');
export async function setGuestAlreadyIn(row: number, value: number) {
await executeActionInTab(guestTabIdentifier, () => {
I.click('[data-testid="alreadyIn' + row + '"]');
});

I.fillField("#alreadyIn", value);
I.pressKey("Tab");

I.click(buttons.speichern);
}

export async function setReservationAlreadyIn(row: number, value: number) {
await executeActionInTab(reservationTabIdentifier, () => {
I.click('[data-testid="alreadyIn' + row + '"]');
});

I.fillField("#alreadyIn", value);
I.pressKey("Tab");

I.click(buttons.speichern);
}

export async function changeGuestName(row: number, value: string) {
await executeActionInTab(guestTabIdentifier, () => {
I.click('[data-testid="name' + row + '"]');
});

// I.wait(5);
changeName(value);
}

export async function changeReservationName(row: number, value: string) {
await executeActionInTab(reservationTabIdentifier, () => {
I.click('[data-testid="name' + row + '"]');
});

changeName(value);
}

function changeName(value: string) {
I.fillField("#name", value);

I.pressKey("Tab");

// I.wait(5);
I.click(buttons.speichern);
}

export async function copyGuest(row: number) {
await executeActionInTab(guestTabIdentifier, () => {
I.click('[data-row-key="row' + row + '"] .bi-files');
});

I.click(buttons.speichern);
}

export async function copyReservation(row: number) {
await executeActionInTab(reservationTabIdentifier, () => {
I.click('[data-row-key="row' + row + '"] .bi-files');
});

I.click(buttons.speichern);
}

export async function deleteGuestRow(row: number) {
await executeActionInTab(guestTabIdentifier, () => {
I.click('[data-row-key="row' + row + '"] .bi-trash');
});

I.click(buttons.speichern);
}

export async function deleteReservationRow(row: number) {
await executeActionInTab(reservationTabIdentifier, () => {
I.click('[data-row-key="row' + row + '"] .bi-trash');
});

I.click(buttons.speichern);
}
Expand All @@ -51,7 +148,7 @@ export async function verifyGuestInStore(
},
index: number = 0,
) {
const res = await I.loadObjectInCollection("veranstaltungenstore", title);
const res = await loadKonzertStoreData(title);

I.assertDeepEqual(res.gaesteliste[index], {
name: guest.name,
Expand All @@ -61,3 +158,40 @@ export async function verifyGuestInStore(
key: "row" + index,
});
}

export async function verifyReservationInStore(
title: string,
guest: {
name: string;
comment: string;
number: number;
alreadyIn: number;
},
index: number = 0,
) {
const res = await loadKonzertStoreData(title);

I.assertDeepEqual(res.reservierungen[index], {
name: guest.name,
comment: guest.comment,
number: guest.number,
alreadyIn: guest.alreadyIn,
key: "row" + index,
});
}

export async function verifyGuestStoreEmpty(konzertTitle: string) {
const res = await loadKonzertStoreData(konzertTitle);

I.assertEmpty(res.gaesteliste);
}

export async function verifyReservationStoreEmpty(konzertTitle: string) {
const res = await loadKonzertStoreData(konzertTitle);

I.assertEmpty(res.reservierungen);
}

async function loadKonzertStoreData(konzertTitle: string) {
return await I.loadObjectInCollection("veranstaltungenstore", konzertTitle);
}
8 changes: 6 additions & 2 deletions frontendtests/pages/KonzertPage.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const { I } = inject();

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

Expand All @@ -10,7 +10,7 @@ export async function createExampleKonzert(title: string) {
I.createDataWithReplacer("veranstaltungenstore", "Replacervorlage", replacer);
}

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

Expand All @@ -19,3 +19,7 @@ export async function goToEditKonzert(konzertTitle: string) {
I.click(".bi-keyboard");
I.waitForText("Allgemein");
}

export function deleteKonzert(konzertTitle: string) {
I.deleteObjectInCollection("veranstaltungenstore", konzertTitle);
}
135 changes: 130 additions & 5 deletions frontendtests/tests/05_konzert_gaeste_test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ Before(({ login }) => {
Scenario(
"Erstelle Gast in Gästeliste und setze alreadyIn",
async ({ konzertPage, konzertGaestePage }) => {
const konzertTitle = "GaesteBeispiel";
await konzertPage.createExampleKonzert(konzertTitle);
const konzertTitle = "GaesteCreate";
konzertPage.createExampleKonzert(konzertTitle);
konzertPage.goToEditKonzert(konzertTitle);

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

const guest = {
name: "Stefan Rinderle",
Expand All @@ -24,11 +24,136 @@ Scenario(

await konzertGaestePage.verifyGuestInStore(konzertTitle, guest);

await konzertGaestePage.setAlreadyIn(0, 1);
await konzertGaestePage.setGuestAlreadyIn(0, 1);

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

konzertPage.deleteKonzert(konzertTitle);
},
);

Scenario(
"Erstelle Gast danach kopieren und löschen",
async ({ konzertPage, konzertGaestePage }) => {
const konzertTitle = "GaesteCopyDelete";
konzertPage.createExampleKonzert(konzertTitle);
konzertPage.goToEditKonzert(konzertTitle);

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.copyGuest(0);

const expectedChangedName = "Mario Rinderle";
await konzertGaestePage.changeGuestName(1, expectedChangedName);

const changedGuest = {
...guest,
name: expectedChangedName,
};
await konzertGaestePage.verifyGuestInStore(konzertTitle, changedGuest, 1);

await konzertGaestePage.deleteGuestRow(0);

await konzertGaestePage.verifyGuestInStore(konzertTitle, changedGuest, 0);

await konzertGaestePage.deleteGuestRow(0);

await konzertGaestePage.verifyGuestStoreEmpty(konzertTitle);

konzertPage.deleteKonzert(konzertTitle);
},
);

Scenario(
"Erstelle Reservierung und setze alreadyIn",
async ({ konzertPage, konzertGaestePage }) => {
const konzertTitle = "ReservationCreate";
konzertPage.createExampleKonzert(konzertTitle);
konzertPage.goToEditKonzert(konzertTitle);

konzertGaestePage.goToGaestePage();

const guest = {
name: "Stefan Rinderle",
comment: "Freund von Schlagzeuger",
number: 12,
alreadyIn: 0,
};

await konzertGaestePage.addReservation(guest);

await konzertGaestePage.verifyReservationInStore(konzertTitle, guest);

await konzertGaestePage.setReservationAlreadyIn(0, 10);

await konzertGaestePage.verifyReservationInStore(konzertTitle, {
...guest,
alreadyIn: 10,
});

konzertPage.deleteKonzert(konzertTitle);
},
);

Scenario(
"Erstelle Reservierung danach kopieren und löschen",
async ({ konzertPage, konzertGaestePage }) => {
const konzertTitle = "ReservationCopyDelete";
konzertPage.createExampleKonzert(konzertTitle);
konzertPage.goToEditKonzert(konzertTitle);

konzertGaestePage.goToGaestePage();

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

await konzertGaestePage.addReservation(guest);
await konzertGaestePage.verifyReservationInStore(konzertTitle, guest);

await konzertGaestePage.copyReservation(0);

const expectedChangedName = "Mario Rinderle";
await konzertGaestePage.changeReservationName(1, expectedChangedName);

const changedGuest = {
...guest,
name: expectedChangedName,
};
await konzertGaestePage.verifyReservationInStore(
konzertTitle,
changedGuest,
1,
);

await konzertGaestePage.deleteReservationRow(0);

await konzertGaestePage.verifyReservationInStore(
konzertTitle,
changedGuest,
0,
);

await konzertGaestePage.deleteReservationRow(0);

await konzertGaestePage.verifyReservationStoreEmpty(konzertTitle);

konzertPage.deleteKonzert(konzertTitle);
},
);