Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion partner_programs/solution_publication_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ def finalize_response(self, request, response, *args, **kwargs):
return response

def program(self, pk):
program = program_for(pk)
program = getattr(self, "visibility_program", None) or program_for(pk)
if program.draft or program.solution_storage_mode != "solution":
raise Http404
return program
Expand Down
4 changes: 4 additions & 0 deletions partner_programs/tests/test_dev_publication_audit.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@ def test_all_program_audit_checks_eligible_closed_and_draft_without_business_edi
for key, value in changes.items():
setattr(program, key, value)
program.save()
create_partner_program(
solution_storage_mode="solution", draft=True,
datetime_started=None, datetime_finished=None, datetime_registration_ends=None,
)
with patch.dict(os.environ, VERIFY_EXPECTED_API_SHA="a" * 40, VERIFY_PHASE="verify_publication"):
with patch("builtins.print") as output:
main()
Expand Down
5 changes: 4 additions & 1 deletion partner_programs/tests/test_published_projects_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,10 @@ def test_flag_future_draft_and_solution_mode_do_not_open_legacy_reader(self):
self.read(f"/programs/{program.pk}/published-projects/").status_code,
404,
)
self.assertEqual(self.read(f"/programs/{program.pk}/").status_code, 200)
self.assertEqual(
self.read(f"/programs/{program.pk}/").status_code,
404 if program.draft else 200,
)
self.assertIn(self.read(f"/projects/{hidden.pk}/").status_code, (401, 403))
hidden.refresh_from_db()
self.assertFalse(hidden.is_public)
Expand Down
2 changes: 1 addition & 1 deletion partner_programs/tests/test_solution_publication.py
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ def test_first_list_at_deadline_and_late_flag_enable_are_immediate(self):
def test_program_page_publishes_and_draft_program_stays_private(self):
PartnerProgram.objects.filter(pk=self.program.pk).update(draft=True)
self.assertEqual(APIClient().get(self.public_url).status_code, 404)
self.assertEqual(APIClient().get(f"/programs/{self.program.pk}/").status_code, 200)
self.assertEqual(APIClient().get(f"/programs/{self.program.pk}/").status_code, 404)
self.assertEqual(self.publish(), 0)
self.solution.refresh_from_db()
self.assertIsNone(self.solution.published_at)
Expand Down
9 changes: 5 additions & 4 deletions scripts/verify_program_publication_dev.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ def all_ids(path, kind):
and program.datetime_finished <= now
)
# The ordinary program page must be sufficient; no task/service call here.
read(root)
read(root, 404 if program.draft else 200)
if program.solution_storage_mode == "legacy_project":
path = root + "published-projects/"
if due:
Expand Down Expand Up @@ -156,11 +156,12 @@ def all_ids(path, kind):
assert set(material) == {"application", "published_at", "fields", "answers", "team"}
assert material["application"]["program_id"] == program.pk
assert material["application"]["solution_id"] == pk
read(root + "projects/", 401)
read(root + "projects/", 404 if program.draft else 401)
results.append(dict(
program_id=program.pk, mode=program.solution_storage_mode,
draft=program.draft, publication_enabled=program.publish_projects_after_finish,
finished=program.datetime_finished <= now, published_count=len(actual),
finished=bool(program.datetime_finished and program.datetime_finished <= now),
published_count=len(actual),
))

assert dict(Project.objects.values_list("pk", "is_public")) == expected_projects
Expand All @@ -169,7 +170,7 @@ def all_ids(path, kind):
assert after == before, "Non-publication data changed"
# Repeat every program request; original publication timestamps must survive.
for program in programs:
read(f"/programs/{program.pk}/")
read(f"/programs/{program.pk}/", 404 if program.draft else 200)
assert dict(Project.objects.values_list("pk", "is_public")) == expected_projects
assert dict(ProgramSolution.all_objects.values_list("pk", "published_at")) == expected_solutions
assert snapshot() == before
Expand Down
2 changes: 1 addition & 1 deletion scripts/verify_program_solutions_dev.py
Original file line number Diff line number Diff line change
Expand Up @@ -384,7 +384,7 @@ def request(actor, method, path, body=None, expected=200, binary=False):
request(None, "get", f"/projects/{work.pk}/")
checks.append("legacy-immediate-publication-without-job-only-is-public-changed")
for old in PartnerProgram.objects.filter(pk__in=legacy_before).order_by("pk"):
request(None, "get", f"/programs/{old.pk}/")
request(None, "get", f"/programs/{old.pk}/", expected=404 if old.draft else 200)
manager = old.managers.first()
if manager is not None:
request(manager, "get", f"/programs/{old.pk}/management/projects/")
Expand Down
Loading