Felder angepasst und Tests

This commit is contained in:
Moritz Utcke
2025-03-30 20:18:30 -03:00
parent e2e576e4fe
commit c8b41458e1
34 changed files with 303 additions and 376 deletions

View File

@@ -2,14 +2,17 @@ import fuelList from "#components/Ausweis/brennstoffListe.js";
import { faker } from "@faker-js/faker";
import "cypress-file-upload"
import moment from "moment";
import { Aufnahme, Enums, Objekt, VerbrauchsausweisWohnen } from "#lib/client/prisma.js";
import { Aufnahme, Benutzer, Enums, Objekt, Rechnung, VerbrauchsausweisWohnen } from "#lib/client/prisma.js";
describe("Verbrauchsausweis für Wohngebäude bearbeiten", async () => {
it("bearbeitet einen bereits existierenden Verbrauchsausweis für Wohngebäude", () => {
cy.task("verbrauchsausweisWohnen", {
where: {
ausgestellt: false,
bestellt: false
bestellt: false,
benutzer: {
email: "user@ib-cornelsen.de"
}
},
include: {
aufnahme: {
@@ -17,261 +20,171 @@ describe("Verbrauchsausweis für Wohngebäude bearbeiten", async () => {
objekt: true
}
},
benutzer: true
benutzer: true,
rechnung: true
}
}).then((ausweis: VerbrauchsausweisWohnen & { aufnahme: Aufnahme & { objekt: Objekt } }) => {
}).then((ausweis: VerbrauchsausweisWohnen & { benutzer: Benutzer, aufnahme: Aufnahme & { objekt: Objekt }, rechnung: Rechnung | null }) => {
cy.login("user@ib-cornelsen.de", "passwort");
cy.visit(`/energieausweis-erstellen/verbrauchsausweis-wohngebaeude?id=${ausweis.id}`);
cy.wait(2000);
// Wir überprüfen, ob alle Ausstelgründe vorhanden sind, diese sollten genau so viele sein wie in der Datenbank vorhanden sind.
cy.get("select[data-cy='ausstellgrund']")
.find("option:selected").should("have.value", ausweis.ausstellgrund)
// Jetzt Füllen wir das Baujahr vom Gebäude aus.
cy.get("input[name='baujahr_gebaeude']")
.should("have.value", ausweis.aufnahme.baujahr_gebaeude[0])
// // Jetzt Füllen wir das Baujahr vom Gebäude aus.
// cy.get("input[name='baujahr_gebaeude']")
// .should("have.value", ausweis.aufnahme.baujahr_gebaeude[0])
// Jetzt Füllen wir das Baujahr der Heizung aus.
cy.get("input[name='baujahr_heizung']")
.should("have.value", ausweis.aufnahme.baujahr_heizung[0])
// // Jetzt Füllen wir das Baujahr der Heizung aus.
// cy.get("input[name='baujahr_heizung']")
// .should("have.value", ausweis.aufnahme.baujahr_heizung[0])
// Anzahl Einheiten
cy.get("input[name='einheiten']")
.should("have.value", ausweis.aufnahme.einheiten)
// Sanierungsstatus
cy.get("select[name='saniert']").find("option:selected").should("have.value", ausweis.aufnahme.saniert)
cy.get("select[name='saniert']").find("option:selected").should("have.value", (ausweis.aufnahme.saniert || false).toString())
// Adresse
cy.get("input[name='adresse']").should("have.value", ausweis.aufnahme.objekt.adresse);
// Postleitzahl
cy.get("input[name='plz']").type(
faker.location.zipCode({
format: "#####",
})
);
// TODO: Ort - Dieser wird aus der Datenbank abgefragt, wir müssen also warten, bis der Dropdown da ist.
cy.get("[data-cy='plz-container']").find("button").first().click()
cy.get("input[name='plz']").should("have.value", ausweis.aufnahme.objekt.plz);
cy.get("input[name='ort']").should("have.value", ausweis.aufnahme.objekt.ort);
// Flaeche
cy.get("input[name='flaeche']")
.should("have.attr", "type", "number")
.type(faker.number.int({ min: 50, max: 1000 }).toString());
.should("have.value", ausweis.aufnahme.flaeche)
// Nutzflaeche
cy.get("input[name='nutzflaeche']")
.should("have.attr", "type", "number")
.type(faker.number.int({ min: 50, max: 1000 }).toString());
.should("have.value", ausweis.aufnahme.nutzflaeche)
// Keller
cy.get("select[name='keller']").find("option:not([disabled])").should("have.length", (["BEHEIZT", "NICHT_VORHANDEN", "UNBEHEIZT"] as Enums.Heizungsstatus[]).length).parent().select(faker.number.int({
max: (["BEHEIZT", "NICHT_VORHANDEN", "UNBEHEIZT"] as Enums.Heizungsstatus[]).length,
min: 1
}));
cy.get("select[name='keller']").find("option:selected").should("have.value", ausweis.aufnahme.keller)
// Dachgeschoss
cy.get("select[name='dachgeschoss']").find("option:not([disabled])").should("have.length", (["BEHEIZT", "NICHT_VORHANDEN", "UNBEHEIZT"] as Enums.Heizungsstatus[]).length).parent().select(faker.number.int({
max: (["BEHEIZT", "NICHT_VORHANDEN", "UNBEHEIZT"] as Enums.Heizungsstatus[]).length,
min: 1
}));
cy.get("select[name='dachgeschoss']").find("option:selected").should("have.value", ausweis.aufnahme.dachgeschoss)
// Brennstoff und Einheit 1
const brennstoffKombo = fuelList[faker.number.int({ min: 0, max: fuelList.length - 1 })];
cy.get("select[name='brennstoff_1']").select(brennstoffKombo[0]);
cy.get("select[name='einheit_1']").select(brennstoffKombo[1]);
let availableDates = [];
const startDate = moment()
.subtract(4, "years")
.subtract(6, "months");
const endDate = moment().subtract(3, "years");
for (let m = moment(startDate); m.isBefore(endDate); m.add(1, "month")) {
availableDates.push({
year: m.year(),
month: m.month(),
});
}
cy.get("select[name='brennstoff_1']").should("have.value", ausweis.brennstoff_1)
cy.get("select[name='einheit_1']").should("have.value", ausweis.einheit_1)
// Verbrauchszeitraum
cy.get("select[name='energieverbrauch_zeitraum_jahr']").select(availableDates[0].year.toString());
cy.get("select[name='energieverbrauch_zeitraum_monat']").select(availableDates[0].month.toString());
cy.get("select[name='energieverbrauch_zeitraum_jahr']").find("option:selected").should("have.value", moment(ausweis.startdatum).get("year"))
cy.get("select[name='energieverbrauch_zeitraum_monat']").find("option:selected").should("have.value", moment(ausweis.startdatum).get("m") + 1)
// Verbrauch
cy.get("input[name='verbrauch_1']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true });
cy.get("input[name='verbrauch_2']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true });
cy.get("input[name='verbrauch_3']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true });
cy.get("input[name='verbrauch_1']").should("have.value", ausweis.verbrauch_1);
cy.get("input[name='verbrauch_2']").should("have.value", ausweis.verbrauch_2);
cy.get("input[name='verbrauch_3']").should("have.value", ausweis.verbrauch_3);
const zusaetzlicheHeizquelle = Math.random() > 0.5;
if (zusaetzlicheHeizquelle) {
cy.get("[data-cy='zusaetzliche_heizquelle']").check();
if (ausweis.zusaetzliche_heizquelle) {
cy.get("[data-cy='zusaetzliche_heizquelle']").should("be.checked");
// Brennstoff und Einheit 2
const brennstoffKombo2 = fuelList[faker.number.int({ min: 0, max: fuelList.length - 1 })];
cy.get("[data-cy='brennstoff_2']").select(brennstoffKombo2[0], { force: true });
cy.get("[data-cy='einheit_2']").select(brennstoffKombo2[1], { force: true });
cy.get("[data-cy='brennstoff_2']").find("option:selected").should("have.value", ausweis.brennstoff_2);
cy.get("[data-cy='einheit_2']").find("option:selected").should("have.value", ausweis.einheit_2);
// Verbrauch
cy.get("input[name='verbrauch_4']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true });
cy.get("input[name='verbrauch_5']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true });
cy.get("input[name='verbrauch_6']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true });
cy.get("input[name='verbrauch_4']").should("have.value", ausweis.verbrauch_4);
cy.get("input[name='verbrauch_5']").should("have.value", ausweis.verbrauch_5);
cy.get("input[name='verbrauch_6']").should("have.value", ausweis.verbrauch_6);
}
// Warmwasser enthalten und bekannt
const warmwasserEnthalten = Math.random() > 0.5;
const anteilBekannt = Math.random() > 0.5;
if (ausweis.warmwasser_enthalten) {
cy.get("input[name='warmwasser_enthalten']").should("be.checked");
if (warmwasserEnthalten) {
cy.get("input[name='warmwasser_enthalten']").check();
if (anteilBekannt) {
if (ausweis.warmwasser_anteil_bekannt) {
// Der Anteil ist bekannt, wir müssen ihn also angeben.
cy.get("input[name='warmwasser_anteil_bekannt']").check();
cy.get("input[name='warmwasser_anteil_bekannt']").should("be.checked");
cy.get("input[name='anteil_warmwasser_1']").type(faker.number.int({ min: 0, max: 50 }).toString());
cy.get("input[name='anteil_warmwasser_1']").should("have.value", ausweis.anteil_warmwasser_1);
if (zusaetzlicheHeizquelle) {
if (ausweis.zusaetzliche_heizquelle) {
// Zusätzliche Heizquelle existiert, also müssen wir auch hier den Anteil angeben.
cy.get("input[name='anteil_warmwasser_2']").type(faker.number.int({ min: 0, max: 50 }).toString(), {force: true});
cy.get("input[name='anteil_warmwasser_2']").should('have.value', ausweis.anteil_warmwasser_2);
}
}
}
// Alternative Energieversorgungssysteme
if (Math.random() > 0.5) cy.get("input[name='alternative_heizung']").check();
if (Math.random() > 0.5) cy.get("input[name='alternative_warmwasser']").check();
if (Math.random() > 0.5) cy.get("input[name='alternative_lueftung']").check();
if (Math.random() > 0.5) cy.get("input[name='alternative_kuehlung']").check();
if (ausweis.alternative_heizung) cy.get("input[name='alternative_heizung']").should("be.checked");
if (ausweis.alternative_warmwasser) cy.get("input[name='alternative_warmwasser']").should("be.checked");
if (ausweis.alternative_lueftung) cy.get("input[name='alternative_lueftung']").should("be.checked");
if (ausweis.alternative_kuehlung) cy.get("input[name='alternative_kuehlung']").should("be.checked");
// Gebäudetyp
cy.get("select[name='gebaeudetyp']").then(($dropdown) => {
const options = $dropdown.find('option');
// Select the option at the random index
cy.get("select[name='gebaeudetyp']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string);
});
cy.get("select[name='gebaeudetyp']").find("option:selected").should("have.value", ausweis.aufnahme.gebaeudetyp)
// Gebäudeteil
cy.get("select[name='gebaeudeteil']").then(($dropdown) => {
const options = $dropdown.find('option');
// Select the option at the random index
cy.get("select[name='gebaeudeteil']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string);
});
cy.get("select[name='gebaeudeteil']").find("option:selected").should("have.value", ausweis.aufnahme.gebaeudeteil)
// Lüftung
cy.get("select[name='lueftung']").then(($dropdown) => {
const options = $dropdown.find('option');
// Select the option at the random index
cy.get("select[name='lueftung']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string);
});
cy.get("select[name='lueftung']").find("option:selected").should("have.value", ausweis.aufnahme.lueftung)
// Kühlung
cy.get("select[name='kuehlung']").then(($dropdown) => {
const options = $dropdown.find('option');
// Select the option at the random index
cy.get("select[name='kuehlung']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string, { force: true });
});
cy.get("select[name='kuehlung']").find("option:selected").should("have.value", ausweis.aufnahme.kuehlung)
// Leerstand
cy.get("input[name='leerstand']").should("have.attr", "type", "number").type(faker.number.int({ min: 0, max: 30 }).toString());
cy.get("input[name='leerstand']").should("have.value", ausweis.aufnahme.leerstand || "");
// Heizungsanlage Daten
if (Math.random() > 0.5) cy.get("[data-cy='zentralheizung']").check();
if (Math.random() > 0.5) cy.get("[data-cy='einzelofen']").check();
if (Math.random() > 0.5) cy.get("[data-cy='durchlauf_erhitzer']").check();
if (Math.random() > 0.5) cy.get("[data-cy='standard_kessel']").check();
if (Math.random() > 0.5) cy.get("[data-cy='solarsystem_warmwasser']").check();
if (Math.random() > 0.5) cy.get("[data-cy='waermepumpe']").check();
if (Math.random() > 0.5) cy.get("[data-cy='niedertemperatur_kessel']").check();
if (Math.random() > 0.5) cy.get("[data-cy='brennwert_kessel']").check();
if (Math.random() > 0.5) cy.get("[data-cy='warmwasser_rohre_gedaemmt']").check();
if (Math.random() > 0.5) cy.get("[data-cy='heizungsrohre_gedaemmt']").check();
if (Math.random() > 0.5) cy.get("[data-cy='zirkulation']").check();
// if (Math.random() > 0.5) cy.get("[data-cy='raum_temperatur_regler']").check();
// Heizungsanlage Bilder
cy.get("input[name='heizung_image']").should("have.attr", "type", "file").attachFile("images/heizungsanlage/1.jpeg", { subjectType: "input" });
cy.get("input[name='heizung_image']").should("have.attr", "type", "file").attachFile("images/heizungsanlage/2.jpeg", { subjectType: "input" });
if (ausweis.aufnahme.zentralheizung) cy.get("[data-cy='zentralheizung']").should("be.checked");
if (ausweis.aufnahme.einzelofen) cy.get("[data-cy='einzelofen']").should("be.checked");
if (ausweis.aufnahme.durchlauf_erhitzer) cy.get("[data-cy='durchlauf_erhitzer']").should("be.checked");
if (ausweis.aufnahme.standard_kessel) cy.get("[data-cy='standard_kessel']").should("be.checked");
if (ausweis.aufnahme.solarsystem_warmwasser) cy.get("[data-cy='solarsystem_warmwasser']").should("be.checked");
if (ausweis.aufnahme.waermepumpe) cy.get("[data-cy='waermepumpe']").should("be.checked");
if (ausweis.aufnahme.niedertemperatur_kessel) cy.get("[data-cy='niedertemperatur_kessel']").should("be.checked");
if (ausweis.aufnahme.brennwert_kessel) cy.get("[data-cy='brennwert_kessel']").should("be.checked");
if (ausweis.aufnahme.warmwasser_rohre_gedaemmt) cy.get("[data-cy='warmwasser_rohre_gedaemmt']").should("be.checked");
if (ausweis.aufnahme.heizungsrohre_gedaemmt) cy.get("[data-cy='heizungsrohre_gedaemmt']").should("be.checked");
if (ausweis.aufnahme.zirkulation) cy.get("[data-cy='zirkulation']").should("be.checked");
// Fenster Daten
if (Math.random() > 0.5) cy.get("input[name='einfach_verglasung']").check();
if (Math.random() > 0.5) cy.get("input[name='doppel_verglasung']").check();
if (Math.random() > 0.5) cy.get("input[name='isolier_verglasung']").check();
if (Math.random() > 0.5) cy.get("input[name='dreifach_verglasung']").check();
if (Math.random() > 0.5) cy.get("input[name='fenster_dicht']").check();
if (Math.random() > 0.5) cy.get("input[name='fenster_teilweise_undicht']").check();
if (Math.random() > 0.5) cy.get("input[name='tueren_dicht']").check();
if (Math.random() > 0.5) cy.get("input[name='tueren_undicht']").check();
if (Math.random() > 0.5) cy.get("input[name='rolllaeden_kaesten_gedaemmt']").check();
// Fenster Bilder
cy.get("input[name='fenster_image']").should("have.attr", "type", "file").attachFile("images/fenster/1.jpeg", { subjectType: "input" });
cy.get("input[name='fenster_image']").should("have.attr", "type", "file").attachFile("images/fenster/2.jpeg", { subjectType: "input" });
if (ausweis.aufnahme.einfach_verglasung) cy.get("input[name='einfach_verglasung']").check();
if (ausweis.aufnahme.doppel_verglasung) cy.get("input[name='doppel_verglasung']").check();
if (ausweis.aufnahme.isolier_verglasung) cy.get("input[name='isolier_verglasung']").check();
if (ausweis.aufnahme.dreifach_verglasung) cy.get("input[name='dreifach_verglasung']").check();
if (ausweis.aufnahme.fenster_dicht) cy.get("input[name='fenster_dicht']").check();
if (ausweis.aufnahme.fenster_teilweise_undicht) cy.get("input[name='fenster_teilweise_undicht']").check();
if (ausweis.aufnahme.tueren_dicht) cy.get("input[name='tueren_dicht']").check();
if (ausweis.aufnahme.tueren_undicht) cy.get("input[name='tueren_undicht']").check();
if (ausweis.aufnahme.rolllaeden_kaesten_gedaemmt) cy.get("input[name='rolllaeden_kaesten_gedaemmt']").check();
// Wärmedämmung Daten
if (Math.random() > 0.5) cy.get("input[name='aussenwand_gedaemmt']").check();
if (Math.random() > 0.5) cy.get("input[name='keller_wand_gedaemmt']").check();
if (Math.random() > 0.5) cy.get("input[name='keller_decke_gedaemmt']").check();
if (Math.random() > 0.5) cy.get("input[name='dachgeschoss_gedaemmt']").check();
if (Math.random() > 0.5) cy.get("input[name='oberste_geschossdecke_gedaemmt']").check();
if (Math.random() > 0.5) cy.get("input[name='oberste_geschossdecke_min_12cm_gedaemmt']").check();
// Wärmedämmung Bilder
cy.get("input[name='daemmung_image']").should("have.attr", "type", "file").attachFile("images/daemmung/1.jpeg", { subjectType: "input" });
cy.get("input[name='daemmung_image']").should("have.attr", "type", "file").attachFile("images/daemmung/2.jpeg", { subjectType: "input" });
// Gebäude Bild
cy.get("input[name='gebaeude_image']").should("have.attr", "type", "file").attachFile("images/gebaeude/1.jpeg", { subjectType: "input" });
if (ausweis.aufnahme.aussenwand_gedaemmt) cy.get("input[name='aussenwand_gedaemmt']").check();
if (ausweis.aufnahme.keller_wand_gedaemmt) cy.get("input[name='keller_wand_gedaemmt']").check();
if (ausweis.aufnahme.keller_decke_gedaemmt) cy.get("input[name='keller_decke_gedaemmt']").check();
if (ausweis.aufnahme.dachgeschoss_gedaemmt) cy.get("input[name='dachgeschoss_gedaemmt']").check();
if (ausweis.aufnahme.oberste_geschossdecke_gedaemmt) cy.get("input[name='oberste_geschossdecke_gedaemmt']").check();
if (ausweis.aufnahme.oberste_geschossdecke_min_12cm_gedaemmt) cy.get("input[name='oberste_geschossdecke_min_12cm_gedaemmt']").check();
// Jetzt können wir den Verbrauchsausweis erstellen.
cy.get("form[data-cy='ausweis'] button[data-cy='weiter']").click({ force: true });
cy.url().should("contain", "/kundendaten");
const email = faker.internet.email();
const passwort = "test1234";
const vorname = faker.person.firstName();
const nachname = faker.person.lastName();
const telefon = faker.phone.number()
const strasse = faker.location.streetAddress({ useFullAddress: true })
const plz = faker.location.zipCode("#####")
cy.get("input[name='vorname']").should("have.attr", "type", "text").type(vorname);
cy.get("input[name='name']").should("have.attr", "type", "text").type(nachname);
cy.get("input[name='telefon']").should("have.attr", "type", "text").type(telefon);
cy.get("input[name='vorname']").should("have.value", ausweis.benutzer.vorname);
cy.get("input[name='name']").should("have.value", ausweis.benutzer.name);
cy.get("input[name='telefon']").should("have.value", ausweis.rechnung?.telefon || ausweis.benutzer.telefon || "");
// Rechnung
cy.get("input[name='rechnung_empfaenger']").should("have.attr", "type", "text").type(`${vorname} ${nachname}`);
cy.get("input[name='rechnung_strasse']").should("have.attr", "type", "text").type(strasse);
cy.get("input[name='rechnung_plz']").should("have.attr", "type", "text").type(plz);
cy.get("[data-cy='plz-container']").children().first().click()
cy.get("input[name='rechnung_email']").should("have.attr", "type", "email").type(email);
cy.get("input[name='rechnung_empfaenger']").should("have.value", ausweis.rechnung?.empfaenger || `${ausweis.benutzer.vorname} ${ausweis.benutzer.name}`);
cy.get("input[name='rechnung_strasse']").should("have.value", ausweis.rechnung?.strasse || ausweis.benutzer.adresse);
cy.get("input[name='rechnung_plz']").should("have.value", ausweis.rechnung?.plz || ausweis.benutzer.plz);
cy.get("input[name='rechnung_email']").should("have.value", ausweis.rechnung?.email || ausweis.benutzer.email);
cy.get("[data-cy='paypal']").click()
cy.get("button[data-cy='bestellen']").click();
cy.get("a[data-cy='registrieren']").should("be.visible").click();
// Wir sind jetzt registriert und können uns nun einloggen.
// Die Email sollte automatisch eingetragen sein, da wir uns gerade registriert haben.
cy.get("form[name='signup'] input[name='vorname']").should("be.visible").should("have.attr", "type", "text").type(vorname);
cy.get("form[name='signup'] input[name='nachname']").should("be.visible").should("have.attr", "type", "text").type(nachname);
cy.get("form[name='signup'] input[name='email']").should("be.visible").should("have.attr", "type", "email").should("contain.value", email);
cy.get("form[name='signup'] input[name='passwort']").should("be.visible").should("have.attr", "type", "password").type(passwort);
cy.intercept({ method: "PUT", url: "**/api/user" }).as("signup")
cy.get("form[name='signup'] button[type='submit']").click();
cy.wait("@signup")
cy.get("form[name='login'] button[type='submit']").click();
cy.origin('https://www.mollie.com', () => {
// Jetzt sind wir auf der Mollie Seite, dort wählen wir den "paid" status aus
cy.get("input[type='radio'][name='final_state'][value='paid']").check();