@@ -4,6 +4,12 @@ import type { TaskResult, TaskResults } from '$lib/types/task';
4
4
// Most fields are empty strings as they're not relevant for these tests.
5
5
// The updated_at field is set to Unix epoch as we only care about task_table_index
6
6
// and task_id for header name testing.
7
+
8
+ /**
9
+ * Default task result object used as a template for test data.
10
+ * Most fields are initialized as empty strings as they're not relevant for these tests.
11
+ * @type {TaskResult }
12
+ */
7
13
const defaultTaskResult : TaskResult = {
8
14
is_ac : false ,
9
15
user_id : '' ,
@@ -19,9 +25,13 @@ const defaultTaskResult: TaskResult = {
19
25
updated_at : new Date ( 0 ) , // Use the Unix epoch as the default value.
20
26
} ;
21
27
28
+ /** Represents a fully accepted submission status */
22
29
const AC = 'ac' ;
30
+ /** Represents a submission that was accepted with reference to the editorial */
23
31
const AC_WITH_EDITORIAL = 'ac_with_editorial' ;
32
+ /** Represents a challenge is underway */
24
33
const TRYING = 'wa' ;
34
+ /** Represents an unchallenged */
25
35
const PENDING = 'ns' ;
26
36
27
37
/**
@@ -48,54 +58,110 @@ function createTaskResultWithTaskTableIndex(
48
58
} ;
49
59
}
50
60
61
+ // Define a structure for contest tasks
62
+ /**
63
+ * Creates task results for a given contest based on provided task configurations.
64
+ *
65
+ * @param contestId - The unique identifier of the contest
66
+ * @param taskConfigs - Array of task configurations with task table indices and status names
67
+ * @param taskConfigs.taskTableIndex - The table index identifier for the task
68
+ * @param taskConfigs.statusName - The status name to assign to the task
69
+ * @returns An array of task results created from the given configurations
70
+ */
71
+ const createContestTasks = (
72
+ contestId : string ,
73
+ taskConfigs : Array < { taskTableIndex : string ; statusName : string } > ,
74
+ ) => {
75
+ return taskConfigs . map ( ( config ) => {
76
+ const taskId = `${ contestId } _${ config . taskTableIndex . toLowerCase ( ) } ` ;
77
+
78
+ return createTaskResultWithTaskTableIndex (
79
+ contestId ,
80
+ taskId ,
81
+ config . taskTableIndex ,
82
+ config . statusName ,
83
+ ) ;
84
+ } ) ;
85
+ } ;
86
+
51
87
// ABC212 - ABC232: 8 tasks (A, B, C, D, E, F, G and H)
52
- // // Mix of different submission statuses to test various filtering and display scenarios.
53
- const abc212_a = createTaskResultWithTaskTableIndex ( 'abc212' , 'abc212_a' , 'A' , AC ) ;
54
- const abc212_b = createTaskResultWithTaskTableIndex ( 'abc212' , 'abc212_b' , 'B' , AC ) ;
55
- const abc212_f = createTaskResultWithTaskTableIndex ( 'abc212' , 'abc212_f' , 'F' , AC_WITH_EDITORIAL ) ;
56
- const abc212_g = createTaskResultWithTaskTableIndex ( 'abc212' , 'abc212_g' , 'G' , TRYING ) ;
57
- const abc212_h = createTaskResultWithTaskTableIndex ( 'abc212' , 'abc212_h' , 'H' , PENDING ) ;
58
- const abc213_h = createTaskResultWithTaskTableIndex ( 'abc213' , 'abc213_h' , 'H' , PENDING ) ;
59
- const abc232_h = createTaskResultWithTaskTableIndex ( 'abc232' , 'abc232_h' , 'H' , TRYING ) ;
88
+ // Mix of different submission statuses to test various filtering and display scenarios.
89
+ const [ abc212_a , abc212_b , abc212_f , abc212_g , abc212_h ] = createContestTasks ( 'abc212' , [
90
+ { taskTableIndex : 'A' , statusName : AC } ,
91
+ { taskTableIndex : 'B' , statusName : AC } ,
92
+ { taskTableIndex : 'F' , statusName : AC_WITH_EDITORIAL } ,
93
+ { taskTableIndex : 'G' , statusName : TRYING } ,
94
+ { taskTableIndex : 'H' , statusName : PENDING } ,
95
+ ] ) ;
96
+ const [ abc213_h ] = createContestTasks ( 'abc213' , [ { taskTableIndex : 'H' , statusName : PENDING } ] ) ;
97
+ const [ abc232_h ] = createContestTasks ( 'abc232' , [ { taskTableIndex : 'H' , statusName : TRYING } ] ) ;
60
98
61
99
// ABC233 - ABC318: 8 tasks (A, B, C, D, E, F, G and Ex)
62
- const abc233_a = createTaskResultWithTaskTableIndex ( 'abc233' , 'abc233_a' , 'A' , AC ) ;
63
- const abc233_b = createTaskResultWithTaskTableIndex ( 'abc233' , 'abc233_b' , 'B' , TRYING ) ;
64
- const abc233_ex = createTaskResultWithTaskTableIndex ( 'abc233' , 'abc233_ex' , 'Ex' , PENDING ) ;
65
- const abc234_ex = createTaskResultWithTaskTableIndex ( 'abc234' , 'abc234_ex' , 'Ex' , AC ) ;
66
- const abc317_ex = createTaskResultWithTaskTableIndex ( 'abc317' , 'abc317_ex' , 'Ex' , TRYING ) ;
67
- const abc318_ex = createTaskResultWithTaskTableIndex ( 'abc318' , 'abc318_ex' , 'Ex' , PENDING ) ;
100
+ const [ abc233_a , abc233_b , abc233_ex ] = createContestTasks ( 'abc233' , [
101
+ { taskTableIndex : 'A' , statusName : AC } ,
102
+ { taskTableIndex : 'B' , statusName : TRYING } ,
103
+ { taskTableIndex : 'Ex' , statusName : PENDING } ,
104
+ ] ) ;
105
+ const [ abc234_ex ] = createContestTasks ( 'abc234' , [ { taskTableIndex : 'Ex' , statusName : AC } ] ) ;
106
+ const [ abc317_ex ] = createContestTasks ( 'abc317' , [ { taskTableIndex : 'Ex' , statusName : TRYING } ] ) ;
107
+ const [ abc318_ex ] = createContestTasks ( 'abc318' , [ { taskTableIndex : 'Ex' , statusName : PENDING } ] ) ;
68
108
69
109
// ABC319 - : 7 tasks (A, B, C, D, E, F and G)
70
- const abc319_a = createTaskResultWithTaskTableIndex ( 'abc319' , 'abc319_a' , 'A' , AC ) ;
71
- const abc319_b = createTaskResultWithTaskTableIndex ( 'abc319' , 'abc319_b' , 'B' , AC ) ;
72
- const abc319_c = createTaskResultWithTaskTableIndex ( 'abc319' , 'abc319_c' , 'C' , AC ) ;
73
- const abc319_d = createTaskResultWithTaskTableIndex ( 'abc319' , 'abc319_d' , 'D' , AC ) ;
74
- const abc319_e = createTaskResultWithTaskTableIndex ( 'abc319' , 'abc319_e' , 'E' , AC_WITH_EDITORIAL ) ;
75
- const abc319_f = createTaskResultWithTaskTableIndex ( 'abc319' , 'abc319_f' , 'F' , TRYING ) ;
76
- const abc319_g = createTaskResultWithTaskTableIndex ( 'abc319' , 'abc319_g' , 'G' , PENDING ) ;
77
- const abc376_g = createTaskResultWithTaskTableIndex ( 'abc376' , 'abc376_g' , 'G' , AC ) ;
78
- const abc377_g = createTaskResultWithTaskTableIndex ( 'abc377' , 'abc377_g' , 'G' , AC ) ;
79
- const abc378_g = createTaskResultWithTaskTableIndex ( 'abc378' , 'abc378_g' , 'G' , TRYING ) ;
80
- const abc379_g = createTaskResultWithTaskTableIndex ( 'abc379' , 'abc379_g' , 'G' , PENDING ) ;
81
- const abc380_g = createTaskResultWithTaskTableIndex ( 'abc380' , 'abc380_g' , 'G' , AC ) ;
82
- const abc381_g = createTaskResultWithTaskTableIndex ( 'abc381' , 'abc381_g' , 'G' , AC_WITH_EDITORIAL ) ;
83
- const abc382_g = createTaskResultWithTaskTableIndex ( 'abc382' , 'abc382_g' , 'G' , TRYING ) ;
84
- const abc383_g = createTaskResultWithTaskTableIndex ( 'abc383' , 'abc383_g' , 'G' , AC ) ;
85
- const abc384_g = createTaskResultWithTaskTableIndex ( 'abc384' , 'abc384_g' , 'G' , AC ) ;
86
- const abc385_g = createTaskResultWithTaskTableIndex ( 'abc385' , 'abc385_g' , 'G' , AC ) ;
87
- const abc386_g = createTaskResultWithTaskTableIndex ( 'abc386' , 'abc386_g' , 'G' , AC_WITH_EDITORIAL ) ;
88
- const abc387_g = createTaskResultWithTaskTableIndex ( 'abc387' , 'abc387_g' , 'G' , TRYING ) ;
89
- const abc388_g = createTaskResultWithTaskTableIndex ( 'abc388' , 'abc388_g' , 'G' , TRYING ) ;
90
- const abc389_g = createTaskResultWithTaskTableIndex ( 'abc389' , 'abc389_g' , 'G' , TRYING ) ;
91
- const abc390_g = createTaskResultWithTaskTableIndex ( 'abc390' , 'abc390_g' , 'G' , TRYING ) ;
92
- const abc391_g = createTaskResultWithTaskTableIndex ( 'abc391' , 'abc391_g' , 'G' , TRYING ) ;
93
- const abc392_g = createTaskResultWithTaskTableIndex ( 'abc392' , 'abc392_g' , 'G' , TRYING ) ;
94
- const abc393_g = createTaskResultWithTaskTableIndex ( 'abc393' , 'abc393_g' , 'G' , TRYING ) ;
95
- const abc394_g = createTaskResultWithTaskTableIndex ( 'abc394' , 'abc394_g' , 'G' , TRYING ) ;
96
- const abc395_g = createTaskResultWithTaskTableIndex ( 'abc395' , 'abc395_g' , 'G' , TRYING ) ;
97
- const abc396_g = createTaskResultWithTaskTableIndex ( 'abc396' , 'abc396_g' , 'G' , TRYING ) ;
98
- const abc397_g = createTaskResultWithTaskTableIndex ( 'abc397' , 'abc397_g' , 'G' , TRYING ) ;
110
+ const [ abc319_a , abc319_b , abc319_c , abc319_d , abc319_e , abc319_f , abc319_g ] = createContestTasks (
111
+ 'abc319' ,
112
+ [
113
+ { taskTableIndex : 'A' , statusName : AC } ,
114
+ { taskTableIndex : 'B' , statusName : AC } ,
115
+ { taskTableIndex : 'C' , statusName : AC } ,
116
+ { taskTableIndex : 'D' , statusName : AC } ,
117
+ { taskTableIndex : 'E' , statusName : AC_WITH_EDITORIAL } ,
118
+ { taskTableIndex : 'F' , statusName : TRYING } ,
119
+ { taskTableIndex : 'G' , statusName : PENDING } ,
120
+ ] ,
121
+ ) ;
122
+
123
+ const [
124
+ abc376_g ,
125
+ abc377_g ,
126
+ abc378_g ,
127
+ abc379_g ,
128
+ abc380_g ,
129
+ abc381_g ,
130
+ abc382_g ,
131
+ abc383_g ,
132
+ abc384_g ,
133
+ abc385_g ,
134
+ abc386_g ,
135
+ abc387_g ,
136
+ abc388_g ,
137
+ abc389_g ,
138
+ abc390_g ,
139
+ abc391_g ,
140
+ abc392_g ,
141
+ abc393_g ,
142
+ abc394_g ,
143
+ abc395_g ,
144
+ abc396_g ,
145
+ abc397_g ,
146
+ ] = Array . from ( { length : 22 } , ( _ , i ) => {
147
+ const contestNum = 376 + i ;
148
+ const contestId = `abc${ contestNum } ` ;
149
+ const taskId = `${ contestId } _g` ;
150
+ // Alternating statuses for variety
151
+ let statusName ;
152
+
153
+ if ( i % 4 === 0 ) {
154
+ statusName = AC ;
155
+ } else if ( i % 4 === 1 ) {
156
+ statusName = AC_WITH_EDITORIAL ;
157
+ } else if ( i % 4 === 2 ) {
158
+ statusName = TRYING ;
159
+ } else {
160
+ statusName = PENDING ;
161
+ }
162
+
163
+ return createTaskResultWithTaskTableIndex ( contestId , taskId , 'G' , statusName ) ;
164
+ } ) ;
99
165
100
166
export const taskResultsForContestTableProvider : TaskResults = [
101
167
abc212_a ,
0 commit comments