@@ -125,7 +125,7 @@ def test_load_installed_challenge(self, mock_api: MagicMock):
125125 Challenge .load_installed_challenge (1 )
126126
127127 mock_get = mock_api .return_value .get
128- mock_get .assert_called_once_with ("/api/v1/challenges/1" )
128+ mock_get .assert_called_once_with ("/api/v1/challenges/1?view=admin " )
129129
130130 @mock .patch ("ctfcli.core.challenge.API" )
131131 def test_load_installed_challenges (self , mock_api : MagicMock ):
@@ -211,7 +211,7 @@ def test_updates_simple_properties(self, mock_api_constructor: MagicMock, *args,
211211 # expect GET calls loading existing resources to check if something needs to be deleted
212212 mock_api .get .assert_has_calls (
213213 [
214- call ("/api/v1/challenges/1" ),
214+ call ("/api/v1/challenges/1?view=admin " ),
215215 call ("/api/v1/flags" ),
216216 call ("/api/v1/challenges/1/topics" ),
217217 call ("/api/v1/tags" ),
@@ -223,6 +223,8 @@ def test_updates_simple_properties(self, mock_api_constructor: MagicMock, *args,
223223 [
224224 call ("/api/v1/challenges/1" , json = expected_challenge_payload ),
225225 call ().raise_for_status (),
226+ call ("/api/v1/challenges/1" , json = {"next_id" : None }),
227+ call ().raise_for_status (),
226228 call ("/api/v1/challenges/1" , json = {"state" : "visible" }),
227229 call ().raise_for_status (),
228230 ]
@@ -253,7 +255,7 @@ def test_updates_attempts(self, mock_api_constructor: MagicMock, *args, **kwargs
253255
254256 mock_api .get .assert_has_calls (
255257 [
256- call ("/api/v1/challenges/1" ),
258+ call ("/api/v1/challenges/1?view=admin " ),
257259 call ("/api/v1/flags" ),
258260 call ("/api/v1/challenges/1/topics" ),
259261 call ("/api/v1/tags" ),
@@ -301,7 +303,7 @@ def test_updates_extra_properties(self, mock_api_constructor: MagicMock, *args,
301303
302304 mock_api .get .assert_has_calls (
303305 [
304- call ("/api/v1/challenges/1" ),
306+ call ("/api/v1/challenges/1?view=admin " ),
305307 call ("/api/v1/flags" ),
306308 call ("/api/v1/challenges/1/topics" ),
307309 call ("/api/v1/tags" ),
@@ -373,7 +375,7 @@ def test_updates_flags(self, mock_api_constructor: MagicMock, *args, **kwargs):
373375
374376 mock_api .get .assert_has_calls (
375377 [
376- call ("/api/v1/challenges/1" ),
378+ call ("/api/v1/challenges/1?view=admin " ),
377379 call ("/api/v1/flags" ),
378380 call ("/api/v1/challenges/1/topics" ),
379381 call ("/api/v1/tags" ),
@@ -455,7 +457,7 @@ def test_updates_topics(self, mock_api_constructor: MagicMock, *args, **kwargs):
455457
456458 mock_api .get .assert_has_calls (
457459 [
458- call ("/api/v1/challenges/1" ),
460+ call ("/api/v1/challenges/1?view=admin " ),
459461 call ("/api/v1/flags" ),
460462 call ("/api/v1/challenges/1/topics" ),
461463 call ("/api/v1/tags" ),
@@ -516,7 +518,7 @@ def test_updates_tags(self, mock_api_constructor: MagicMock, *args, **kwargs):
516518
517519 mock_api .get .assert_has_calls (
518520 [
519- call ("/api/v1/challenges/1" ),
521+ call ("/api/v1/challenges/1?view=admin " ),
520522 call ("/api/v1/flags" ),
521523 call ("/api/v1/challenges/1/topics" ),
522524 call ("/api/v1/tags" ),
@@ -570,7 +572,7 @@ def test_updates_files(self, mock_api_constructor: MagicMock, *args, **kwargs):
570572 def mock_get (* args , ** kwargs ):
571573 path = args [0 ]
572574
573- if path == "/api/v1/challenges/1" :
575+ if path == "/api/v1/challenges/1" or path == "/api/v1/challenges/1?view=admin" :
574576 mock_response = MagicMock ()
575577 mock_response .json .return_value = {"success" : True , "data" : self .installed_challenges [0 ]}
576578 return mock_response
@@ -595,7 +597,7 @@ def mock_get(*args, **kwargs):
595597
596598 mock_api .get .assert_has_calls (
597599 [
598- call ("/api/v1/challenges/1" ),
600+ call ("/api/v1/challenges/1?view=admin " ),
599601 call ("/api/v1/flags" ),
600602 call ("/api/v1/challenges/1/topics" ),
601603 call ("/api/v1/tags" ),
@@ -682,7 +684,7 @@ def test_updates_hints(self, mock_api_constructor: MagicMock, *args, **kwargs):
682684
683685 mock_api .get .assert_has_calls (
684686 [
685- call ("/api/v1/challenges/1" ),
687+ call ("/api/v1/challenges/1?view=admin " ),
686688 call ("/api/v1/flags" ),
687689 call ("/api/v1/challenges/1/topics" ),
688690 call ("/api/v1/tags" ),
@@ -736,7 +738,7 @@ def test_updates_requirements(self, mock_api_constructor: MagicMock, *args, **kw
736738
737739 mock_api .get .assert_has_calls (
738740 [
739- call ("/api/v1/challenges/1" ),
741+ call ("/api/v1/challenges/1?view=admin " ),
740742 ]
741743 )
742744
@@ -745,7 +747,9 @@ def test_updates_requirements(self, mock_api_constructor: MagicMock, *args, **kw
745747 call ("/api/v1/challenges/1" , json = expected_challenge_payload ),
746748 call ().raise_for_status (),
747749 # challenge 2 retrieved by name, and challenge 3 retrieved by id
748- call ("/api/v1/challenges/1" , json = {"requirements" : {"prerequisites" : [2 , 3 ]}}),
750+ call ("/api/v1/challenges/1" , json = {"requirements" : {"prerequisites" : [2 , 3 ], "anonymize" : False }}),
751+ call ().raise_for_status (),
752+ call ("/api/v1/challenges/1" , json = {"next_id" : None }),
749753 call ().raise_for_status (),
750754 ]
751755 )
@@ -796,7 +800,7 @@ def mock_get(*args, **kwargs):
796800 [
797801 call ("/api/v1/challenges/1" , json = expected_challenge_payload ),
798802 call ().raise_for_status (),
799- call ("/api/v1/challenges/1" , json = {"requirements" : {"prerequisites" : [2 ]}}),
803+ call ("/api/v1/challenges/1" , json = {"requirements" : {"prerequisites" : [2 ], "anonymize" : False }}),
800804 call ().raise_for_status (),
801805 ],
802806 any_order = True ,
@@ -810,7 +814,7 @@ def mock_get(*args, **kwargs):
810814
811815 mock_api .get .assert_has_calls (
812816 [
813- call ("/api/v1/challenges/1" ),
817+ call ("/api/v1/challenges/1?view=admin " ),
814818 ]
815819 )
816820 mock_api .post .assert_not_called ()
@@ -840,7 +844,7 @@ def test_defaults_to_standard_challenge_type(self, mock_api_constructor: MagicMo
840844
841845 mock_api .get .assert_has_calls (
842846 [
843- call ("/api/v1/challenges/1" ),
847+ call ("/api/v1/challenges/1?view=admin " ),
844848 call ("/api/v1/flags" ),
845849 call ("/api/v1/challenges/1/topics" ),
846850 call ("/api/v1/tags" ),
@@ -880,7 +884,7 @@ def test_defaults_to_visible_state(self, mock_api_constructor: MagicMock, *args,
880884
881885 mock_api .get .assert_has_calls (
882886 [
883- call ("/api/v1/challenges/1" ),
887+ call ("/api/v1/challenges/1?view=admin " ),
884888 call ("/api/v1/flags" ),
885889 call ("/api/v1/challenges/1/topics" ),
886890 call ("/api/v1/tags" ),
@@ -892,6 +896,8 @@ def test_defaults_to_visible_state(self, mock_api_constructor: MagicMock, *args,
892896 [
893897 call ("/api/v1/challenges/1" , json = expected_challenge_payload ),
894898 call ().raise_for_status (),
899+ call ("/api/v1/challenges/1" , json = {"next_id" : None }),
900+ call ().raise_for_status (),
895901 # this tests the real assigned state
896902 call ("/api/v1/challenges/1" , json = {"state" : "visible" }),
897903 call ().raise_for_status (),
@@ -988,7 +994,7 @@ def test_updates_multiple_attributes_at_once(self, mock_api_constructor: MagicMo
988994
989995 mock_api .get .assert_has_calls (
990996 [
991- call ("/api/v1/challenges/1" ),
997+ call ("/api/v1/challenges/1?view=admin " ),
992998 call ("/api/v1/flags" ),
993999 call ("/api/v1/challenges/1/topics" ),
9941000 call ("/api/v1/tags" ),
@@ -1002,7 +1008,9 @@ def test_updates_multiple_attributes_at_once(self, mock_api_constructor: MagicMo
10021008 [
10031009 call ("/api/v1/challenges/1" , json = expected_challenge_payload ),
10041010 call ().raise_for_status (),
1005- call ("/api/v1/challenges/1" , json = {"requirements" : {"prerequisites" : [2 ]}}),
1011+ call ("/api/v1/challenges/1" , json = {"requirements" : {"prerequisites" : [2 ], "anonymize" : False }}),
1012+ call ().raise_for_status (),
1013+ call ("/api/v1/challenges/1" , json = {"next_id" : None }),
10061014 call ().raise_for_status (),
10071015 call ("/api/v1/challenges/1" , json = {"state" : "visible" }),
10081016 call ().raise_for_status (),
@@ -1122,6 +1130,8 @@ def test_does_not_update_ignored_attributes(self):
11221130 [
11231131 call ("/api/v1/challenges/1" , json = expected_challenge_payload ),
11241132 call ().raise_for_status (),
1133+ call ("/api/v1/challenges/1" , json = {"next_id" : None }),
1134+ call ().raise_for_status (),
11251135 call ("/api/v1/challenges/1" , json = {"state" : "visible" }),
11261136 call ().raise_for_status (),
11271137 ]
@@ -1234,7 +1244,9 @@ def mock_post(*args, **kwargs):
12341244
12351245 mock_api .patch .assert_has_calls (
12361246 [
1237- call ("/api/v1/challenges/3" , json = {"requirements" : {"prerequisites" : [1 , 2 ]}}),
1247+ call ("/api/v1/challenges/3" , json = {"requirements" : {"prerequisites" : [1 , 2 ], "anonymize" : False }}),
1248+ call ().raise_for_status (),
1249+ call ("/api/v1/challenges/3" , json = {"next_id" : None }),
12381250 call ().raise_for_status (),
12391251 call ("/api/v1/challenges/3" , json = {"state" : "visible" }),
12401252 call ().raise_for_status (),
@@ -1529,7 +1541,7 @@ def mock_get(self, *args, **kwargs):
15291541 mock_response .json .return_value = {"success" : True , "data" : self .installed_challenges }
15301542 return mock_response
15311543
1532- if path == "/api/v1/challenges/3" :
1544+ if path == "/api/v1/challenges/3" or path == "/api/v1/challenges/3?view=admin" :
15331545 mock_response = MagicMock ()
15341546 mock_response .json .return_value = {
15351547 "success" : True ,
@@ -1540,7 +1552,7 @@ def mock_get(self, *args, **kwargs):
15401552 "description" : "Test Description" ,
15411553 "attribution" : "Test Attribution" ,
15421554 "connection_info" : "https://example.com" ,
1543- "next_id" : None ,
1555+ "next_id" : 0 ,
15441556 "category" : "Test" ,
15451557 "state" : "visible" ,
15461558 "max_attempts" : 5 ,
@@ -1733,6 +1745,8 @@ def test_normalize_fetches_and_normalizes_challenge(self, mock_api_constructor:
17331745 "tags" : ["tag-1" , "tag-2" ],
17341746 "hints" : ["free hint" , {"content" : "paid hint" , "cost" : 100 }],
17351747 "topics" : ["topic-1" , "topic-2" ],
1748+ "next_id" : None ,
1749+ "require_anonymize" : False ,
17361750 "requirements" : ["First Test Challenge" , "Other Test Challenge" ],
17371751 "extra" : {
17381752 "initial" : 100 ,
@@ -1753,6 +1767,7 @@ def test_verify_checks_if_challenge_is_the_same(self, mock_api_constructor: Magi
17531767 # pop keys with default values to see if they are ignored
17541768 for p in ["type" , "state" ]:
17551769 challenge .pop (p )
1770+ print (challenge )
17561771
17571772 challenge .challenge_id = 3
17581773 self .assertTrue (challenge .verify (ignore = ["files" ]))
0 commit comments