• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

source-academy / backend / e0330f2cf38b2d8af12bffd20f4cac2158d607fc-PR-1236

31 Mar 2025 09:12AM UTC coverage: 19.982% (-73.6%) from 93.607%
e0330f2cf38b2d8af12bffd20f4cac2158d607fc-PR-1236

Pull #1236

github

RichDom2185
Redate migrations to maintain total ordering
Pull Request #1236: Added Exam mode

12 of 57 new or added lines in 8 files covered. (21.05%)

2430 existing lines in 97 files now uncovered.

671 of 3358 relevant lines covered (19.98%)

3.03 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

75.0
/lib/cadet/courses/group.ex
1
defmodule Cadet.Courses.Group do
2
  @moduledoc """
3
  The Group entity represent relations between student
4
  and discussion group leader
5
  """
6
  use Cadet, :model
7

8
  alias Cadet.Repo
9
  alias Cadet.Accounts.CourseRegistration
10
  alias Cadet.Courses.Course
11

12
  @type t :: %__MODULE__{
13
          name: String.t(),
14
          leader: CourseRegistration.t() | nil,
15
          course: Course.t() | nil
16
        }
17

18
  schema "groups" do
4✔
19
    field(:name, :string)
20
    belongs_to(:leader, CourseRegistration)
21
    belongs_to(:course, Course)
22

23
    has_many(:students, CourseRegistration)
24
  end
25

26
  @required_fields ~w(name course_id)a
27
  @optional_fields ~w(leader_id)a
28

29
  def changeset(group, attrs \\ %{}) do
30
    group
31
    |> cast(attrs, @required_fields ++ @optional_fields)
32
    |> validate_required(@required_fields)
33
    |> unique_constraint(:per_course_unique_name, name: :unique_name_per_course)
34
    |> add_belongs_to_id_from_model([:leader, :course], attrs)
35
    |> validate_role
36
    |> validate_course
2✔
37
  end
38

39
  defp validate_role(changeset) do
40
    leader_id = get_field(changeset, :leader_id)
2✔
41

42
    if leader_id != nil &&
2✔
UNCOV
43
         !Enum.member?([:staff, :admin], Repo.get(CourseRegistration, leader_id).role) do
×
UNCOV
44
      add_error(changeset, :leader, "is not a staff")
×
45
    else
46
      changeset
2✔
47
    end
48
  end
49

50
  defp validate_course(changeset) do
51
    course_id = get_field(changeset, :course_id)
2✔
52
    leader_id = get_field(changeset, :leader_id)
2✔
53

54
    if leader_id != nil && Repo.get(CourseRegistration, leader_id).course_id != course_id do
2✔
UNCOV
55
      add_error(changeset, :leader, "does not belong to the same course ")
×
56
    else
57
      changeset
2✔
58
    end
59
  end
60
end
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc