From 908d6b75aae88c3639727835119c11267c716991 Mon Sep 17 00:00:00 2001 From: Daniel Diekmeier Date: Fri, 2 Aug 2024 18:07:00 +0200 Subject: [PATCH 1/5] Make sprint retros working for admins --- app/models/sprint.rb | 4 --- app/models/sprint_feedback.rb | 4 +++ app/policies/sprint_feedback_policy.rb | 2 +- app/views/sprints/_sprint.html.slim | 50 ++++++++++++++------------ config/locales/en.yml | 3 +- 5 files changed, 34 insertions(+), 29 deletions(-) diff --git a/app/models/sprint.rb b/app/models/sprint.rb index 546fe8d..d64b03b 100644 --- a/app/models/sprint.rb +++ b/app/models/sprint.rb @@ -92,8 +92,4 @@ def average_rating ratings.sum / ratings.size.to_f end - - def to_be_rated? - sprint_until.today? || completed? - end end diff --git a/app/models/sprint_feedback.rb b/app/models/sprint_feedback.rb index 0be9cc1..b885ece 100644 --- a/app/models/sprint_feedback.rb +++ b/app/models/sprint_feedback.rb @@ -87,6 +87,10 @@ def retro_completed? has_retro? || skip_retro? end + def by?(user) + self.user == user + end + def recalculate_costs salary = user.salary_at(sprint.sprint_from) return unless salary diff --git a/app/policies/sprint_feedback_policy.rb b/app/policies/sprint_feedback_policy.rb index 6d6dbee..a84a07e 100644 --- a/app/policies/sprint_feedback_policy.rb +++ b/app/policies/sprint_feedback_policy.rb @@ -27,7 +27,7 @@ def show_notes? def permitted_attributes if hr? - [:daily_nerd_count, :tracked_hours, :billable_hours, :review_notes, :skip_retro] + [:daily_nerd_count, :tracked_hours, :billable_hours, :review_notes, :retro_rating, :retro_text, :skip_retro] else [:retro_rating, :retro_text, :skip_retro] end diff --git a/app/views/sprints/_sprint.html.slim b/app/views/sprints/_sprint.html.slim index 2e4b976..bdcb935 100644 --- a/app/views/sprints/_sprint.html.slim +++ b/app/views/sprints/_sprint.html.slim @@ -67,32 +67,36 @@ div title="Costs" = number_to_currency -sprint.costs div title="Revenue" = number_to_currency sprint.revenue - - if sprint.to_be_rated? - - feedbacks = sprint.sprint_feedbacks.select { _1.has_retro? || _1.user == @user } - .feedback.stack - .feedback__heading = t(".feedback") if feedbacks.any? + - feedbacks = sprint.sprint_feedbacks.select { _1.has_retro? || policy(_1).update? } + .feedback.stack + .feedback__heading = t(".feedback") if feedbacks.any? - - feedbacks.each do |feedback| - - is_own = feedback.user == @user - .feedback__item.stack.stack--row(data-controller=(is_own && "feedback")) - .feedback__column - - if feedback.has_retro? - .feedback__content(data-feedback-target="content") - strong = t(".user_feedback", user: feedback.user.display_name, rating: feedback.retro_rating) - = markdown feedback.retro_text - - elsif feedback.skip_retro? - .feedback__content(data-feedback-target="content") - strong = t(".user_skipped_retro", user: feedback.user.display_name) - - else - .feedback__alert = t(".please_write_feedback") + - feedbacks.each do |feedback| + - display_name = feedback.user.display_name + - can_edit = policy(feedback).update? + - show_content = feedback.retro_completed? || !feedback.by?(current_user) + + .feedback__item.stack.stack--row(data-controller=(can_edit && "feedback")) + .feedback__column + - if show_content + .feedback__content(data-feedback-target="content") + - if feedback.has_retro? + strong = t(".user_feedback", user: display_name, rating: feedback.retro_rating) + = markdown feedback.retro_text + - elsif feedback.skip_retro? + strong = t(".user_skipped_retro", user: display_name) + - elsif !feedback.by?(current_user) + strong = t(".user_feedback_missing", user: display_name) + - elsif feedback.by?(current_user) + .feedback__alert = t(".please_write_feedback") - - if is_own - .feedback__form(data-feedback-target="form" class=(feedback.retro_completed? && "feedback__form--hidden")) - .feedback__form-heading = t('.edit_feedback') - = render "sprint_feedbacks/edit_retro", feedback: + - if can_edit + .feedback__form(data-feedback-target="form" class=class_names("feedback__form--hidden": feedback.retro_completed? || !feedback.by?(current_user) )) + .feedback__form-heading = t('.edit_feedback', user: display_name) + = render "sprint_feedbacks/edit_retro", feedback: - - if is_own && feedback.retro_completed? - button.button.button--small(data-action="feedback#toggle") Edit + - if can_edit && show_content + button.button.button--small(data-action="feedback#toggle") Edit - if addable_users.any? && policy(SprintFeedback).create? .card__buttons diff --git a/config/locales/en.yml b/config/locales/en.yml index cd726d7..ca4310f 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -91,7 +91,7 @@ en: sprint: billable: Billable daily_nerd: Daily nerd - edit_feedback: Edit Feedback + edit_feedback: Edit Feedback (%{user}) feedback: Feedback finished_storypoints: Finished storypoints please_write_feedback: Please write your feedback! @@ -100,6 +100,7 @@ en: tracked: Tracked turnover: Turnover user_feedback: "%{user} rated: %{rating} / 5" + user_feedback_missing: "%{user} did not add their rating yet" user_skipped_retro: "%{user} skipped the retro" time_will_tell: date_range: From ade28566f51d2f35f7dd0e0154a8bf545e88705d Mon Sep 17 00:00:00 2001 From: Daniel Diekmeier Date: Fri, 2 Aug 2024 18:16:47 +0200 Subject: [PATCH 2/5] Make the emojis one notch happier --- .../stylesheets/application/components/feedback.scss | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/assets/stylesheets/application/components/feedback.scss b/app/assets/stylesheets/application/components/feedback.scss index 570da27..d2c2aaf 100644 --- a/app/assets/stylesheets/application/components/feedback.scss +++ b/app/assets/stylesheets/application/components/feedback.scss @@ -42,19 +42,19 @@ gap: 4px; &:has([value='1']:checked) { - --emoji: '😖'; + --emoji: '😔'; } &:has([value='2']:checked) { - --emoji: '😔'; + --emoji: '😐'; } &:has([value='3']:checked) { - --emoji: '😐'; + --emoji: '🙂'; } &:has([value='4']:checked) { - --emoji: '🙂'; + --emoji: '😊'; } &:has([value='5']:checked) { - --emoji: '😊'; + --emoji: '🥳'; } } From 0e1f842cebd69d573c0f4057121554e76236d2ce Mon Sep 17 00:00:00 2001 From: Daniel Diekmeier Date: Fri, 2 Aug 2024 18:36:17 +0200 Subject: [PATCH 3/5] Display range correctly --- app/models/sprint.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/sprint.rb b/app/models/sprint.rb index d64b03b..2b49c49 100644 --- a/app/models/sprint.rb +++ b/app/models/sprint.rb @@ -31,7 +31,7 @@ class Sprint < ApplicationRecord range_accessor_methods :sprint def full_title - "#{title} (#{ApplicationController.helpers.date_range(sprint_during.min, sprint_during.max, format: :long)})" + "#{title} (#{ApplicationController.helpers.date_range(sprint_from, sprint_until, format: :long)})" end def total_working_days From 4f5b9425c1aa7eca9f354d02edbcb553d1893a71 Mon Sep 17 00:00:00 2001 From: Daniel Diekmeier Date: Fri, 2 Aug 2024 18:40:43 +0200 Subject: [PATCH 4/5] Adjsut specs --- spec/fixtures/sprint_feedbacks.yml | 18 +++++++----------- spec/fixtures/sprints.yml | 5 ----- spec/models/sprint_feedback_spec.rb | 2 +- spec/models/task_spec.rb | 2 +- spec/system/sprint_feedbacks_spec.rb | 4 ++-- 5 files changed, 11 insertions(+), 20 deletions(-) diff --git a/spec/fixtures/sprint_feedbacks.yml b/spec/fixtures/sprint_feedbacks.yml index 0257deb..8e0cebc 100644 --- a/spec/fixtures/sprint_feedbacks.yml +++ b/spec/fixtures/sprint_feedbacks.yml @@ -16,7 +16,7 @@ # turnover :decimal(, ) # costs :decimal(, ) # -sprint_feedback_1: +sprint_feedback_john: sprint: empty user: john daily_nerd_count: 3 @@ -43,22 +43,18 @@ sprint_feedback_2: - 2023-01-25 finished_storypoints: 5 -john_before: - sprint: before - user: john - -cigdem_before: - sprint: before +cigdem_current: + sprint: empty user: cigdem retro_rating: 3 -yuki_before: - sprint: before +yuki_current: + sprint: empty user: yuki retro_rating: 5 retro_text: 'I liked the sprint' -zacharias_before: - sprint: before +zacharias_current: + sprint: empty user: zacharias skip_retro: true diff --git a/spec/fixtures/sprints.yml b/spec/fixtures/sprints.yml index a98e4e6..b998239 100644 --- a/spec/fixtures/sprints.yml +++ b/spec/fixtures/sprints.yml @@ -13,8 +13,3 @@ empty: title: S2023-02 sprint_during: '[2023-01-23, 2023-02-03]' working_days: 10 - -before: - title: S2023-before - sprint_during: '[2023-01-09, 2023-01-23]' - working_days: 10 diff --git a/spec/models/sprint_feedback_spec.rb b/spec/models/sprint_feedback_spec.rb index 901fa74..32b49b9 100644 --- a/spec/models/sprint_feedback_spec.rb +++ b/spec/models/sprint_feedback_spec.rb @@ -23,7 +23,7 @@ RSpec.describe SprintFeedback do fixtures :all - let(:feedback) { sprint_feedbacks(:sprint_feedback_1) } + let(:feedback) { sprint_feedbacks(:sprint_feedback_john) } context "when calculating costs" do it "calculates the costs based on the current salary" do diff --git a/spec/models/task_spec.rb b/spec/models/task_spec.rb index 5919d3b..9cc15c3 100644 --- a/spec/models/task_spec.rb +++ b/spec/models/task_spec.rb @@ -94,7 +94,7 @@ end it "only updates finished_storypoints" do - sprint_feedback = sprint_feedbacks(:sprint_feedback_1) + sprint_feedback = sprint_feedbacks(:sprint_feedback_john) expect(sprint_feedback).to have_attributes finished_storypoints: 8 Task.sync_with_github diff --git a/spec/system/sprint_feedbacks_spec.rb b/spec/system/sprint_feedbacks_spec.rb index 3384dbd..d4b1c5c 100644 --- a/spec/system/sprint_feedbacks_spec.rb +++ b/spec/system/sprint_feedbacks_spec.rb @@ -6,7 +6,7 @@ fixtures :all before do - travel_to "2023-02-02" + travel_to "2023-02-05" login :john end @@ -30,7 +30,7 @@ end it "allows editing the retro feedback" do - feedback = sprint_feedbacks(:john_before) + feedback = sprint_feedbacks(:sprint_feedback_john) feedback.update!(retro_text: "I'm happy!", retro_rating: 5) visit sprints_path From 843deb87eb769e95215fe9d7e41bdf11f4357e92 Mon Sep 17 00:00:00 2001 From: Daniel Diekmeier Date: Fri, 2 Aug 2024 18:47:47 +0200 Subject: [PATCH 5/5] Fix specs even more --- spec/models/sprint_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/models/sprint_spec.rb b/spec/models/sprint_spec.rb index 5f52cc3..624c609 100644 --- a/spec/models/sprint_spec.rb +++ b/spec/models/sprint_spec.rb @@ -134,7 +134,7 @@ describe "#average_rating" do it "returns the average sprint rating" do - sprint = sprints(:before) + sprint = sprints(:empty) expect(sprint.average_rating).to eq 4.0 end