summaryrefslogtreecommitdiff
path: root/tests/root.spec.js
blob: 308d35cfb32e7c6784858e2b57e2b9eec532cb44 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import { beforeEach, describe, it } from "vitest";
import supertest from "supertest";

import app from "../main.js";

const request = supertest(app);

describe.concurrent("Root handlers tests", function() {
	describe.concurrent("When not logged in", function() {
		it("GET /", async function() { await request.get("/").expect("Content-Type", /text\/plain/).expect(302, /Redirecting to \/login$/); });
		it("GET /login", async function() { await request.get("/login").expect("Content-Type", /text\/html/).expect(200, /<form action="\/login" method="post">/); });
		it("GET /logout", async function() { await request.get("/logout").expect("Content-Type", /text\/plain/).expect(302, /Redirecting to \/$/); });
	});

	describe.concurrent("With valid credentials", function() {
		beforeEach(async function(ctx) {
			const authResponse = await request.post("/login")
				.send("username=Alice&password=Alice42!")
				.expect("Content-Type", /text\/plain/)
				.expect("set-cookie", /JDMSessionId=/)
				.expect(302, /Redirecting to \/games$/);
			ctx.cookie = authResponse.get("Set-Cookie");
		});
		it("GET /", async function(ctx) { await request.get("/").set("Cookie", ctx.cookie).expect("Content-Type", /text\/plain/).expect(302, /Redirecting to \/games$/); });
		it("GET /login", async function(ctx) { await request.get("/login").set("Cookie", ctx.cookie).expect("Content-Type", /text\/plain/).expect(302, /Redirecting to \/games$/); });
		describe("logout", function() {
			beforeEach(async function(ctx) {
				await request.get("/logout").set("cookie", ctx.cookie).expect("content-type", /text\/plain/).expect("set-cookie", /JDMSessionId=;/).expect(302, /Redirecting to \/$/);
			});
			describe.concurrent("all handlers with the now invalid cookie", async function() {
				it("GET /", async function(ctx) { await request.get("/").set("Cookie", ctx.cookie).expect("Content-Type", /text\/plain/).expect(302, /Redirecting to \/login$/); });
				it("GET /login", async function(ctx) { await request.get("/login").set("Cookie", ctx.cookie).expect("Content-Type", /text\/html/).expect(200, /<form action="\/login" method="post">/); });
				it("GET /logout", async function(ctx) { await request.get("/logout").set("Cookie", ctx.cookie).expect("Content-Type", /text\/plain/).expect(302, /Redirecting to \/$/); });
			});
		});
	});
});