mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2024-12-13 23:48:55 +01:00
104 lines
3.7 KiB
Ruby
104 lines
3.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'test_helper'
|
|
|
|
class NotificationsTest < ActionDispatch::IntegrationTest
|
|
test 'Index lists all notifications if user has no notifications preferences' do
|
|
@member = User.find(4)
|
|
login_as(@member, scope: :user)
|
|
|
|
get '/api/notifications'
|
|
|
|
# Check response format & status
|
|
assert_equal 200, response.status, response.body
|
|
assert_match Mime[:json].to_s, response.content_type
|
|
|
|
# Check the list items are ok
|
|
# ! Only works if notifications fixtures for this user are < NOTIFICATIONS_PER_PAGE (See NotificationsController#index)
|
|
notifications_total = json_response(response.body)[:totals][:total]
|
|
|
|
assert_not_equal notifications.count, 0
|
|
assert_equal Notification.where(receiver_id: @member.id).count, notifications_total
|
|
end
|
|
|
|
test 'Index filters notifications if user has preferences for in_system notifications set to false' do
|
|
@admin = User.find_by(username: 'admin')
|
|
login_as(@admin, scope: :user)
|
|
|
|
get '/api/notifications'
|
|
|
|
# Check response format & status
|
|
assert_equal 200, response.status, response.body
|
|
assert_match Mime[:json].to_s, response.content_type
|
|
|
|
# Check the list items are ok
|
|
notifications_total = json_response(response.body)[:totals][:total]
|
|
assert_not_equal notifications.count, 0
|
|
|
|
assert_equal NotificationPreference.where(user_id: @admin.id, in_system: false).count, 1
|
|
assert_equal (Notification.where(receiver_id: @admin.id).count - 1), notifications_total
|
|
end
|
|
|
|
test 'Last unread returns last 3 unread notifications' do
|
|
@member = User.find(4)
|
|
login_as(@member, scope: :user)
|
|
|
|
transaction1 = WalletService.new(user: @member, wallet: @member.wallet).credit(1)
|
|
transaction2 = WalletService.new(user: @member, wallet: @member.wallet).credit(2)
|
|
transaction3 = WalletService.new(user: @member, wallet: @member.wallet).credit(4)
|
|
|
|
get '/api/notifications/last_unread'
|
|
|
|
# Check response format & status
|
|
assert_equal 200, response.status, response.body
|
|
assert_match Mime[:json].to_s, response.content_type
|
|
|
|
# Check the list items are ok
|
|
# Beware that the order of last unread notifications is descending,
|
|
# Since the last created will be the first to appear.
|
|
last_notifications = json_response(response.body)[:notifications]
|
|
assert_equal last_notifications[0][:attached_object][:id], transaction3.id
|
|
assert_equal last_notifications[1][:attached_object][:id], transaction2.id
|
|
assert_equal last_notifications[2][:attached_object][:id], transaction1.id
|
|
end
|
|
|
|
test 'update marks a notification as read' do
|
|
@member = User.find(4)
|
|
login_as(@member, scope: :user)
|
|
|
|
transaction = WalletService.new(user: @member, wallet: @member.wallet).credit(1)
|
|
|
|
notification = Notification.where(receiver_id: @member.id).last
|
|
assert_equal notification.attached_object_id, transaction.id
|
|
assert_equal notification.is_read, false
|
|
|
|
patch "/api/notifications/#{notification.id}"
|
|
|
|
# Check response format & status
|
|
assert_equal 200, response.status, response.body
|
|
assert_match Mime[:json].to_s, response.content_type
|
|
|
|
# Check the list items are ok
|
|
updated_notification = json_response(response.body)
|
|
|
|
assert_equal updated_notification[:attached_object][:id], transaction.id
|
|
assert_equal updated_notification[:is_read], true
|
|
end
|
|
|
|
test 'update_all marks all notification as read' do
|
|
@admin = User.find_by(username: 'admin')
|
|
login_as(@admin, scope: :user)
|
|
|
|
patch '/api/notifications'
|
|
|
|
# Check response format & status
|
|
assert_equal 204, response.status, response.body
|
|
|
|
notifications = Notification.where(receiver_id: @admin.id)
|
|
|
|
notifications.each do |notification|
|
|
assert_equal true, notification.is_read
|
|
end
|
|
end
|
|
end
|