const statusCodes = require("../utilities/statusCodes") const { readFile, writeFile, remove } = require("fs-extra") module.exports = app => { it("should serve unauthenticated index.html as default", async () => { const response = await app.get("/testApp").expect(statusCodes.OK) const expectedIndexHtml = await readFile( "appPackages/testApp/public/unauthenticated/index.html", "utf8" ) expect(response.text).toBe(expectedIndexHtml) }) it("should serve specified files when unauthenticated", async () => { const response = await app.get("/testApp/app.js").expect(statusCodes.OK) const expectedFile = await readFile( "appPackages/testApp/public/unauthenticated/app.js", "utf8" ) expect(response.text).toBe(expectedFile) }) it("should serve main index.html as default when authenticated", async () => { const response = await app .get("/testApp") .set("cookie", app.credentials.testAppUser1.cookie) .expect(statusCodes.OK) const expectedIndexHtml = await readFile( "appPackages/testApp/public/main/index.html", "utf8" ) expect(response.text).toBe(expectedIndexHtml) }) it("should serve specified files when authenticated", async () => { const response = await app .get("/testApp/budibase-client.js") .set("cookie", app.credentials.testAppUser1.cookie) .expect(statusCodes.OK) const expectedFile = await readFile( "appPackages/testApp/public/main/budibase-client.js", "utf8" ) expect(response.text).toBe(expectedFile) }) it("should serve file from shared when authenticated", async () => { const response = await app .get("/testApp/_shared/shared_file.txt") .set("cookie", app.credentials.testAppUser1.cookie) .expect(statusCodes.OK) const expectedFile = await readFile( "appPackages/testApp/public/_shared/shared_file.txt", "utf8" ) expect(response.text).toBe(expectedFile) }) it("should serve file from shared when not authenticated", async () => { const response = await app .get("/testApp/_shared/shared_file.txt") .expect(statusCodes.OK) const expectedFile = await readFile( "appPackages/testApp/public/_shared/shared_file.txt", "utf8" ) expect(response.text).toBe(expectedFile) }) it("should serve file from latest when instance is versionless", async () => { try { await writeFile( "appPackages/testApp/public/_shared/new_file_for_versionless_test.txt", "thats right", { encoding: "utf8" } ) } catch (err) { // empty } try { await app .get("/testApp/_shared/new_file_for_versionless_test.txt") .set("cookie", app.credentials.user1_versionlessInstance.cookie) .expect(statusCodes.OK) } finally { try { await remove( "appPackages/testApp/public/_shared/new_file_for_versionless_test.txt" ) } catch (err) { // empty } } }) it("should not serve file from latest when instance has version", async () => { try { await writeFile( "appPackages/testApp/public/_shared/new_file_for_versionless_test.txt", "thats right", { encoding: "utf8" } ) } catch (err) { // empty } try { await app .get("/testApp/_shared/new_file_for_versionless_test.txt") .set("cookie", app.credentials.testAppUser1.cookie) .expect(statusCodes.NOT_FOUND) } finally { try { await remove( "appPackages/testApp/public/_shared/new_file_for_versionless_test.txt" ) } catch (err) { // empty } } }) }