Skip to content

Commit adb2f3e

Browse files
committed
Updated to pass tests
1 parent 32c5591 commit adb2f3e

File tree

1 file changed

+36
-21
lines changed

1 file changed

+36
-21
lines changed

tests/core/test_challenge.py

Lines changed: 36 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)