import { Enums } from "@ibcornelsen/database/client"; import { test, describe, expect } from "bun:test"; import {faker} from "@faker-js/faker"; // import { client } from "src/trpc"; import { Buffer } from 'buffer'; describe("Bilder hochladen", async () => { // Erstmal lesen wir ein Bild ein, mit dem wir testen können const arrayBuffer = await Bun.file("cypress/fixtures/images/daemmung/1.jpeg").arrayBuffer(); const buffer = Buffer.from(arrayBuffer) const base64 = buffer.toString("base64"); // Im Browser hätten wir noch einen Mime Type vor dem base64-String const base64WithMimeType = "data:image/jpeg;base64," + base64; // Wir müssen uns einloggen, da wir für das Hochladen von Bildern einen Access Token brauchen const email = faker.internet.email(); const passwort = faker.internet.password(); const signUpResponse = await client.v1.benutzer.erstellen.mutate({ email, passwort, name: faker.person.lastName(), vorname: faker.person.firstName(), }) // Jetzt loggen wir uns ein const loginResponse = await client.v1.benutzer.getRefreshToken.query({ email, passwort, }) // Wir brauchen den Access Token const accessToken = loginResponse.accessToken; // Der Default Client versucht den Cookie zu lesen, das geht hier natürlich nicht const newClient = createTRPCProxyClient({ links: [ httpBatchLink({ url: 'http://localhost:3001/', headers() { if (!accessToken) return {}; const buffer = Buffer.from(accessToken, 'utf-8'); const base64 = buffer.toString('base64') return { 'Authorization': `Bearer ${base64}`, }; }, }), ], }); // Wir brauchen noch ein Gebäude, damit wir das Bild hochladen können const gebaeude = await newClient.v1.gebaeude.erstellen.mutate({}) // Jetzt laden wir das Bild hoch const image = await newClient.v1.bilder.upload.mutate({ base64: base64WithMimeType, gebaeude_uid: gebaeude.uid, kategorie: Enums.BilderKategorie.Daemmung, }) test("sollte ohne Fehler hochladen", async () => { expect(image).toHaveProperty("uid"); expect(image.uid).toBeTypeOf("string") }) test("bild sollte in der Datenbank und abrufbar sein", async () => { const bild = await newClient.v1.bilder.getBase64.query({ uid: image.uid }); expect(bild).toHaveProperty("base64"); expect(bild.data).toBeTypeOf("string"); expect(bild.data).toEqual(base64); }) test("bild sollte entfernbar sein", async () => { const response = await newClient.v1.bilder.entfernen.mutate({ uid: image.uid }); expect(response).toBeEmpty(); // Einmal nachschauen ob es tatächlich gelöscht wurde expect(newClient.v1.bilder.getBase64.query({ uid: image.uid })).rejects.toThrow() }) });