Skip to content

Commit d4ebc98

Browse files
authored
Fix - Update staff group (#898)
* drop group name unqiue index, add per_course_group_name unique index * update staff cr when updating group * update staff cr when updating group
1 parent c9d0479 commit d4ebc98

File tree

2 files changed

+35
-7
lines changed

2 files changed

+35
-7
lines changed

lib/cadet/courses/courses.ex

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -238,13 +238,12 @@ defmodule Cadet.Courses do
238238
case role do
239239
# If student, update his course registration
240240
:student ->
241-
course_reg
242-
|> CourseRegistration.changeset(%{group_id: group.id})
243-
|> Repo.update()
241+
update_course_reg_group(course_reg, group.id)
244242

245243
# If admin or staff, remove their previous group assignment and set them as group leader
246244
_ ->
247245
remove_staff_from_group(course_id, course_reg.id)
246+
update_course_reg_group(course_reg, group.id)
248247

249248
group
250249
|> Group.changeset(%{leader_id: course_reg.id})
@@ -268,12 +267,11 @@ defmodule Cadet.Courses do
268267
|> Repo.one()} do
269268
case role do
270269
:student ->
271-
course_reg
272-
|> CourseRegistration.changeset(%{group_id: nil})
273-
|> Repo.update()
270+
update_course_reg_group(course_reg, nil)
274271

275272
_ ->
276273
remove_staff_from_group(course_id, course_reg.id)
274+
update_course_reg_group(course_reg, nil)
277275
{:ok, nil}
278276
end
279277
end
@@ -295,6 +293,12 @@ defmodule Cadet.Courses do
295293
end
296294
end
297295

296+
defp update_course_reg_group(course_reg, group_id) do
297+
course_reg
298+
|> CourseRegistration.changeset(%{group_id: group_id})
299+
|> Repo.update()
300+
end
301+
298302
@doc """
299303
Get a group based on the group name and course id or create one if it doesn't exist
300304
"""

test/cadet/courses/courses_test.exs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -488,18 +488,42 @@ defmodule Cadet.CoursesTest do
488488
)
489489
end
490490

491-
test "succeeds when upsert same group name to another course" do
491+
test "succeeds when upsert same group name to another course", %{
492+
course: course,
493+
existing_group_leader: existing_group_leader
494+
} do
492495
course2 = insert(:course)
493496

494497
new_group_leader = insert(:course_registration, %{course: course2, role: :staff})
495498
new_group_student = insert(:course_registration, %{course: course2, role: :student})
496499

500+
assert is_nil(
501+
Group
502+
|> where(course_id: ^course2.id)
503+
|> where(name: "Existing Group")
504+
|> Repo.one()
505+
)
506+
497507
usernames_and_groups = [
498508
%{username: new_group_student.user.username, group: "Existing Group"},
499509
%{username: new_group_leader.user.username, group: "Existing Group"}
500510
]
501511

502512
assert :ok == Courses.upsert_groups_in_course(usernames_and_groups, course2.id, "test")
513+
514+
group = Group |> where(course_id: ^course.id) |> where(name: "Existing Group") |> Repo.one()
515+
assert group |> Map.fetch!(:leader_id) == existing_group_leader.id
516+
517+
group2 =
518+
Group |> where(course_id: ^course2.id) |> where(name: "Existing Group") |> Repo.one()
519+
520+
assert group2 |> Map.fetch!(:leader_id) == new_group_leader.id
521+
522+
student = CourseRegistration |> Repo.get(new_group_student.id)
523+
assert student |> Map.fetch!(:group_id) == group2.id
524+
525+
leader = CourseRegistration |> Repo.get(new_group_leader.id)
526+
assert leader |> Map.fetch!(:group_id) == group2.id
503527
end
504528
end
505529

0 commit comments

Comments
 (0)