Follow up - fb917979 - Fixes #3635 - REST doc of Online Notification controler is outdated/wrong and expand param is missing

This commit is contained in:
Bola Ahmed Buari 2021-07-05 16:03:29 +01:00 committed by Martin Edenhofer
parent 33a5f470e0
commit 00169d67a9
2 changed files with 82 additions and 77 deletions

View file

@ -100,15 +100,11 @@ return all online notifications of an user
notifications = OnlineNotification.list(user, limit) notifications = OnlineNotification.list(user, limit)
or with expand data
notifications = OnlineNotification.list(user, limit, expand)
=end =end
def self.list(user, limit) def self.list(user, limit)
OnlineNotification.where(user_id: user.id) OnlineNotification.where(user_id: user.id)
.order('created_at DESC, id DESC') .order(created_at: :desc)
.limit(limit) .limit(limit)
end end
@ -256,26 +252,4 @@ with dedicated times
true true
end end
# streamline structur
def attributes_with_association_names
attributes = super
map = {
'object_lookup' => 'object',
'object_lookup_id' => 'object_id',
'type_lookup' => 'type',
'type_lookup_id' => 'type_id',
}
map.each do |key, value|
next if !attributes.key?(key)
attributes[value] = attributes[key]
attributes.delete(key)
end
attributes['object'] = ObjectLookup.by_id(attributes['object_id']) if attributes['object_id'].present?
attributes['type'] = TypeLookup.by_id(attributes['type_id']) if attributes['type_id'].present?
attributes
end
end end

View file

@ -6,6 +6,7 @@ RSpec.describe OnlineNotification, type: :request do
let(:admin) { create(:admin, groups: Group.all) } let(:admin) { create(:admin, groups: Group.all) }
let(:agent) { create(:agent, groups: Group.all) } let(:agent) { create(:agent, groups: Group.all) }
let(:user_id) { user.id }
let(:type_lookup_id) { TypeLookup.by_name('create') } let(:type_lookup_id) { TypeLookup.by_name('create') }
let(:object_lookup_id) { ObjectLookup.by_name('User') } let(:object_lookup_id) { ObjectLookup.by_name('User') }
@ -36,7 +37,7 @@ RSpec.describe OnlineNotification, type: :request do
end end
end end
shared_examples 'for notification id' do shared_examples 'for notification id in array' do
it 'has a notification id' do it 'has a notification id' do
get path, params: {}, as: :json get path, params: {}, as: :json
@ -44,11 +45,59 @@ RSpec.describe OnlineNotification, type: :request do
end end
end end
shared_examples 'for object attribute' do shared_examples 'for notification id in hash' do
it 'has a object attribute' do it 'has a notification id' do
get path, params: {}, as: :json get path, params: {}, as: :json
expect(json_response[0]['object']).to be_a_kind_of(String) expect(json_response['id']).to be online_notification.id
end
end
shared_examples 'for user id in array' do
it 'has a user id' do
get path, params: {}, as: :json
expect(json_response[0]['user_id']).to eq(user_id)
end
end
shared_examples 'for user id in hash' do
it 'has a user id' do
get path, params: {}, as: :json
expect(json_response['user_id']).to eq(user_id)
end
end
shared_examples 'for object lookup id in array' do
it 'has a object lookup id' do
get path, params: {}, as: :json
expect(json_response[0]['object_lookup_id']).to eq(object_lookup_id)
end
end
shared_examples 'for object lookup id in hash' do
it 'has a object lookup' do
get path, params: {}, as: :json
expect(json_response['object_lookup_id']).to eq(object_lookup_id)
end
end
shared_examples 'for type lookup id in array' do
it 'has a type lookup id' do
get path, params: {}, as: :json
expect(json_response[0]['type_lookup_id']).to eq(type_lookup_id)
end
end
shared_examples 'for type lookup id in hash' do
it 'has a type lookup' do
get path, params: {}, as: :json
expect(json_response['type_lookup_id']).to eq(type_lookup_id)
end end
end end
@ -67,21 +116,12 @@ RSpec.describe OnlineNotification, type: :request do
context 'when online notifications is requested' do context 'when online notifications is requested' do
let(:path) { '/api/v1/online_notifications' } let(:path) { '/api/v1/online_notifications' }
it 'has an object lookup id' do
get path, params: {}, as: :json
expect(json_response[0]['object_lookup_id']).to be_a_kind_of(Integer)
end
it 'has a type lookup id' do
get path, params: {}, as: :json
expect(json_response[0]['type_lookup_id']).to be_a_kind_of(Integer)
end
include_examples 'for successful request' include_examples 'for successful request'
include_examples 'for array response' include_examples 'for array response'
include_examples 'for notification id' include_examples 'for notification id in array'
include_examples 'for user id in array'
include_examples 'for object lookup id in array'
include_examples 'for type lookup id in array'
end end
context 'when online notifications is requested with full params' do context 'when online notifications is requested with full params' do
@ -106,14 +146,21 @@ RSpec.describe OnlineNotification, type: :request do
it 'has a type attribute' do it 'has a type attribute' do
get path, params: {}, as: :json get path, params: {}, as: :json
expect(json_response[0]['type']).to be_a_kind_of(String) expect(json_response[0]['type']).to eq('create')
end
it 'has a object attribute' do
get path, params: {}, as: :json
expect(json_response[0]['object']).to eq('User')
end end
include_examples 'for successful request' include_examples 'for successful request'
include_examples 'for array response' include_examples 'for array response'
include_examples 'for object attribute' include_examples 'for notification id in array'
include_examples 'for notification id' include_examples 'for user id in array'
include_examples 'for object lookup id in array'
include_examples 'for type lookup id in array'
end end
end end
@ -123,26 +170,12 @@ RSpec.describe OnlineNotification, type: :request do
context 'when specific online notifications is requested' do context 'when specific online notifications is requested' do
let(:path) { "/api/v1/online_notifications/#{online_notification.id}" } let(:path) { "/api/v1/online_notifications/#{online_notification.id}" }
it 'has a notification id' do
get path, params: {}, as: :json
expect(json_response['id']).to be online_notification.id
end
it 'has a type lookup id' do
get path, params: {}, as: :json
expect(json_response['type_lookup_id']).to be_a_kind_of(Integer)
end
it 'has an object lookup id' do
get path, params: {}, as: :json
expect(json_response['object_lookup_id']).to be_a_kind_of(Integer)
end
include_examples 'for successful request' include_examples 'for successful request'
include_examples 'for hash response' include_examples 'for hash response'
include_examples 'for notification id in hash'
include_examples 'for user id in hash'
include_examples 'for object lookup id in hash'
include_examples 'for type lookup id in hash'
end end
context 'when specific online notifications is requested with full params' do context 'when specific online notifications is requested with full params' do
@ -165,23 +198,21 @@ RSpec.describe OnlineNotification, type: :request do
it 'has a type attribute' do it 'has a type attribute' do
get path, params: {}, as: :json get path, params: {}, as: :json
expect(json_response['type']).to be_a_kind_of(String) expect(json_response['type']).to eq('create')
end end
it 'has a object attribute' do it 'has a object attribute' do
get path, params: {}, as: :json get path, params: {}, as: :json
expect(json_response['object']).to be_a_kind_of(String) expect(json_response['object']).to eq('User')
end
it 'has a notification id' do
get path, params: {}, as: :json
expect(json_response['id']).to be online_notification.id
end end
include_examples 'for successful request' include_examples 'for successful request'
include_examples 'for hash response' include_examples 'for hash response'
include_examples 'for notification id in hash'
include_examples 'for user id in hash'
include_examples 'for object lookup id in hash'
include_examples 'for type lookup id in hash'
end end
end end
@ -212,7 +243,7 @@ RSpec.describe OnlineNotification, type: :request do
let(:user) { create(:admin, groups: Group.all) } let(:user) { create(:admin, groups: Group.all) }
let(:online_notification) do let(:online_notification) do
create(:online_notification, o_id: admin.id, user_id: user.id, type_lookup_id: type_lookup_id, object_lookup_id: object_lookup_id) create(:online_notification, o_id: admin.id, user_id: user_id, type_lookup_id: type_lookup_id, object_lookup_id: object_lookup_id)
end end
let(:different_online_notification) do let(:different_online_notification) do
@ -230,7 +261,7 @@ RSpec.describe OnlineNotification, type: :request do
let(:user) { create(:agent, groups: Group.all) } let(:user) { create(:agent, groups: Group.all) }
let(:online_notification) do let(:online_notification) do
create(:online_notification, o_id: admin.id, user_id: user.id, type_lookup_id: type_lookup_id, object_lookup_id: object_lookup_id) create(:online_notification, o_id: admin.id, user_id: user_id, type_lookup_id: type_lookup_id, object_lookup_id: object_lookup_id)
end end
let(:different_online_notification) do let(:different_online_notification) do
@ -248,7 +279,7 @@ RSpec.describe OnlineNotification, type: :request do
let(:user) { create(:customer) } let(:user) { create(:customer) }
let(:online_notification) do let(:online_notification) do
create(:online_notification, o_id: user.id, user_id: user.id, type_lookup_id: type_lookup_id, object_lookup_id: object_lookup_id) create(:online_notification, o_id: user_id, user_id: user_id, type_lookup_id: type_lookup_id, object_lookup_id: object_lookup_id)
end end
let(:different_online_notification) do let(:different_online_notification) do