Skip to content

Commit

Permalink
Make sprint retros work for admins (#105)
Browse files Browse the repository at this point in the history
* Make sprint retros working for admins

* Make the emojis one notch happier

* Display range correctly

* Adjsut specs

* Fix specs even more
  • Loading branch information
danieldiekmeier authored Aug 4, 2024
1 parent 032aa41 commit f8d2d57
Show file tree
Hide file tree
Showing 12 changed files with 52 additions and 56 deletions.
10 changes: 5 additions & 5 deletions app/assets/stylesheets/application/components/feedback.scss
Original file line number Diff line number Diff line change
Expand Up @@ -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: '🥳';
}
}

Expand Down
6 changes: 1 addition & 5 deletions app/models/sprint.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -92,8 +92,4 @@ def average_rating

ratings.sum / ratings.size.to_f
end

def to_be_rated?
sprint_until.today? || completed?
end
end
4 changes: 4 additions & 0 deletions app/models/sprint_feedback.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion app/policies/sprint_feedback_policy.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
50 changes: 27 additions & 23 deletions app/views/sprints/_sprint.html.slim
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 2 additions & 1 deletion config/locales/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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!
Expand All @@ -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:
Expand Down
18 changes: 7 additions & 11 deletions spec/fixtures/sprint_feedbacks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
# turnover :decimal(, )
# costs :decimal(, )
#
sprint_feedback_1:
sprint_feedback_john:
sprint: empty
user: john
daily_nerd_count: 3
Expand All @@ -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
5 changes: 0 additions & 5 deletions spec/fixtures/sprints.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
2 changes: 1 addition & 1 deletion spec/models/sprint_feedback_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion spec/models/sprint_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion spec/models/task_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions spec/system/sprint_feedbacks_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
fixtures :all

before do
travel_to "2023-02-02"
travel_to "2023-02-05"
login :john
end

Expand All @@ -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

Expand Down

0 comments on commit f8d2d57

Please sign in to comment.