diff --git a/app/finders/notification_finder.rb b/app/finders/notification_finder.rb index 7559d6ef9..7e5789372 100644 --- a/app/finders/notification_finder.rb +++ b/app/finders/notification_finder.rb @@ -26,6 +26,7 @@ class NotificationFinder def set_up find_all_notifications + filter_by_read_status filter_by_status end @@ -37,11 +38,15 @@ class NotificationFinder @notifications = @notifications.where('snoozed_until > ?', DateTime.now.utc) if params[:status] == 'snoozed' end + def filter_by_read_status + @notifications = @notifications.where.not(read_at: nil) if params[:type] == 'read' + end + def current_page params[:page] || 1 end def notifications - @notifications.page(current_page).per(RESULTS_PER_PAGE).order(last_activity_at: :desc) + @notifications.page(current_page).per(RESULTS_PER_PAGE).order(last_activity_at: params[:sort_order] || :desc) end end diff --git a/spec/finders/notification_finder_spec.rb b/spec/finders/notification_finder_spec.rb index 294cef7ff..48a9f2785 100644 --- a/spec/finders/notification_finder_spec.rb +++ b/spec/finders/notification_finder_spec.rb @@ -63,5 +63,42 @@ describe NotificationFinder do expect(result).to be 1 end end + + context 'when type read param is passed' do + let(:params) { { type: 'read' } } + + it 'returns only read notifications' do + result = notification_finder.perform + expect(result.length).to be 2 + end + + it 'returns count' do + result = notification_finder.count + expect(result).to be 2 + end + end + + context 'when type read and snoozed param is passed' do + let(:params) { { type: 'read', status: 'snoozed' } } + + it 'returns only read notifications' do + result = notification_finder.perform + expect(result.length).to be 0 + end + + it 'returns count' do + result = notification_finder.count + expect(result).to be 0 + end + end + + context 'when sort order is passed' do + let(:params) { { sort_order: :asc } } + + it 'returns notifications in ascending order' do + result = notification_finder.perform + expect(result.first.last_activity_at).to be < result.last.last_activity_at + end + end end end