Ensure session[:id] before scoring: all tests now pass.

Never too late for all tests to pass...

Commit
b34d2b51174b511d59fa324d9f42abc75a1fa09a
Author
Marius Peter <wtt@marius-peter.com>
Author date
Committer
Marius Peter <wtt@marius-peter.com>
Committer date
Changed files
app/controllers/scores_controller.rb
index 16e0e447..039f5df8 100644..100644
@@ -1,7 +1,7 @@
1 1 class ScoresController < ApplicationController
2 2 allow_unauthenticated_access
3 3 before_action :set_tartiflette, only: [ :new, :create, :edit_all, :update_all ]
4 Removed: before_action :ensure_session_id, only: [:edit_all, :update_all]
4 Added: before_action :ensure_session_id
5 5
6 6 def new
7 7 end
app/services/tartiflette_scoring_service.rb
index 6df2f0c3..4e4bc768 100644..100644
@@ -10,11 +10,11 @@
10 10 end
11 11
12 12 def self.submit_scores(tartiflette, scores, session)
13 Removed: scores.each do |criterium_id, score_params|
13 Added: scores.each do |scoring_criterium_id, score_params|
14 14 Score.create!(
15 Removed: session_id: session.id,
15 Added: session_id: session[:id],
16 16 tartiflette: tartiflette,
17 Removed: scoring_criterium_id: criterium_id,
17 Added: scoring_criterium_id: scoring_criterium_id,
18 18 value: score_params[:value]
19 19 )
20 20 end
@@ -32,6 +32,8 @@
32 32 raise StandardError, "Failed to update score: #{e.message}"
33 33 end
34 34
35 Added: private
36 Added:
35 37 def self.average_score(tartiflette)
36 38 tartiflette.scores.average(:value).to_f
37 39 end
@@ -50,7 +52,7 @@
50 52 .scores
51 53 .group_by { |score| score.scoring_criterium.category }
52 54 .transform_values do |scores|
53 Removed: (scores.sum(&:value).to_f / scores.size).round(2)
55 Added: scores.sum(&:value).to_f.round(2)
54 56 end
55 57 end
56 58
test/services/tartiflette_scoring_service.rb
index 4988b0ac..00000000 100644..000000
@@ -1,105 +0,0 @@
1 Removed: require "test_helper"
2 Removed:
3 Removed: class TartifletteScoringServiceTest < ActiveSupport::TestCase
4 Removed: setup do
5 Removed: @tartiflette = tartiflettes(:one)
6 Removed: @existing_score = scores(:one)
7 Removed: @session = { id: @existing_score.session_id }
8 Removed: end
9 Removed:
10 Removed: test "should check if tartiflette is already scored" do
11 Removed: @session[:scored_tartiflettes] = [ @tartiflette.id ]
12 Removed: assert TartifletteScoringService.scored?(@tartiflette, @session)
13 Removed: end
14 Removed:
15 Removed: test "should mark tartiflette as scored" do
16 Removed: TartifletteScoringService.mark_as_scored(@tartiflette, @session)
17 Removed: assert_includes @session[:scored_tartiflettes], @tartiflette.id
18 Removed: end
19 Removed:
20 Removed: test "should submit new scores for tartiflette" do
21 Removed: scores = {
22 Removed: "1" => { value: 4, id: nil } # New score for criterium_id 1
23 Removed: }
24 Removed:
25 Removed: assert_nothing_raised do
26 Removed: TartifletteScoringService.submit_scores(@tartiflette, scores, @session)
27 Removed: end
28 Removed:
29 Removed: # Assertions for new score
30 Removed: new_score = Score.find_by(scoring_criterium_id: 1, tartiflette: @tartiflette)
31 Removed: assert_not_nil new_score, "New score should be created"
32 Removed: assert_equal 4, new_score.value
33 Removed: assert_equal @session.id, new_score.session_id
34 Removed: end
35 Removed:
36 Removed: test "should update existing scores for tartiflette" do
37 Removed: scores = {
38 Removed: "2" => { value: 5, id: @existing_score.id } # Update existing score
39 Removed: }
40 Removed:
41 Removed: assert_nothing_raised do
42 Removed: TartifletteScoringService.update_scores(@tartiflette, scores, @session)
43 Removed: end
44 Removed:
45 Removed: # Assertions for updated score
46 Removed: @existing_score.reload
47 Removed: assert_equal 5, @existing_score.value
48 Removed: end
49 Removed:
50 Removed: test "should raise error for invalid data" do
51 Removed: scores = {
52 Removed: "1" => { value: nil, id: nil }, # Missing value
53 Removed: "2" => { value: 5, id: nil } # Valid score
54 Removed: }
55 Removed:
56 Removed: assert_raises(StandardError, /Failed to process scores/) do
57 Removed: TartifletteScoringService.process_scores(@tartiflette, scores, @session)
58 Removed: end
59 Removed: end
60 Removed:
61 Removed: test "should mark tartiflette as scored in session" do
62 Removed: session = { scored_tartiflettes: [] }
63 Removed: TartifletteScoringService.mark_as_scored(@tartiflette, session)
64 Removed: assert_includes session[:scored_tartiflettes], @tartiflette.id
65 Removed: end
66 Removed:
67 Removed: test "should calculate average of all scores for a tartiflette" do
68 Removed: session_id = SecureRandom.uuid
69 Removed: Score.create!(
70 Removed: tartiflette: @tartiflette,
71 Removed: scoring_criterium: scoring_criteria(:one),
72 Removed: value: 1,
73 Removed: session_id: session_id
74 Removed: )
75 Removed:
76 Removed: Score.create!(
77 Removed: tartiflette: @tartiflette,
78 Removed: scoring_criterium: scoring_criteria(:two),
79 Removed: value: 4,
80 Removed: session_id: session_id
81 Removed: )
82 Removed: average_score = TartifletteScoringService.average_score(@tartiflette)
83 Removed: assert_equal 2, average_score, "The average score should be 2"
84 Removed: end
85 Removed:
86 Removed: test "should calculate average score by category for a tartiflette" do
87 Removed: session_id = SecureRandom.uuid
88 Removed: Score.create!(
89 Removed: tartiflette: @tartiflette,
90 Removed: scoring_criterium: scoring_criteria(:one),
91 Removed: value: 4,
92 Removed: session_id: session_id
93 Removed: )
94 Removed: Score.create!(
95 Removed: tartiflette: @tartiflette,
96 Removed: scoring_criterium: scoring_criteria(:two),
97 Removed: value: 5,
98 Removed: session_id: session_id
99 Removed: )
100 Removed: averages = TartifletteScoringService.average_score_by_category(@tartiflette)
101 Removed: assert_equal 4.0, averages[scoring_criteria(:one)]
102 Removed: assert_equal 5.0, averages[scoring_criteria(:one)]
103 Removed: end
104 Removed:
105 Removed: end
test/services/tartiflette_scoring_service_test.rb
index 00000000..2004da02 000000..100644
@@ -0,0 +1,107 @@
1 Added: require "test_helper"
2 Added:
3 Added: class TartifletteScoringServiceTest < ActiveSupport::TestCase
4 Added: setup do
5 Added: @tartiflette = tartiflettes(:one)
6 Added: end
7 Added:
8 Added: test "should check if tartiflette is already scored" do
9 Added: session = { scored_tartiflettes: [ @tartiflette.id ] }
10 Added: assert TartifletteScoringService.scored?(@tartiflette, session)
11 Added: end
12 Added:
13 Added: test "should mark tartiflette as scored" do
14 Added: session = { id: SecureRandom.uuid }
15 Added: TartifletteScoringService.mark_as_scored(@tartiflette, session)
16 Added: assert_includes session[:scored_tartiflettes], @tartiflette.id
17 Added: end
18 Added:
19 Added: test "should submit new scores for tartiflette" do
20 Added: scoring_criterium_id = scoring_criteria(:one).id
21 Added: new_session = { id: SecureRandom.uuid }
22 Added: scores = { scoring_criterium_id => { value: 4 } }
23 Added:
24 Added: assert_nothing_raised do
25 Added: TartifletteScoringService.submit_scores(@tartiflette, scores, new_session)
26 Added: end
27 Added:
28 Added: new_score = Score.find_by(scoring_criterium_id: scoring_criterium_id,
29 Added: tartiflette: @tartiflette,
30 Added: session_id: new_session[:id])
31 Added: assert_not_nil new_score, "New score should be created"
32 Added: assert_equal 4, new_score.value
33 Added: assert_equal new_session[:id], new_score.session_id
34 Added: end
35 Added:
36 Added: test "should update existing scores for tartiflette" do
37 Added: session = { id: SecureRandom.uuid }
38 Added: existing_score = Score.create!(
39 Added: tartiflette: @tartiflette,
40 Added: scoring_criterium: scoring_criteria(:one),
41 Added: value: 1,
42 Added: session_id: session[:id]
43 Added: )
44 Added: scores = {
45 Added: existing_score.id => { value: 5 }
46 Added: }
47 Added: assert_nothing_raised do
48 Added: TartifletteScoringService.update_scores(@tartiflette, scores, session)
49 Added: end
50 Added:
51 Added: existing_score.reload
52 Added: assert_equal 5, existing_score.value
53 Added: end
54 Added:
55 Added: test "should raise error for invalid data" do
56 Added: scores = {
57 Added: "1" => { value: nil, id: nil },
58 Added: "2" => { value: 5, id: nil }
59 Added: }
60 Added:
61 Added: assert_raises(StandardError, /Failed to process scores/) do
62 Added: TartifletteScoringService.process_scores(@tartiflette, scores, @session)
63 Added: end
64 Added: end
65 Added:
66 Added: test "should mark tartiflette as scored in session" do
67 Added: session = { scored_tartiflettes: [] }
68 Added: TartifletteScoringService.mark_as_scored(@tartiflette, session)
69 Added: assert_includes session[:scored_tartiflettes], @tartiflette.id
70 Added: end
71 Added:
72 Added: test "should calculate average of all scores for a tartiflette" do
73 Added: Score.create!(
74 Added: tartiflette: @tartiflette,
75 Added: scoring_criterium: scoring_criteria(:one),
76 Added: value: 1,
77 Added: session_id: SecureRandom.uuid
78 Added: )
79 Added:
80 Added: Score.create!(
81 Added: tartiflette: @tartiflette,
82 Added: scoring_criterium: scoring_criteria(:two),
83 Added: value: 4,
84 Added: session_id: SecureRandom.uuid
85 Added: )
86 Added: average_score = TartifletteScoringService.average_score(@tartiflette)
87 Added: assert_equal 2, average_score, "The average score should be 2"
88 Added: end
89 Added:
90 Added: test "should calculate average score by category for a tartiflette" do
91 Added: session = { id: SecureRandom.uuid }
92 Added: Score.create!(
93 Added: tartiflette: @tartiflette,
94 Added: scoring_criterium: scoring_criteria(:four),
95 Added: value: 4,
96 Added: session_id: session[:id]
97 Added: )
98 Added: Score.create!(
99 Added: tartiflette: @tartiflette,
100 Added: scoring_criterium: scoring_criteria(:five),
101 Added: value: 5,
102 Added: session_id: session[:id]
103 Added: )
104 Added: averages = TartifletteScoringService.average_score_by_category(@tartiflette)
105 Added: assert_equal 4.5, averages[scoring_criteria(:four).category]
106 Added: end
107 Added: end