Skip to content

Commit 7663bf2

Browse files
committed
Modified AssessmentsController tests to fit with changes to how the is_published parameter is now handled
1 parent 1a07757 commit 7663bf2

File tree

1 file changed

+151
-73
lines changed

1 file changed

+151
-73
lines changed

test/cadet_web/controllers/assessments_controller_test.exs

Lines changed: 151 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ defmodule CadetWeb.AssessmentsControllerTest do
6464
"maxXp" => 4500,
6565
"status" => get_assessment_status(user, &1),
6666
"gradingStatus" => "excluded",
67-
"private" => false
67+
"private" => false,
68+
"isPublished" => &1.is_published
6869
}
6970
)
7071

@@ -80,7 +81,7 @@ defmodule CadetWeb.AssessmentsControllerTest do
8081
end
8182
end
8283

83-
test "does not render unpublished assessments", %{
84+
test "render password protected assessments properly", %{
8485
conn: conn,
8586
users: users,
8687
assessments: assessments
@@ -90,74 +91,73 @@ defmodule CadetWeb.AssessmentsControllerTest do
9091

9192
{:ok, _} =
9293
mission.assessment
93-
|> Assessment.changeset(%{is_published: false})
94+
|> Assessment.changeset(%{password: "mysupersecretpassword"})
9495
|> Repo.update()
9596

96-
expected =
97-
assessments
98-
|> Map.delete(:mission)
99-
|> Map.values()
100-
|> Enum.map(fn a -> a.assessment end)
101-
|> Enum.sort(&open_at_asc_comparator/2)
102-
|> Enum.map(
103-
&%{
104-
"id" => &1.id,
105-
"title" => &1.title,
106-
"shortSummary" => &1.summary_short,
107-
"story" => &1.story,
108-
"number" => &1.number,
109-
"reading" => &1.reading,
110-
"openAt" => format_datetime(&1.open_at),
111-
"closeAt" => format_datetime(&1.close_at),
112-
"type" => "#{&1.type}",
113-
"coverImage" => &1.cover_picture,
114-
"maxGrade" => 720,
115-
"maxXp" => 4500,
116-
"status" => get_assessment_status(user, &1),
117-
"gradingStatus" => "excluded",
118-
"private" => false
119-
}
120-
)
121-
12297
resp =
12398
conn
12499
|> sign_in(user)
125100
|> get(build_url())
126101
|> json_response(200)
127-
|> Enum.map(&Map.delete(&1, "xp"))
128-
|> Enum.map(&Map.delete(&1, "grade"))
102+
|> Enum.find(&(&1["type"] == "mission"))
103+
|> Map.get("private")
129104

130-
assert expected == resp
105+
assert resp == true
131106
end
132107
end
108+
end
133109

134-
test "render password protected assessments properly", %{
110+
describe "GET /, student only" do
111+
test "does not render unpublished assessments", %{
135112
conn: conn,
136-
users: users,
113+
users: %{student: student},
137114
assessments: assessments
138115
} do
139-
for {_role, user} <- users do
140-
mission = assessments.mission
116+
mission = assessments.mission
141117

142-
{:ok, _} =
143-
mission.assessment
144-
|> Assessment.changeset(%{password: "mysupersecretpassword"})
145-
|> Repo.update()
118+
{:ok, _} =
119+
mission.assessment
120+
|> Assessment.changeset(%{is_published: false})
121+
|> Repo.update()
146122

147-
resp =
148-
conn
149-
|> sign_in(user)
150-
|> get(build_url())
151-
|> json_response(200)
152-
|> Enum.find(&(&1["type"] == "mission"))
153-
|> Map.get("private")
123+
expected =
124+
assessments
125+
|> Map.delete(:mission)
126+
|> Map.values()
127+
|> Enum.map(fn a -> a.assessment end)
128+
|> Enum.sort(&open_at_asc_comparator/2)
129+
|> Enum.map(
130+
&%{
131+
"id" => &1.id,
132+
"title" => &1.title,
133+
"shortSummary" => &1.summary_short,
134+
"story" => &1.story,
135+
"number" => &1.number,
136+
"reading" => &1.reading,
137+
"openAt" => format_datetime(&1.open_at),
138+
"closeAt" => format_datetime(&1.close_at),
139+
"type" => "#{&1.type}",
140+
"coverImage" => &1.cover_picture,
141+
"maxGrade" => 720,
142+
"maxXp" => 4500,
143+
"status" => get_assessment_status(student, &1),
144+
"gradingStatus" => "excluded",
145+
"private" => false,
146+
"isPublished" => &1.is_published
147+
}
148+
)
154149

155-
assert resp == true
156-
end
150+
resp =
151+
conn
152+
|> sign_in(student)
153+
|> get(build_url())
154+
|> json_response(200)
155+
|> Enum.map(&Map.delete(&1, "xp"))
156+
|> Enum.map(&Map.delete(&1, "grade"))
157+
158+
assert expected == resp
157159
end
158-
end
159160

160-
describe "GET /, student only" do
161161
test "renders student submission status in overview", %{
162162
conn: conn,
163163
users: %{student: student},
@@ -220,6 +220,65 @@ defmodule CadetWeb.AssessmentsControllerTest do
220220
end
221221
end
222222

223+
describe "GET /, non-students" do
224+
test "renders unpublished assessments", %{
225+
conn: conn,
226+
users: users,
227+
assessments: assessments
228+
} do
229+
for role <- ~w(staff admin)a do
230+
user = Map.get(users, role)
231+
mission = assessments.mission
232+
233+
{:ok, _} =
234+
mission.assessment
235+
|> Assessment.changeset(%{is_published: false})
236+
|> Repo.update()
237+
238+
resp =
239+
conn
240+
|> sign_in(user)
241+
|> get(build_url())
242+
|> json_response(200)
243+
|> Enum.map(&Map.delete(&1, "xp"))
244+
|> Enum.map(&Map.delete(&1, "grade"))
245+
246+
expected =
247+
assessments
248+
|> Map.values()
249+
|> Enum.map(fn a -> a.assessment end)
250+
|> Enum.sort(&open_at_asc_comparator/2)
251+
|> Enum.map(
252+
&%{
253+
"id" => &1.id,
254+
"title" => &1.title,
255+
"shortSummary" => &1.summary_short,
256+
"story" => &1.story,
257+
"number" => &1.number,
258+
"reading" => &1.reading,
259+
"openAt" => format_datetime(&1.open_at),
260+
"closeAt" => format_datetime(&1.close_at),
261+
"type" => "#{&1.type}",
262+
"coverImage" => &1.cover_picture,
263+
"maxGrade" => 720,
264+
"maxXp" => 4500,
265+
"status" => get_assessment_status(user, &1),
266+
"gradingStatus" => "excluded",
267+
"private" => false,
268+
"isPublished" =>
269+
if &1.type == :mission do
270+
false
271+
else
272+
&1.is_published
273+
end
274+
}
275+
)
276+
277+
assert expected == resp
278+
end
279+
end
280+
end
281+
223282
describe "POST /assessment_id, all roles" do
224283
test "it renders assessment details", %{
225284
conn: conn,
@@ -499,28 +558,6 @@ defmodule CadetWeb.AssessmentsControllerTest do
499558
end
500559
end
501560
end
502-
503-
test "it does not permit access to unpublished assessments", %{
504-
conn: conn,
505-
users: users,
506-
assessments: %{mission: mission}
507-
} do
508-
for role <- Role.__enum_map__() do
509-
user = Map.get(users, role)
510-
511-
{:ok, _} =
512-
mission.assessment
513-
|> Assessment.changeset(%{is_published: false})
514-
|> Repo.update()
515-
516-
conn =
517-
conn
518-
|> sign_in(user)
519-
|> post(build_url(mission.assessment.id))
520-
521-
assert response(conn, 400) == "Assessment not found"
522-
end
523-
end
524561
end
525562

526563
describe "POST /assessment_id, student" do
@@ -601,6 +638,24 @@ defmodule CadetWeb.AssessmentsControllerTest do
601638

602639
assert response(conn, 401) == "Assessment not open"
603640
end
641+
642+
test "it does not permit access to unpublished assessments", %{
643+
conn: conn,
644+
users: %{student: student},
645+
assessments: %{mission: mission}
646+
} do
647+
{:ok, _} =
648+
mission.assessment
649+
|> Assessment.changeset(%{is_published: false})
650+
|> Repo.update()
651+
652+
conn =
653+
conn
654+
|> sign_in(student)
655+
|> post(build_url(mission.assessment.id))
656+
657+
assert response(conn, 400) == "Assessment not found"
658+
end
604659
end
605660

606661
describe "POST /assessment_id, non-students" do
@@ -650,6 +705,29 @@ defmodule CadetWeb.AssessmentsControllerTest do
650705
assert resp["id"] == mission.assessment.id
651706
end
652707
end
708+
709+
test "it permits access to unpublished assessments", %{
710+
conn: conn,
711+
users: users,
712+
assessments: %{mission: mission}
713+
} do
714+
for role <- ~w(staff admin)a do
715+
user = Map.get(users, role)
716+
717+
{:ok, _} =
718+
mission.assessment
719+
|> Assessment.changeset(%{is_published: false})
720+
|> Repo.update()
721+
722+
resp =
723+
conn
724+
|> sign_in(user)
725+
|> post(build_url(mission.assessment.id))
726+
|> json_response(200)
727+
728+
assert resp["id"] == mission.assessment.id
729+
end
730+
end
653731
end
654732

655733
describe "POST /assessment_id/submit unauthenticated" do

0 commit comments

Comments
 (0)