Login_test.res.mjs
1// Generated by ReScript, PLEASE EDIT WITH CARE
2
3import * as Login from "../src/ui/Login.res.mjs";
4import * as Vitest from "vitest";
5
6Vitest.describe("validateLoginForm", () => {
7 Vitest.test("Valid when both user and password provided", t => {
8 let result = Login.validateLoginForm("alice", "secret");
9 t.expect(result).toEqual("Valid");
10 });
11 Vitest.test("Invalid when user missing", t => {
12 let result = Login.validateLoginForm(undefined, "secret");
13 t.expect(result).toEqual({
14 TAG: "Invalid",
15 _0: "Username or handle is required"
16 });
17 });
18 Vitest.test("Invalid when password missing", t => {
19 let result = Login.validateLoginForm("alice", undefined);
20 t.expect(result).toEqual({
21 TAG: "Invalid",
22 _0: "Password is required"
23 });
24 });
25 Vitest.test("Invalid when both missing", t => {
26 let result = Login.validateLoginForm(undefined, undefined);
27 t.expect(result).toEqual({
28 TAG: "Invalid",
29 _0: "Username and password are required"
30 });
31 });
32});
33
34Vitest.describe("validateSignupForm", () => {
35 Vitest.test("Valid when email and password provided", t => {
36 let result = Login.validateSignupForm("[email protected]", undefined, "secret");
37 t.expect(result).toEqual("Valid");
38 });
39 Vitest.test("Valid when handle and password provided", t => {
40 let result = Login.validateSignupForm(undefined, "alice", "secret");
41 t.expect(result).toEqual("Valid");
42 });
43 Vitest.test("Valid when all three provided", t => {
44 let result = Login.validateSignupForm("[email protected]", "alice", "secret");
45 t.expect(result).toEqual("Valid");
46 });
47 Vitest.test("Invalid when neither email nor handle provided", t => {
48 let result = Login.validateSignupForm(undefined, undefined, "secret");
49 t.expect(result).toEqual({
50 TAG: "Invalid",
51 _0: "A handle or an email and a password are required"
52 });
53 });
54 Vitest.test("Invalid when password missing", t => {
55 let result = Login.validateSignupForm("[email protected]", undefined, undefined);
56 t.expect(result).toEqual({
57 TAG: "Invalid",
58 _0: "A handle or an email and a password are required"
59 });
60 });
61});
62
63Vitest.describe("parseUserFromJSON", () => {
64 Vitest.test("Parses complete user JSON with base36 id", t => {
65 let json = Object.fromEntries([
66 [
67 "id",
68 "zvozorhhxc0"
69 ],
70 [
71 "email",
72 "[email protected]"
73 ],
74 [
75 "handle",
76 "alice"
77 ],
78 [
79 "registered",
80 true
81 ]
82 ]);
83 let result = Login.parseUserFromJSON(json);
84 t.expect(result).toEqual({
85 id: "zvozorhhxc0",
86 email: "[email protected]",
87 handle: "alice",
88 registered: true
89 });
90 });
91 Vitest.test("Ignores numeric id and returns None", t => {
92 let json = Object.fromEntries([
93 [
94 "id",
95 42.0
96 ],
97 [
98 "email",
99 "[email protected]"
100 ],
101 [
102 "handle",
103 "alice"
104 ],
105 [
106 "registered",
107 false
108 ]
109 ]);
110 let result = Login.parseUserFromJSON(json);
111 t.expect(result).toEqual(undefined);
112 });
113 Vitest.test("Returns None for missing id", t => {
114 let json = Object.fromEntries([
115 [
116 "email",
117 "[email protected]"
118 ],
119 [
120 "handle",
121 "alice"
122 ],
123 [
124 "registered",
125 true
126 ]
127 ]);
128 let result = Login.parseUserFromJSON(json);
129 t.expect(result).toEqual(undefined);
130 });
131 Vitest.test("Defaults optional fields", t => {
132 let json = Object.fromEntries([[
133 "id",
134 "abc123"
135 ]]);
136 let result = Login.parseUserFromJSON(json);
137 t.expect(result).toEqual({
138 id: "abc123",
139 email: "",
140 handle: "",
141 registered: false
142 });
143 });
144});
145
146/* Not a pure module */