diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 50ebce4e8d8..9be9a0d364d 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -46,8 +46,7 @@ def display_dashboard @inactive_students = User.with_attached_avatar.inactive_students_and_trainees.order(last_activity_at: :desc) @job_seeking_users = User.with_attached_avatar.job_seeking.includes(:reports, :products, :works, :course, :company) @colleague_trainees = current_user.colleague_trainees.with_attached_avatar.includes(:reports, :products, :comments) - colleague_trainees_reports = Report.with_avatar.where(wip: false).where(user: current_user.colleague_trainees.with_attached_avatar) - @colleague_trainees_recent_reports = colleague_trainees_reports.order(reported_on: :desc).limit(10) + @colleague_trainees_recent_reports = ColleagueTraineesRecentReportsQuery.new(current_user:).call.limit(10) @recent_reports = Report.with_avatar.where(wip: false).order(reported_on: :desc, created_at: :desc).limit(10) @product_deadline_day = Product::PRODUCT_DEADLINE @colleagues = current_user.colleagues_other_than_self diff --git a/app/queries/colleague_trainees_recent_reports_query.rb b/app/queries/colleague_trainees_recent_reports_query.rb new file mode 100644 index 00000000000..93f0e7ddee7 --- /dev/null +++ b/app/queries/colleague_trainees_recent_reports_query.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +class ColleagueTraineesRecentReportsQuery < Patterns::Query + queries Report + + private + + def query + relation + .joins(:user) + .where(users: { id: colleague_trainee_ids }) + .not_wip + .default_order + .with_avatar + end + + def initialize(relation = Report.all, current_user:) + super(relation) + @current_user = current_user + end + + def colleague_trainee_ids + @current_user.colleague_trainees.pluck(:id) + end +end diff --git a/test/fixtures/reports.yml b/test/fixtures/reports.yml index 9425488d21d..96ac2491bd9 100644 --- a/test/fixtures/reports.yml +++ b/test/fixtures/reports.yml @@ -350,3 +350,11 @@ report74: description: 休会します wip: true reported_on: "2019-12-31" + +report75: + user: kensyu + title: WIPの日報 + emotion: 1 + description: WIPです + wip: true + reported_on: "2022-04-02" diff --git a/test/queries/colleague_trainees_recent_reports_query_test.rb b/test/queries/colleague_trainees_recent_reports_query_test.rb new file mode 100644 index 00000000000..4353b97a2e9 --- /dev/null +++ b/test/queries/colleague_trainees_recent_reports_query_test.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +require 'test_helper' + +class ColleagueTraineesRecentReportsQueryTest < ActiveSupport::TestCase + test 'should return colleague trainees recent reports' do + user = users(:senpai) + trainee_report = reports(:report11) + other_report = reports(:report10) + + result = ColleagueTraineesRecentReportsQuery.new(current_user: user).call + + assert_includes result, trainee_report + assert_not_includes result, other_report + end + + test 'should exclude report with wip' do + user = users(:senpai) + wip_report = reports(:report75) + + result = ColleagueTraineesRecentReportsQuery.new(current_user: user).call + + assert_not_includes result, wip_report + end + + test 'should be ordered by recent' do + user = users(:senpai) + + result = ColleagueTraineesRecentReportsQuery.new(current_user: user).call + + dates = result.map(&:reported_on) + assert_equal dates, dates.sort.reverse + end +end diff --git a/test/system/training_completion_test.rb b/test/system/training_completion_test.rb index 61976cf5fbe..784faad9da8 100644 --- a/test/system/training_completion_test.rb +++ b/test/system/training_completion_test.rb @@ -86,12 +86,13 @@ class TrainingCompletionTest < ApplicationSystemTestCase visit new_training_completion_path find('label', text: 'とても良い').click - assert_difference '@user.reports.wip.count', -1 do - page.accept_confirm '本当によろしいですか?' do - click_on '研修を終了する' - end - assert_text '研修終了手続きが完了しました' + + page.accept_confirm '本当によろしいですか?' do + click_on '研修を終了する' end + + assert_text '研修終了手続きが完了しました' + assert_not @user.reports.wip.exists? assert_equal Time.current, @user.reload.training_completed_at end