Skip to content

Commit ec5ff1a

Browse files
authored
Merge pull request opf#15495 from opf/feature/53669-change-default-view-for-meetings-module-to-upcoming-invitations
[#53669] Change default view for meetings module to upcoming invitations
2 parents f336189 + 70e2a64 commit ec5ff1a

File tree

7 files changed

+76
-61
lines changed

7 files changed

+76
-61
lines changed

modules/meeting/app/controllers/meetings_controller.rb

+23-21
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class MeetingsController < ApplicationController
5858
def index
5959
@query = load_query
6060
@meetings = load_meetings(@query)
61-
render 'index', locals: { menu_name: project_or_global_menu }
61+
render "index", locals: { menu_name: project_or_global_menu }
6262
end
6363

6464
current_menu_item :index do
@@ -70,11 +70,11 @@ def show
7070
if @meeting.is_a?(StructuredMeeting)
7171
render(Meetings::ShowComponent.new(meeting: @meeting, project: @project))
7272
elsif @meeting.agenda.present? && @meeting.agenda.locked?
73-
params[:tab] ||= 'minutes'
73+
params[:tab] ||= "minutes"
7474
end
7575
end
7676

77-
def create
77+
def create # rubocop:disable Metrics/AbcSize
7878
call =
7979
if @copy_from
8080
::Meetings::CopyService
@@ -90,14 +90,15 @@ def create
9090
text = I18n.t(:notice_successful_create)
9191
if User.current.time_zone.nil?
9292
link = I18n.t(:notice_timezone_missing, zone: Time.zone)
93-
text += " #{view_context.link_to(link, { controller: '/my', action: :settings, anchor: 'pref_time_zone' }, class: 'link_to_profile')}"
93+
text += " #{view_context.link_to(link, { controller: '/my', action: :settings, anchor: 'pref_time_zone' },
94+
class: 'link_to_profile')}"
9495
end
9596
flash[:notice] = text.html_safe # rubocop:disable Rails/OutputSafety
9697

97-
redirect_to action: 'show', id: call.result
98+
redirect_to action: "show", id: call.result
9899
else
99100
@meeting = call.result
100-
render template: 'meetings/new', project_id: @project, locals: { copy_from: @copy_from }
101+
render template: "meetings/new", project_id: @project, locals: { copy_from: @copy_from }
101102
end
102103
end
103104

@@ -114,13 +115,13 @@ def copy
114115
.call(save: false)
115116

116117
@meeting = call.result
117-
render action: 'new', project_id: @project, locals: { copy_from: }
118+
render action: "new", project_id: @project, locals: { copy_from: }
118119
end
119120

120121
def destroy
121122
@meeting.destroy
122123
flash[:notice] = I18n.t(:notice_successful_delete)
123-
redirect_to action: 'index', project_id: @project
124+
redirect_to action: "index", project_id: @project
124125
end
125126

126127
def edit
@@ -155,9 +156,9 @@ def update
155156
@meeting.attributes = @converted_params
156157
if @meeting.save
157158
flash[:notice] = I18n.t(:notice_successful_update)
158-
redirect_to action: 'show', id: @meeting
159+
redirect_to action: "show", id: @meeting
159160
else
160-
render action: 'edit'
161+
render action: "edit"
161162
end
162163
end
163164

@@ -239,7 +240,7 @@ def notify
239240
flash[:notice] = I18n.t(:notice_successful_notification)
240241
else
241242
flash[:error] = I18n.t(:error_notification_with_errors,
242-
recipients: result.errors.map(&:name).join('; '))
243+
recipients: result.errors.map(&:name).join("; "))
243244
end
244245

245246
redirect_to action: :show, id: @meeting
@@ -256,7 +257,7 @@ def load_query
256257
query = apply_default_filter_if_none_given(query)
257258

258259
if @project
259-
query.where("project_id", '=', @project.id)
260+
query.where("project_id", "=", @project.id)
260261
end
261262

262263
query
@@ -266,6 +267,7 @@ def apply_default_filter_if_none_given(query)
266267
return query if query.filters.any?
267268

268269
query.where("time", "=", Queries::Meetings::Filters::TimeFilter::FUTURE_VALUE)
270+
query.where("invited_user_id", "=", [User.current.id.to_s])
269271
end
270272

271273
def load_meetings(query)
@@ -337,15 +339,15 @@ def structured_meeting_params
337339

338340
def meeting_type(given_type)
339341
case given_type
340-
when 'dynamic'
341-
'StructuredMeeting'
342+
when "dynamic"
343+
"StructuredMeeting"
342344
else
343-
'Meeting'
345+
"Meeting"
344346
end
345347
end
346348

347349
def verify_activities_module_activated
348-
render_403 if @project && !@project.module_enabled?('activity')
350+
render_403 if @project && !@project.module_enabled?("activity")
349351
end
350352

351353
def set_activity
@@ -368,12 +370,12 @@ def activity_scope
368370
end
369371

370372
def determine_date_range
371-
@days = 31 # Setting.activity_days_default.to_i
373+
@days = Setting.activity_days_default.to_i
372374

373375
if params[:from]
374376
begin
375-
; @date_to = params[:from].to_date + 1.day;
376-
rescue StandardError;
377+
@date_to = params[:from].to_date + 1.day
378+
rescue StandardError
377379
end
378380
end
379381

@@ -395,8 +397,8 @@ def find_copy_from_meeting
395397

396398
def copy_attributes
397399
{
398-
copy_agenda: params[:copy_agenda] == '1',
399-
copy_attachments: params[:copy_attachments] == '1',
400+
copy_agenda: params[:copy_agenda] == "1",
401+
copy_attachments: params[:copy_attachments] == "1"
400402
}
401403
end
402404
end

modules/meeting/app/helpers/meetings_helper.rb

+7-8
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,12 @@ def involvement_sidebar_menu_items
4444
end
4545

4646
def menu_upcoming_meetings_item
47-
path = project_or_global_meetings_path
47+
path = project_or_global_meetings_path(
48+
filters: [
49+
{ time: { operator: "=", values: ["future"] } }
50+
],
51+
sort: "start_time"
52+
)
4853

4954
menu_link_element path, t(:label_upcoming_meetings)
5055
end
@@ -59,13 +64,7 @@ def menu_past_meetings_item
5964
end
6065

6166
def menu_upcoming_invitations_item
62-
path = project_or_global_meetings_path(
63-
filters: [
64-
{ time: { operator: "=", values: ["future"] } },
65-
{ invited_user_id: { operator: "=", values: [User.current.id.to_s] } }
66-
],
67-
sort: "start_time"
68-
)
67+
path = project_or_global_meetings_path
6968

7069
menu_link_element path, t(:label_upcoming_invitations)
7170
end

modules/meeting/spec/controllers/meetings_controller_spec.rb

+4-5
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@
4848
let(:meetings) do
4949
[
5050
create(:meeting, project:),
51-
create(:meeting, project:),
52-
create(:meeting, project: other_project)
51+
create(:meeting, author: user, project:),
52+
create(:meeting, author: user, project: other_project)
5353
]
5454
end
5555

@@ -58,9 +58,8 @@
5858
before do
5959
get "index"
6060
end
61-
6261
it { expect(response).to be_successful }
63-
it { expect(assigns(:meetings)).to match_array meetings }
62+
it { expect(assigns(:meetings)).to match_array meetings[1..2] }
6463
end
6564

6665
context "when requesting meetings scoped to a project ID" do
@@ -69,7 +68,7 @@
6968
end
7069

7170
it { expect(response).to be_successful }
72-
it { expect(assigns(:meetings)).to match_array meetings[0..1] }
71+
it { expect(assigns(:meetings)).to match_array meetings[1] }
7372
end
7473
end
7574
end

modules/meeting/spec/features/meetings_delete_spec.rb

+3
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@
4545
let(:index_path) { project_meetings_path(project) }
4646

4747
before do
48+
create(:meeting_participant, :invitee, user:, meeting:)
49+
create(:meeting_participant, :invitee, user:, meeting: other_meeting)
50+
4851
login_as(user)
4952
end
5053

modules/meeting/spec/features/meetings_global_menu_item_spec.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,9 @@
5555
expect(page).to have_current_path("/meetings")
5656
end
5757

58-
specify '"Upcoming meetings" is the default filter set' do
58+
specify '"Upcoming invitations" is the default filter set' do
5959
within "#main-menu" do
60-
expect(page).to have_css(".selected", text: I18n.t(:label_upcoming_meetings))
60+
expect(page).to have_css(".selected", text: I18n.t(:label_upcoming_invitations))
6161
end
6262
end
6363
end

modules/meeting/spec/features/meetings_index_spec.rb

+33-25
Original file line numberDiff line numberDiff line change
@@ -81,33 +81,38 @@
8181
create(:meeting, project:, title: "Awesome meeting yesterday!", start_time: 1.day.ago)
8282
end
8383

84-
shared_let(:other_project_meeting) do
84+
let(:other_project_meeting) do
8585
create(:meeting,
8686
project: other_project,
8787
title: "Awesome other project meeting!",
8888
start_time: 2.days.from_now,
8989
duration: 2.0,
9090
location: "not-a-url")
9191
end
92+
let(:ongoing_meeting) do
93+
create(:meeting, project:, title: "Awesome ongoing meeting!", start_time: 30.minutes.ago)
94+
end
9295

9396
def setup_meeting_involvement
94-
create(:meeting_participant, :invitee, user:, meeting: tomorrows_meeting)
95-
create(:meeting_participant, :invitee, user:, meeting: yesterdays_meeting)
97+
invite_to_meeting(tomorrows_meeting)
98+
invite_to_meeting(yesterdays_meeting)
9699
create(:meeting_participant, :attendee, user:, meeting:)
97100
meeting.update!(author: user)
98101
end
99102

103+
def invite_to_meeting(meeting)
104+
create(:meeting_participant, :invitee, user:, meeting:)
105+
end
106+
100107
before do
101108
login_as user
102109
end
103110

104111
shared_examples "sidebar filtering" do |context:|
105112
context "when filtering with the sidebar" do
106-
shared_let(:ongoing_meeting) do
107-
create(:meeting, project:, title: "Awesome ongoing meeting!", start_time: 30.minutes.ago)
108-
end
109-
110113
before do
114+
ongoing_meeting
115+
other_project_meeting
111116
setup_meeting_involvement
112117
meetings_page.visit!
113118
end
@@ -199,20 +204,22 @@ def setup_meeting_involvement
199204
context "when visiting from a global context" do
200205
let(:meetings_page) { Pages::Meetings::Index.new(project: nil) }
201206

202-
it "lists all upcoming meetings for all projects the user has access to" do
203-
meeting
204-
yesterdays_meeting
207+
it "lists all upcoming meetings for all projects the user is invited to" do
208+
invite_to_meeting(meeting)
209+
invite_to_meeting(yesterdays_meeting)
210+
invite_to_meeting(other_project_meeting)
205211

206212
meetings_page.navigate_by_modules_menu
207213
meetings_page.expect_meetings_listed(meeting, other_project_meeting)
208214
meetings_page.expect_meetings_not_listed(yesterdays_meeting)
209215
end
210216

211217
it "renders a link to each meeting's location if present and a valid URL" do
212-
meeting
213-
meeting_with_no_location
214-
meeting_with_malicious_location
215-
tomorrows_meeting
218+
invite_to_meeting(meeting)
219+
invite_to_meeting(meeting_with_no_location)
220+
invite_to_meeting(meeting_with_malicious_location)
221+
invite_to_meeting(tomorrows_meeting)
222+
invite_to_meeting(other_project_meeting)
216223

217224
meetings_page.visit!
218225

@@ -245,7 +252,8 @@ def setup_meeting_involvement
245252

246253
describe "sorting" do
247254
before do
248-
meeting
255+
invite_to_meeting(meeting)
256+
invite_to_meeting(other_project_meeting)
249257
visit meetings_path
250258
# Start Time ASC is the default sort order for Upcoming meetings
251259
# We can assert the initial sort by expecting the order is
@@ -338,16 +346,16 @@ def setup_meeting_involvement
338346
include_examples "sidebar filtering", context: :project
339347

340348
specify "with 1 meeting listed" do
341-
meeting
349+
invite_to_meeting(meeting)
342350
meetings_page.visit!
343351

344352
meetings_page.expect_meetings_listed(meeting)
345353
end
346354

347355
it "with pagination", with_settings: { per_page_options: "1" } do
348-
meeting
349-
tomorrows_meeting
350-
yesterdays_meeting
356+
invite_to_meeting(meeting)
357+
invite_to_meeting(tomorrows_meeting)
358+
invite_to_meeting(yesterdays_meeting)
351359

352360
# First page displays the soonest occurring upcoming meeting
353361
meetings_page.visit!
@@ -365,10 +373,10 @@ def setup_meeting_involvement
365373
end
366374

367375
it "renders a link to each meeting's location if present and a valid URL" do
368-
meeting
369-
meeting_with_no_location
370-
meeting_with_malicious_location
371-
tomorrows_meeting
376+
invite_to_meeting(meeting)
377+
invite_to_meeting(meeting_with_no_location)
378+
invite_to_meeting(meeting_with_malicious_location)
379+
invite_to_meeting(tomorrows_meeting)
372380

373381
meetings_page.visit!
374382
meetings_page.expect_link_to_meeting_location(meeting)
@@ -379,8 +387,8 @@ def setup_meeting_involvement
379387

380388
describe "sorting" do
381389
before do
382-
meeting
383-
tomorrows_meeting
390+
invite_to_meeting(meeting)
391+
invite_to_meeting(tomorrows_meeting)
384392
meetings_page.visit!
385393
# Start Time ASC is the default sort order for Upcoming meetings
386394
# We can assert the initial sort by expecting the order is

modules/meeting/spec/features/meetings_show_spec.rb

+4
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@
4343
current_user { user }
4444

4545
describe "navigate to meeting page" do
46+
before do
47+
create(:meeting_participant, :invitee, user:, meeting:)
48+
end
49+
4650
let(:permissions) { %i[view_meetings] }
4751

4852
it "can visit the meeting" do

0 commit comments

Comments
 (0)