3838_DIGEST_1 = bytes_digest (_CONTENT_1 )
3939_DIGEST_2 = bytes_digest (_CONTENT_2 )
4040_DIGEST_3 = bytes_digest (_CONTENT_3 )
41- _FILENAME_1 = "file.c "
41+ _FILENAME_1 = "file.cpp "
4242_FILENAME_2 = "file"
4343_FILENAME_3 = "file.py"
44- _LANGUAGE_1 = "C11 / gcc"
44+ _LANGUAGE_1 = "C++20 / g++"
45+ _LANGUAGE_1_ALT = "C++17 / g++"
4546
4647
4748class TestAddSubmissionMixin (DatabaseMixin , FileSystemMixin ):
@@ -106,65 +107,72 @@ def setUp(self):
106107 def test_success (self ):
107108 self .assertTrue (add_submission (
108109 self .contest .id , self .user .username , self .task .name , _TS ,
109- {"source.%l" : self .get_path (_FILENAME_1 )}))
110+ {"source.%l" : self .get_path (_FILENAME_1 )}, None ))
110111 self .assertSubmissionInDb (_TS , self .task , _LANGUAGE_1 ,
111112 {"source.%l" : _DIGEST_1 })
112113
114+ def test_success_override_language (self ):
115+ self .assertTrue (add_submission (
116+ self .contest .id , self .user .username , self .task .name , _TS ,
117+ {"source.%l" : self .get_path (_FILENAME_1 )}, _LANGUAGE_1_ALT ))
118+ self .assertSubmissionInDb (_TS , self .task , _LANGUAGE_1_ALT ,
119+ {"source.%l" : _DIGEST_1 })
120+
113121 def test_fail_no_task (self ):
114122 # We pass a non-existing task name.
115123 self .assertFalse (add_submission (
116124 self .contest .id , self .user .username , self .task .name + "_wrong" ,
117- _TS , {}))
125+ _TS , {}, None ))
118126 self .assertSubmissionNotInDb (_TS )
119127
120128 def test_fail_no_user (self ):
121129 # We pass a non-existing username.
122130 self .assertFalse (add_submission (
123131 self .contest .id , self .user .username + "_wrong" , self .task .name ,
124- _TS , {}))
132+ _TS , {}, None ))
125133 self .assertSubmissionNotInDb (_TS )
126134
127135 def test_fail_no_contest (self ):
128136 # We pass a non-existing contest id.
129137 self .assertFalse (add_submission (
130138 self .contest .id + 100 , self .user .username , self .task .name , _TS ,
131- {}))
139+ {}, None ))
132140 self .assertSubmissionNotInDb (_TS )
133141
134142 def test_fail_task_not_in_contest (self ):
135143 # We pass a contest that does not contain the task.
136144 self .assertFalse (add_submission (
137145 self .other_contest .id , self .user .username , self .task .name , _TS ,
138- {}))
146+ {}, None ))
139147 self .assertSubmissionNotInDb (_TS )
140148
141149 def test_fail_no_language_inferrable_missing_source (self ):
142150 # Task requires a language, but we don't provide any file that
143151 # indicate it.
144152 self .assertFalse (add_submission (
145- self .contest .id , self .user .username , self .task .name , _TS , {}))
153+ self .contest .id , self .user .username , self .task .name , _TS , {}, None ))
146154 self .assertSubmissionNotInDb (_TS )
147155
148156 def test_fail_no_language_inferrable_missing_extension (self ):
149157 # Task requires a language, but the file we provide does not have
150158 # an extension defining the language.
151159 self .assertFalse (add_submission (
152160 self .contest .id , self .user .username , self .task .name , _TS ,
153- {"source.%l" : self .get_path (_FILENAME_2 )}))
161+ {"source.%l" : self .get_path (_FILENAME_2 )}, None ))
154162 self .assertSubmissionNotInDb (_TS )
155163
156164 def test_fail_file_not_found (self ):
157165 # We provide a path, but the file does not exist.
158166 self .assertFalse (add_submission (
159167 self .contest .id , self .user .username , self .task .name , _TS ,
160- {"source.%l" : self .get_path ("source_not_existing.c" )}))
168+ {"source.%l" : self .get_path ("source_not_existing.c" )}, None ))
161169 self .assertSubmissionNotInDb (_TS )
162170
163171 def test_fail_file_not_in_submission_format (self ):
164172 # We provide a file, but for the wrong filename.
165173 self .assertFalse (add_submission (
166174 self .contest .id , self .user .username , self .task .name , _TS ,
167- {"wrong_source.%l" : self .get_path (_FILENAME_1 )}))
175+ {"wrong_source.%l" : self .get_path (_FILENAME_1 )}, None ))
168176 self .assertSubmissionNotInDb (_TS )
169177
170178
@@ -186,7 +194,7 @@ def test_success_many(self):
186194 self .contest .id , self .user .username , self .task .name , _TS , {
187195 "source1.%l" : self .get_path (_FILENAME_1 ),
188196 "source2.%l" : self .get_path (_FILENAME_1 ),
189- }))
197+ }, None ))
190198 self .assertSubmissionInDb (_TS , self .task , _LANGUAGE_1 , {
191199 "source1.%l" : _DIGEST_1 ,
192200 "source2.%l" : _DIGEST_1 ,
@@ -197,7 +205,7 @@ def test_success_missing_file(self):
197205 # the language.
198206 self .assertTrue (add_submission (
199207 self .contest .id , self .user .username , self .task .name , _TS ,
200- {"source1.%l" : self .get_path (_FILENAME_1 )}))
208+ {"source1.%l" : self .get_path (_FILENAME_1 )}, None ))
201209 self .assertSubmissionInDb (_TS , self .task , _LANGUAGE_1 ,
202210 {"source1.%l" : _DIGEST_1 })
203211
@@ -206,7 +214,7 @@ def test_fail_language_only_in_one(self):
206214 self .contest .id , self .user .username , self .task .name , _TS , {
207215 "source1.%l" : self .get_path (_FILENAME_1 ),
208216 "source2.%l" : self .get_path (_FILENAME_2 ),
209- }))
217+ }, None ))
210218 self .assertSubmissionNotInDb (_TS )
211219
212220 def test_fail_inconsistent_language (self ):
@@ -215,7 +223,7 @@ def test_fail_inconsistent_language(self):
215223 self .contest .id , self .user .username , self .task .name , _TS , {
216224 "source1.%l" : self .get_path (_FILENAME_1 ),
217225 "source2.%l" : self .get_path (_FILENAME_3 ),
218- }))
226+ }, None ))
219227 self .assertSubmissionNotInDb (_TS )
220228
221229
@@ -237,7 +245,7 @@ def test_success_many(self):
237245 self .contest .id , self .user .username , self .task .name , _TS , {
238246 "source1.%l" : self .get_path (_FILENAME_1 ),
239247 "source2" : self .get_path (_FILENAME_2 ),
240- }))
248+ }, None ))
241249 self .assertSubmissionInDb (_TS , self .task , _LANGUAGE_1 , {
242250 "source1.%l" : _DIGEST_1 ,
243251 "source2" : _DIGEST_2 ,
@@ -248,7 +256,7 @@ def test_success_missing_source_without_language(self):
248256 # the language.
249257 self .assertTrue (add_submission (
250258 self .contest .id , self .user .username , self .task .name , _TS ,
251- {"source1.%l" : self .get_path (_FILENAME_1 )}))
259+ {"source1.%l" : self .get_path (_FILENAME_1 )}, None ))
252260 self .assertSubmissionInDb (_TS , self .task , _LANGUAGE_1 ,
253261 {"source1.%l" : _DIGEST_1 })
254262
@@ -257,7 +265,7 @@ def test_fail_missing_source_with_language(self):
257265 # the language.
258266 self .assertFalse (add_submission (
259267 self .contest .id , self .user .username , self .task .name , _TS ,
260- {"source2" : self .get_path (_FILENAME_2 )}))
268+ {"source2" : self .get_path (_FILENAME_2 )}, None ))
261269 self .assertSubmissionNotInDb (_TS )
262270
263271
@@ -276,13 +284,13 @@ def setUp(self):
276284 def test_success_no_language (self ):
277285 self .assertTrue (add_submission (
278286 self .contest .id , self .user .username , self .task .name , _TS ,
279- {"source" : self .get_path (_FILENAME_2 )}))
287+ {"source" : self .get_path (_FILENAME_2 )}, None ))
280288 self .assertSubmissionInDb (_TS , self .task , None , {"source" : _DIGEST_2 })
281289
282290 def test_success_no_source (self ):
283291 # Here we don't provide any file, but language is not required.
284292 self .assertTrue (add_submission (
285- self .contest .id , self .user .username , self .task .name , _TS , {}))
293+ self .contest .id , self .user .username , self .task .name , _TS , {}, None ))
286294 self .assertSubmissionInDb (_TS , self .task , None , {})
287295
288296
0 commit comments