• 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

42.22
/lib/cadet_web/admin_controllers/admin_teams_controller.ex
1
defmodule CadetWeb.AdminTeamsController do
2
  use CadetWeb, :controller
3
  use PhoenixSwagger
4
  alias Cadet.Repo
5

6
  alias Cadet.Accounts.{Teams, Team}
7

8
  def index(conn, _params) do
UNCOV
9
    teams =
×
10
      Team
11
      |> Repo.all()
12
      |> Repo.preload(assessment: [:config], team_members: [student: [:user]])
13

UNCOV
14
    team_formation_overviews =
×
15
      teams
16
      |> Enum.map(&team_to_team_formation_overview/1)
17

18
    conn
19
    |> put_status(:ok)
20
    |> put_resp_content_type("application/json")
UNCOV
21
    |> render("index.json", team_formation_overviews: team_formation_overviews)
×
22
  end
23

24
  defp team_to_team_formation_overview(team) do
UNCOV
25
    assessment = team.assessment
×
26

UNCOV
27
    team_formation_overview = %{
×
UNCOV
28
      teamId: team.id,
×
UNCOV
29
      assessmentId: assessment.id,
×
UNCOV
30
      assessmentName: assessment.title,
×
UNCOV
31
      assessmentType: assessment.config.type,
×
UNCOV
32
      studentIds: team.team_members |> Enum.map(& &1.student.user.id),
×
UNCOV
33
      studentNames: team.team_members |> Enum.map(& &1.student.user.name)
×
34
    }
35

UNCOV
36
    team_formation_overview
×
37
  end
38

39
  def create(conn, %{"team" => team_params}) do
UNCOV
40
    case Teams.create_team(team_params) do
×
41
      {:ok, _team} ->
42
        conn
43
        |> put_status(:created)
UNCOV
44
        |> text("Teams created successfully.")
×
45

46
      {:error, {status, message}} ->
47
        conn
48
        |> put_status(status)
UNCOV
49
        |> text(message)
×
50
    end
51
  end
52

53
  def update(conn, %{
54
        "teamId" => teamId,
55
        "assessmentId" => assessmentId,
56
        "student_ids" => student_ids
57
      }) do
UNCOV
58
    team =
×
59
      Team
60
      |> Repo.get!(teamId)
61
      |> Repo.preload(assessment: [:config], team_members: [student: [:user]])
62

UNCOV
63
    case Teams.update_team(team, assessmentId, student_ids) do
×
64
      {:ok, _updated_team} ->
65
        conn
66
        |> put_status(:ok)
UNCOV
67
        |> text("Teams updated successfully.")
×
68

69
      {:error, {status, message}} ->
70
        conn
71
        |> put_status(status)
UNCOV
72
        |> text(message)
×
73
    end
74
  end
75

76
  def delete(conn, %{"teamId" => team_id}) do
UNCOV
77
    team = Repo.get(Team, team_id)
×
78

UNCOV
79
    if team do
×
UNCOV
80
      case Teams.delete_team(team) do
×
81
        {:error, {status, error_message}} ->
82
          conn
83
          |> put_status(status)
UNCOV
84
          |> text(error_message)
×
85

86
        {:ok, _} ->
UNCOV
87
          text(conn, "Team deleted successfully.")
×
88
      end
89
    else
90
      conn
91
      |> put_status(:not_found)
UNCOV
92
      |> text("Team not found!")
×
93
    end
94
  end
95

96
  def delete(conn, %{"course_id" => course_id, "teamid" => team_id}) do
UNCOV
97
    delete(conn, %{"teamId" => team_id})
×
98
  end
99

100
  swagger_path :index do
1✔
101
    get("/admin/teams")
102

103
    summary("Fetches every team in the course")
104

105
    security([%{JWT: []}])
106

107
    response(200, "OK", :Teams)
108
    response(400, "Bad Request")
109
    response(403, "Forbidden")
110
  end
111

112
  swagger_path :create do
1✔
113
    post("/courses/{course_id}/admin/teams")
114

115
    summary("Creates a new team")
116

117
    security([%{JWT: []}])
118

119
    consumes("application/json")
120

121
    parameters do
122
      team_params(:body, :AdminCreateTeamPayload, "Team parameters", required: true)
123
    end
124

125
    response(201, "Created")
126
    response(400, "Bad Request")
127
    response(401, "Unauthorised")
128
    response(403, "Forbidden")
129
    response(409, "Conflict")
130
  end
131

132
  swagger_path :update do
1✔
133
    post("/courses/{course_id}/admin/teams/{teamId}")
134

135
    summary("Updates an existing team")
136

137
    security([%{JWT: []}])
138

139
    consumes("application/json")
140

141
    parameters do
142
      teamId(:path, :integer, "Team ID", required: true)
143

144
      team(:body, Schema.ref(:AdminUpdateTeamPayload), "Updated team details", required: true)
145
    end
146

147
    response(200, "OK")
148
    response(400, "Bad Request")
149
    response(401, "Unauthorised")
150
    response(403, "Forbidden")
151
    response(409, "Conflict")
152
  end
153

154
  swagger_path :delete do
1✔
155
    PhoenixSwagger.Path.delete("/courses/{course_id}/admin/teams/{teamId}")
156

157
    summary("Deletes an existing team")
158

159
    security([%{JWT: []}])
160

161
    parameters do
162
      teamId(:path, :integer, "Team ID", required: true)
163
    end
164

165
    response(200, "OK")
166
    response(400, "Bad Request")
167
    response(401, "Unauthorised")
168
    response(403, "Forbidden")
169
    response(409, "Conflict")
170
  end
171

172
  def swagger_definitions do
173
    %{
1✔
174
      AdminCreateTeamPayload:
175
        swagger_schema do
1✔
176
          properties do
1✔
177
            assessmentId(:integer, "Assessment ID")
178
            studentIds(:array, "Student IDs", items: %{type: :integer})
1✔
179
          end
180

181
          required([:assessmentId, :studentIds])
182
        end,
183
      AdminUpdateTeamPayload:
184
        swagger_schema do
1✔
185
          properties do
1✔
186
            teamId(:integer, "Team ID")
187
            assessmentId(:integer, "Assessment ID")
188
            studentIds(:integer, "Student IDs", items: %{type: :integer})
1✔
189
          end
190

191
          required([:teamId, :assessmentId, :studentIds])
192
        end,
193
      Teams:
194
        swagger_schema do
1✔
195
          type(:array)
196
          items(Schema.ref(:Team))
197
        end,
198
      Team:
199
        swagger_schema do
1✔
200
          properties do
1✔
201
            id(:integer, "Team Id")
202
            assessment(Schema.ref(:Assessment))
203
            team_members(Schema.ref(:TeamMembers))
1✔
204
          end
205

206
          required([:id, :assessment, :team_members])
207
        end,
208
      TeamMembers:
209
        swagger_schema do
1✔
210
          type(:array)
211
          items(Schema.ref(:TeamMember))
212
        end,
213
      TeamMember:
214
        swagger_schema do
1✔
215
          properties do
1✔
216
            id(:integer, "Team Member Id")
217
            student(Schema.ref(:CourseRegistration))
218
            team(Schema.ref(:Team))
1✔
219
          end
220

221
          required([:id, :student, :team])
222
        end
223
    }
224
  end
225
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