1
- import { describe , expect , it } from "@jest/globals" ; // , jest
1
+ import { describe , expect , it , beforeEach } from "@jest/globals" ; // , jest
2
2
import { StatusCode } from "status-code-enum" ;
3
3
import Models from "../../common/models" ;
4
- import { getAsUser , post , postAsUser } from "../../common/testTools" ; // TESTER, getAsAdmin, postAsUser
4
+ import { getAsUser , post , postAsUser , TESTER } from "../../common/testTools" ; // TESTER, getAsAdmin, postAsUser
5
5
import { PuzzleAnswer , PuzzleItem } from "./puzzle-schemas" ;
6
6
7
7
const TESTER_PUZZLE_ITEM = {
8
- userId : "bob-the-tester101010101011" ,
8
+ userId : TESTER . id ,
9
9
lastCorrect : 1708812000 ,
10
10
problemComplete : [ false , false , false , false , false , false , false , false , false , false ] ,
11
11
score : 0 ,
12
12
teamName : "tester team 1" ,
13
13
} satisfies PuzzleItem ;
14
14
15
15
const TESTER_CREATED_PUZZLE_ITEM = {
16
- userId : "bob-the-tester101010101011" ,
16
+ userId : TESTER . id ,
17
17
problemComplete : [ false , false , false , false , false , false , false , false , false , false ] ,
18
18
score : 0 ,
19
- teamName : "tester team 1" ,
19
+ teamName : TESTER_PUZZLE_ITEM . teamName ,
20
20
} ;
21
21
22
22
const UPDATED_TESTER_PUZZLE_ITEM = {
23
- userId : "bob-the-tester101010101011" ,
23
+ userId : TESTER . id ,
24
24
problemComplete : [ false , true , false , false , false , false , false , false , false , false ] ,
25
25
score : 1 ,
26
- teamName : "tester team 1" ,
26
+ teamName : TESTER_PUZZLE_ITEM . teamName ,
27
27
} ;
28
28
29
29
const TESTER_PUZZLE_ANSWER = {
@@ -44,49 +44,57 @@ describe("GET /status/", () => {
44
44
} ) ;
45
45
46
46
describe ( "POST /submit/:qid/" , ( ) => {
47
- it ( "works for registered user, correct answer" , async ( ) => {
47
+ beforeEach ( async ( ) => {
48
48
await Models . PuzzleItem . create ( TESTER_PUZZLE_ITEM ) ;
49
49
await Models . PuzzleAnswer . create ( TESTER_PUZZLE_ANSWER ) ;
50
+ } ) ;
51
+
52
+ it ( "works for registered user, correct answer" , async ( ) => {
53
+ const response = await postAsUser ( "/puzzle/submit/1/" ) . send ( { answer : "correct_answer" } ) . expect ( StatusCode . SuccessOK ) ;
54
+ expect ( JSON . parse ( response . text ) ) . toMatchObject ( UPDATED_TESTER_PUZZLE_ITEM ) ;
55
+ } ) ;
56
+
57
+ it ( "works for registered user, already completed" , async ( ) => {
58
+ await Models . PuzzleItem . updateOne (
59
+ { userId : TESTER . id } ,
60
+ {
61
+ $set : {
62
+ problemComplete : UPDATED_TESTER_PUZZLE_ITEM . problemComplete ,
63
+ score : UPDATED_TESTER_PUZZLE_ITEM . score ,
64
+ } ,
65
+ } ,
66
+ ) ;
50
67
const response = await postAsUser ( "/puzzle/submit/1/" ) . send ( { answer : "correct_answer" } ) . expect ( StatusCode . SuccessOK ) ;
51
68
expect ( JSON . parse ( response . text ) ) . toMatchObject ( UPDATED_TESTER_PUZZLE_ITEM ) ;
52
69
} ) ;
53
70
54
71
it ( "returns bad request error for registered user, incorrect answer" , async ( ) => {
55
- await Models . PuzzleItem . create ( TESTER_PUZZLE_ITEM ) ;
56
- await Models . PuzzleAnswer . create ( TESTER_PUZZLE_ANSWER ) ;
57
- const response = await postAsUser ( "/puzzle/submit/1/" )
58
- . send ( { answer : "incorrect_answer" } )
59
- . expect ( StatusCode . ClientErrorBadRequest ) ;
60
- expect ( JSON . parse ( response . text ) ) . toHaveProperty ( "message" , "Your answer was incorrect!" ) ;
72
+ await postAsUser ( "/puzzle/submit/1/" ) . send ( { answer : "incorrect_answer" } ) . expect ( StatusCode . ClientErrorBadRequest ) ;
61
73
} ) ;
62
74
63
75
it ( "returns not found error for registered user, nonexistent question" , async ( ) => {
64
- await Models . PuzzleItem . create ( TESTER_PUZZLE_ITEM ) ;
65
- const response = await postAsUser ( "/puzzle/submit/33/" )
66
- . send ( { answer : "filler_answer" } )
67
- . expect ( StatusCode . ClientErrorNotFound ) ;
68
- expect ( JSON . parse ( response . text ) ) . toHaveProperty ( "message" , "That question doesn't exist!" ) ;
76
+ await postAsUser ( "/puzzle/submit/33/" ) . send ( { answer : "filler_answer" } ) . expect ( StatusCode . ClientErrorNotFound ) ;
77
+ await postAsUser ( "/puzzle/submit/asdf/" ) . send ( { answer : "filler_answer" } ) . expect ( StatusCode . ClientErrorNotFound ) ;
69
78
} ) ;
70
79
71
80
it ( "returns not found error for unregistered user" , async ( ) => {
72
- const response = await postAsUser ( "/puzzle/submit/1" )
73
- . send ( { answer : "filler_answer" } )
74
- . expect ( StatusCode . ClientErrorNotFound ) ;
75
- expect ( JSON . parse ( response . text ) ) . toHaveProperty ( "message" , "That question doesn't exist!" ) ;
81
+ await Models . PuzzleItem . findOneAndDelete ( { userId : TESTER . id } ) ;
82
+ await postAsUser ( "/puzzle/submit/1" ) . send ( { answer : "filler_answer" } ) . expect ( StatusCode . ClientErrorNotFound ) ;
76
83
} ) ;
77
84
} ) ;
78
85
79
86
describe ( "POST /puzzle/create/" , ( ) => {
80
87
it ( "creates a new puzzle for authenticated user" , async ( ) => {
81
- const response = await postAsUser ( "/puzzle/create/" ) . send ( { teamName : "tester team 1" } ) . expect ( StatusCode . SuccessOK ) ;
88
+ const response = await postAsUser ( "/puzzle/create/" )
89
+ . send ( { teamName : TESTER_PUZZLE_ITEM . teamName } )
90
+ . expect ( StatusCode . SuccessOK ) ;
82
91
expect ( JSON . parse ( response . text ) ) . toMatchObject ( TESTER_CREATED_PUZZLE_ITEM ) ;
83
92
} ) ;
84
93
85
94
it ( "returns unauthorized error for unauthenticated user" , async ( ) => {
86
- const response = await post ( "/puzzle/create/" , undefined )
87
- . send ( { teamName : "tester team 1" } )
95
+ await post ( "/puzzle/create/" , undefined )
96
+ . send ( { teamName : TESTER_PUZZLE_ITEM . teamName } )
88
97
. expect ( StatusCode . ClientErrorUnauthorized ) ;
89
- expect ( JSON . parse ( response . text ) ) . toHaveProperty ( "message" , "A authorization token must be sent for this request" ) ;
90
98
} ) ;
91
99
92
100
it ( "returns validation error for missing team name" , async ( ) => {
0 commit comments