summaryrefslogtreecommitdiff
path: root/tests/root.spec.js
blob: ffceda5fce4467ab08089fc704bb2afbb448a97b (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
import { beforeEach, describe, it } from "vitest";
import supertest from "supertest";

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

const request = supertest(app);

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

	describe.concurrent("With valid credentials", async 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("/", async function(ctx) { request.get("/").set("Cookie", ctx.cookie).expect("Content-Type", /text\/plain/).expect(302, /Redirecting to \/games$/); });
		it("/login", async function(ctx) { request.get("/login").set("Cookie", ctx.cookie).expect("Content-Type", /text\/plain/).expect(302, /Redirecting to \/games$/); });
		describe("logout", async function(ctx) {
			it("/logout", async function() { 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("/", async function() { request.get("/").set("Cookie", ctx.cookie).expect("Content-Type", /text\/plain/).expect(302, /Redirecting to \/login$/); });
				it("/", async function() { request.get("/login").set("Cookie", ctx.cookie).expect("Content-Type", /text\/html/).expect(200, /<form action="\/login" method="post">/); });
				it("/", async function() { request.get("/logout").set("Cookie", ctx.cookie).expect("Content-Type", /text\/plain/).expect(302, /Redirecting to \/$/); });
			});
		});
	});
});