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

source-academy / backend / 18dc689a4df4836fc6967bf0f74dc252964bd175-PR-1180

08 Sep 2024 06:14PM UTC coverage: 79.088% (-15.3%) from 94.372%
18dc689a4df4836fc6967bf0f74dc252964bd175-PR-1180

Pull #1180

github

josh1248
Change appropriate routes into admin scope
Pull Request #1180: Transfer groundControl (and admin panel) from staff to admin route

7 of 12 new or added lines in 1 file covered. (58.33%)

499 existing lines in 25 files now uncovered.

2602 of 3290 relevant lines covered (79.09%)

1023.2 hits per line

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

76.19
/lib/cadet_web/admin_controllers/admin_courses_controller.ex
1
defmodule CadetWeb.AdminCoursesController do
2
  use CadetWeb, :controller
3

4
  use PhoenixSwagger
5

6
  alias Cadet.Courses
7

8
  def update_course_config(conn, params = %{"course_id" => course_id})
9
      when is_ecto_id(course_id) do
10
    params = params |> to_snake_case_atom_keys()
3✔
11

12
    case Courses.update_course_config(course_id, params) do
3✔
13
      {:ok, _} ->
14
        text(conn, "OK")
3✔
15

16
      # coveralls-ignore-start
17
      # case of invalid course_id will not happen here
18
      {:error, {status, message}} ->
19
        send_resp(conn, status, message)
20

21
      # coveralls-ignore-stop
22

23
      {:error, _} ->
24
        conn
25
        |> put_status(:bad_request)
UNCOV
26
        |> text("Invalid parameter(s)")
×
27
    end
28
  end
29

30
  def get_assessment_configs(conn, %{"course_id" => course_id}) when is_ecto_id(course_id) do
31
    assessment_configs = Courses.get_assessment_configs(course_id)
1✔
32
    render(conn, "assessment_configs.json", %{configs: assessment_configs})
1✔
33
  end
34

35
  def update_assessment_configs(conn, %{
36
        "course_id" => course_id,
37
        "assessmentConfigs" => assessment_configs
38
      })
39
      when is_ecto_id(course_id) and is_list(assessment_configs) do
40
    if Enum.all?(assessment_configs, &is_map/1) do
1✔
41
      # coveralls-ignore-start
42
      configs =
43
        assessment_configs
44
        |> Enum.map(&to_snake_case_atom_keys/1)
45
        |> update_in(
46
          [Access.all()],
47
          &with(
48
            {v, m} <- Map.pop(&1, :display_in_dashboard),
49
            do: Map.put(m, :show_grading_summary, v)
50
          )
51
        )
52

53
      # coveralls-ignore-stop
54

55
      case Courses.mass_upsert_and_reorder_assessment_configs(course_id, configs) do
1✔
56
        {:ok, _} ->
57
          text(conn, "OK")
1✔
58

59
        {:error, {status, message}} ->
60
          conn
61
          |> put_status(status)
UNCOV
62
          |> text(message)
×
63
      end
64
    else
UNCOV
65
      send_resp(
×
66
        conn,
67
        :bad_request,
68
        "assessmentConfigs should be a list of assessment configuration objects"
69
      )
70
    end
71
  end
72

73
  def update_assessment_configs(conn, _) do
UNCOV
74
    send_resp(conn, :bad_request, "missing assessmentConfig")
×
75
  end
76

77
  def delete_assessment_config(conn, %{
78
        "course_id" => course_id,
79
        "assessment_config_id" => assessment_config_id
80
      })
81
      when is_ecto_id(course_id) and is_ecto_id(assessment_config_id) do
82
    case Courses.delete_assessment_config(course_id, assessment_config_id) do
1✔
83
      {:ok, _} ->
84
        text(conn, "OK")
1✔
85

86
      {:error, message} ->
87
        conn
88
        |> put_status(:bad_request)
UNCOV
89
        |> text(message)
×
90
    end
91
  end
92

93
  swagger_path :update_course_config do
1✔
94
    put("/courses/{course_id}/admin/config")
95

96
    summary("Updates the course configuration for the specified course")
97

98
    security([%{JWT: []}])
99

100
    consumes("application/json")
101

102
    parameters do
103
      course_id(:path, :integer, "Course ID", required: true)
104
      course_name(:body, :string, "Course name")
105
      course_short_name(:body, :string, "Course module code")
106
      viewable(:body, :boolean, "Course viewability")
107
      enable_game(:body, :boolean, "Enable game")
108
      enable_achievements(:body, :boolean, "Enable achievements")
109
      enable_sourcecast(:body, :boolean, "Enable sourcecast")
110
      enable_stories(:body, :boolean, "Enable stories")
111
      sublanguage(:body, Schema.ref(:AdminSublanguage), "sublanguage object")
112
      module_help_text(:body, :string, "Module help text")
113
    end
114

115
    response(200, "OK")
116
    response(400, "Missing or invalid parameter(s)")
117
    response(403, "Forbidden")
118
  end
119

120
  swagger_path :update_assessment_configs do
1✔
121
    put("/courses/{course_id}/admin/config/assessment_configs")
122

123
    summary("Updates the assessment configuration for the specified course")
124

125
    security([%{JWT: []}])
126

127
    consumes("application/json")
128

129
    parameters do
130
      course_id(:path, :integer, "Course ID", required: true)
131
      assessment_configs(:body, :list, "Assessment Configs")
132
    end
133

134
    response(200, "OK")
135
    response(400, "Missing or invalid parameter(s)")
136
    response(403, "Forbidden")
137
  end
138

139
  def swagger_definitions do
140
    %{
1✔
141
      AdminSublanguage:
142
        swagger_schema do
1✔
143
          title("AdminSublanguage")
144

145
          properties do
1✔
146
            chapter(:integer, "Chapter number from 1 to 4", required: true, minimum: 1, maximum: 4)
147

148
            variant(Schema.ref(:SourceVariant), "Variant name", required: true)
1✔
149
          end
150

151
          example(%{
152
            chapter: 2,
153
            variant: "lazy"
154
          })
155
        end
156
    }
157
  end
158
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