• 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

0.0
/lib/cadet_web/views/user_view.ex
1
defmodule CadetWeb.UserView do
2
  use CadetWeb, :view
3

4
  alias Cadet.Courses
5

6
  def render("index.json", %{
7
        user: user,
8
        courses: courses,
9
        latest: latest,
10
        max_xp: max_xp,
11
        xp: xp,
12
        story: story
13
      }) do
UNCOV
14
    %{
×
15
      user: %{
UNCOV
16
        userId: user.id,
×
UNCOV
17
        name: user.name,
×
18
        courses: render_many(courses, CadetWeb.UserView, "courses.json", as: :cr)
19
      },
20
      courseRegistration:
21
        render_latest(%{
22
          latest: latest,
23
          max_xp: max_xp,
24
          xp: xp,
25
          story: story
26
        }),
27
      courseConfiguration: render_config(latest),
28
      assessmentConfigurations: render_assessment_configs(latest)
29
    }
30
  end
31

32
  def render(
33
        "index.json",
34
        %{
35
          user: user,
36
          courses: courses,
37
          latest: latest,
38
          max_xp: max_xp,
39
          xp: xp,
40
          story: story
41
        },
42
        is_admin
43
      ) do
NEW
44
    %{
×
45
      user: %{
NEW
46
        userId: user.id,
×
NEW
47
        name: user.name,
×
48
        courses: render_many(courses, CadetWeb.UserView, "courses.json", as: :cr)
49
      },
50
      courseRegistration:
51
        render_latest(%{
52
          latest: latest,
53
          max_xp: max_xp,
54
          xp: xp,
55
          story: story
56
        }),
57
      courseConfiguration: render_config(latest, is_admin),
58
      assessmentConfigurations: render_assessment_configs(latest)
59
    }
60
  end
61

62
  def render("course.json", %{
63
        latest: latest,
64
        max_xp: max_xp,
65
        xp: xp,
66
        story: story
67
      }) do
UNCOV
68
    %{
×
69
      courseRegistration:
70
        render_latest(%{
71
          latest: latest,
72
          max_xp: max_xp,
73
          xp: xp,
74
          story: story
75
        }),
76
      courseConfiguration: render_config(latest),
77
      assessmentConfigurations: render_assessment_configs(latest)
78
    }
79
  end
80

81
  def render(
82
        "course.json",
83
        %{
84
          latest: latest,
85
          max_xp: max_xp,
86
          xp: xp,
87
          story: story
88
        },
89
        is_admin
90
      ) do
NEW
91
    %{
×
92
      courseRegistration:
93
        render_latest(%{
94
          latest: latest,
95
          max_xp: max_xp,
96
          xp: xp,
97
          story: story
98
        }),
99
      courseConfiguration: render_config(latest, is_admin),
100
      assessmentConfigurations: render_assessment_configs(latest)
101
    }
102
  end
103

104
  def render("courses.json", %{cr: cr}) do
UNCOV
105
    %{
×
UNCOV
106
      courseId: cr.course_id,
×
UNCOV
107
      courseName: cr.course.course_name,
×
UNCOV
108
      courseShortName: cr.course.course_short_name,
×
UNCOV
109
      role: cr.role,
×
UNCOV
110
      viewable: cr.course.viewable
×
111
    }
112
  end
113

114
  defp render_latest(%{
115
         latest: latest,
116
         max_xp: max_xp,
117
         xp: xp,
118
         story: story
119
       }) do
UNCOV
120
    case latest do
×
UNCOV
121
      nil ->
×
122
        nil
123

124
      _ ->
UNCOV
125
        %{
×
UNCOV
126
          courseRegId: latest.id,
×
UNCOV
127
          courseId: latest.course_id,
×
UNCOV
128
          role: latest.role,
×
129
          group:
UNCOV
130
            case latest.group do
×
131
              nil -> nil
×
UNCOV
132
              _ -> latest.group.name
×
133
            end,
134
          xp: xp,
135
          maxXp: max_xp,
136
          story:
137
            transform_map_for_view(story, %{
138
              story: :story,
139
              playStory: :play_story?
140
            }),
UNCOV
141
          gameStates: latest.game_states,
×
UNCOV
142
          agreedToResearch: latest.agreed_to_research
×
143
        }
144
    end
145
  end
146

147
  defp render_config(latest) do
UNCOV
148
    case latest do
×
UNCOV
149
      nil ->
×
150
        nil
151

152
      _ ->
UNCOV
153
        transform_map_for_view(latest.course, %{
×
154
          courseName: :course_name,
155
          courseShortName: :course_short_name,
156
          viewable: :viewable,
157
          enableGame: :enable_game,
158
          enableAchievements: :enable_achievements,
159
          enableSourcecast: :enable_sourcecast,
160
          enableStories: :enable_stories,
161
          enableExamMode: :enable_exam_mode,
162
          isOfficialCourse: :is_official_course,
163
          sourceChapter: :source_chapter,
164
          sourceVariant: :source_variant,
165
          moduleHelpText: :module_help_text,
166
          assetsPrefix: &Courses.assets_prefix/1
167
        })
168
    end
169
  end
170

171
  defp render_config(latest, is_admin) do
NEW
172
    case latest do
×
NEW
173
      nil ->
×
174
        nil
175

176
      _ ->
NEW
177
        transform_map_for_view(latest.course, %{
×
178
          courseName: :course_name,
179
          courseShortName: :course_short_name,
180
          viewable: :viewable,
181
          enableGame: :enable_game,
182
          enableAchievements: :enable_achievements,
183
          enableSourcecast: :enable_sourcecast,
184
          enableStories: :enable_stories,
185
          enableExamMode: :enable_exam_mode,
186
          resume_code: :resume_code,
187
          isOfficialCourse: :is_official_course,
188
          sourceChapter: :source_chapter,
189
          sourceVariant: :source_variant,
190
          moduleHelpText: :module_help_text,
191
          assetsPrefix: &Courses.assets_prefix/1
192
        })
193
    end
194
  end
195

196
  defp render_assessment_configs(latest) do
UNCOV
197
    case latest do
×
UNCOV
198
      nil ->
×
199
        nil
200

201
      latest ->
UNCOV
202
        Enum.map(latest.course.assessment_config, fn config ->
×
UNCOV
203
          transform_map_for_view(config, %{
×
204
            assessmentConfigId: :id,
205
            type: :type,
206
            displayInDashboard: :show_grading_summary,
207
            isMinigame: :is_minigame,
208
            isManuallyGraded: :is_manually_graded,
209
            hasVotingFeatures: :has_voting_features,
210
            hasTokenCounter: :has_token_counter,
211
            earlySubmissionXp: :early_submission_xp,
212
            hoursBeforeEarlyXpDecay: :hours_before_early_xp_decay,
213
            isGradingAutoPublished: :is_grading_auto_published
214
          })
215
        end)
216
    end
217
  end
218
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