forked from exercism/website
-
Notifications
You must be signed in to change notification settings - Fork 0
/
calculate_lines_of_code_test.rb
142 lines (117 loc) · 5.51 KB
/
calculate_lines_of_code_test.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
require "test_helper"
class Iteration::CalculateLinesOfCodeTest < ActiveJob::TestCase
test "num_loc is updated for iteration" do
submission = create :submission
create :submission_file, submission:, content: "Some source code"
iteration = create(:iteration, submission:)
num_loc = 24
stub_request(:post, Exercism.config.lines_of_code_counter_url).
with(
body: {
track_slug: iteration.track.slug,
submission_uuid: iteration.submission.uuid,
submission_filepaths: iteration.submission.valid_filepaths
}.to_json
).
to_return(status: 200, body: "{\"counts\":{\"code\":#{num_loc},\"blanks\":9,\"comments\":0},\"files\":[\"Anagram.fs\"]}", headers: {}) # rubocop:disable Layout/LineLength
Iteration::CalculateLinesOfCode.(iteration)
assert_equal num_loc, iteration.reload.num_loc
assert_equal num_loc, iteration.solution.reload.num_loc
end
test "ignores nil iteration" do
iteration = nil
Iteration::CalculateLinesOfCode.(iteration)
end
test "ignores iteration without valid filepaths" do
submission = create :submission
iteration = create(:iteration, submission:)
Iteration::CalculateLinesOfCode.(iteration)
assert_nil iteration.reload.num_loc
assert_nil iteration.solution.reload.num_loc
end
test "solution is updated if iteration is latest" do
submission = create :submission
create :submission_file, submission:, content: "Some source code"
create :iteration, solution: submission.solution
latest_iteration = create(:iteration, submission:)
create :iteration, solution: submission.solution, deleted_at: Time.current # Last iteration
num_loc = 24
stub_request(:post, Exercism.config.lines_of_code_counter_url).
with(
body: {
track_slug: latest_iteration.track.slug,
submission_uuid: latest_iteration.submission.uuid,
submission_filepaths: latest_iteration.submission.valid_filepaths
}.to_json
).
to_return(status: 200, body: "{\"counts\":{\"code\":#{num_loc},\"blanks\":9,\"comments\":0},\"files\":[\"Anagram.fs\"]}", headers: {}) # rubocop:disable Layout/LineLength
Iteration::CalculateLinesOfCode.(latest_iteration)
assert_equal num_loc, latest_iteration.reload.num_loc
assert_equal num_loc, latest_iteration.solution.reload.num_loc
end
test "solution is not updated if iteration is not latest" do
solution = create :concept_solution
submission = create(:submission, solution:)
create :submission_file, submission:, content: "Some source code"
iteration = create(:iteration, submission:)
other_iteration = create :iteration, solution:, num_loc: 33
solution.update(num_loc: other_iteration.num_loc)
num_loc = 24
stub_request(:post, Exercism.config.lines_of_code_counter_url).
with(
body: {
track_slug: iteration.track.slug,
submission_uuid: iteration.submission.uuid,
submission_filepaths: iteration.submission.valid_filepaths
}.to_json
).
to_return(status: 200, body: "{\"counts\":{\"code\":#{num_loc},\"blanks\":9,\"comments\":0},\"files\":[\"Anagram.fs\"]}", headers: {}) # rubocop:disable Layout/LineLength
Iteration::CalculateLinesOfCode.(iteration)
assert_equal num_loc, iteration.reload.num_loc
assert_equal other_iteration.num_loc, solution.reload.num_loc
end
test "solution is updated if iteration is published" do
solution = create :concept_solution, :published
submission = create(:submission, solution:)
create :submission_file, submission:, content: "Some source code"
create(:iteration, solution:)
iteration = create(:iteration, submission:)
create(:iteration, solution:)
solution.update(published_iteration: iteration)
num_loc = 24
stub_request(:post, Exercism.config.lines_of_code_counter_url).
with(
body: {
track_slug: iteration.track.slug,
submission_uuid: iteration.submission.uuid,
submission_filepaths: iteration.submission.valid_filepaths
}.to_json
).
to_return(status: 200, body: "{\"counts\":{\"code\":#{num_loc},\"blanks\":9,\"comments\":0},\"files\":[\"Anagram.fs\"]}", headers: {}) # rubocop:disable Layout/LineLength
Iteration::CalculateLinesOfCode.(iteration)
assert_equal num_loc, iteration.reload.num_loc
assert_equal iteration.num_loc, solution.reload.num_loc
end
test "solution is not updated if another iteration is published" do
solution = create :concept_solution
submission = create :submission
create :submission_file, submission:, content: "Some source code"
published_iteration = create :iteration, solution: submission.solution, num_loc: 33
iteration = create(:iteration, submission:)
create :iteration, solution: submission.solution
solution.update(published_iteration:, num_loc: published_iteration.num_loc)
num_loc = 24
stub_request(:post, Exercism.config.lines_of_code_counter_url).
with(
body: {
track_slug: iteration.track.slug,
submission_uuid: iteration.submission.uuid,
submission_filepaths: iteration.submission.valid_filepaths
}.to_json
).
to_return(status: 200, body: "{\"counts\":{\"code\":#{num_loc},\"blanks\":9,\"comments\":0},\"files\":[\"Anagram.fs\"]}", headers: {}) # rubocop:disable Layout/LineLength
Iteration::CalculateLinesOfCode.(iteration)
assert_equal num_loc, iteration.reload.num_loc
assert_equal published_iteration.num_loc, solution.reload.num_loc
end
end