mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-11-15 13:45:25 +08:00
114 lines
4.1 KiB
Ruby
114 lines
4.1 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
require 'rails_helper'
|
||
|
|
||
|
RSpec.describe 'Api::V1::UsersIdentitiesController', type: :request do
|
||
|
before :all do
|
||
|
@user1 = create(:user, email: Faker::Internet.unique.email)
|
||
|
@user2 = create(:user, email: Faker::Internet.unique.email)
|
||
|
create(:user_identity, user: @user1,
|
||
|
uid: Faker::Crypto.unique.sha1, provider: Faker::App.unique.name)
|
||
|
@valid_headers =
|
||
|
{ 'Authorization': 'Bearer ' + generate_token(@user1.id) }
|
||
|
end
|
||
|
|
||
|
describe 'GET user_identities, #index' do
|
||
|
it 'When valid request, requested identities for current user' do
|
||
|
hash_body = nil
|
||
|
get api_v1_user_user_identities_path(user_id: @user1.id),
|
||
|
headers: @valid_headers
|
||
|
expect { hash_body = json }.not_to raise_exception
|
||
|
expect(hash_body[:data]).to match(
|
||
|
ActiveModelSerializers::SerializableResource
|
||
|
.new(@user1.user_identities,
|
||
|
each_serializer: Api::V1::UserIdentitySerializer)
|
||
|
.as_json[:data]
|
||
|
)
|
||
|
end
|
||
|
|
||
|
it 'When invalid request, requested user is not signed in user' do
|
||
|
hash_body = nil
|
||
|
get api_v1_user_user_identities_path(user_id: @user2.id),
|
||
|
headers: @valid_headers
|
||
|
expect(response).to have_http_status(403)
|
||
|
expect(hash_body).to match(nil)
|
||
|
end
|
||
|
|
||
|
it 'When invalid request, non existing user' do
|
||
|
hash_body = nil
|
||
|
get api_v1_user_user_identities_path(user_id: 123),
|
||
|
headers: @valid_headers
|
||
|
expect(response).to have_http_status(403)
|
||
|
expect(hash_body).to match(nil)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe 'POST user_identities, #create' do
|
||
|
it 'When valid request, create new identity for current user' do
|
||
|
hash_body = nil
|
||
|
post api_v1_user_user_identities_path(user_id: @user1.id),
|
||
|
params: {
|
||
|
data: { type: 'user_identities',
|
||
|
attributes: { uid: Faker::Crypto.unique.sha1,
|
||
|
provider: Faker::App.unique.name } }
|
||
|
},
|
||
|
headers: @valid_headers
|
||
|
expect { hash_body = json }.not_to raise_exception
|
||
|
expect(hash_body[:data]).to match(
|
||
|
ActiveModelSerializers::SerializableResource
|
||
|
.new(@user1.user_identities.order(:id).last,
|
||
|
serializer: Api::V1::UserIdentitySerializer)
|
||
|
.as_json[:data]
|
||
|
)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe 'GET user_identity, #show' do
|
||
|
it 'When valid request, requested specific identity for current user' do
|
||
|
hash_body = nil
|
||
|
get api_v1_user_user_identity_path(
|
||
|
user_id: @user1.id, id: @user1.user_identities.order(:id).last
|
||
|
), headers: @valid_headers
|
||
|
expect { hash_body = json }.not_to raise_exception
|
||
|
expect(hash_body[:data]).to match(
|
||
|
ActiveModelSerializers::SerializableResource
|
||
|
.new(@user1.user_identities.order(:id).last,
|
||
|
serializer: Api::V1::UserIdentitySerializer)
|
||
|
.as_json[:data]
|
||
|
)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe 'PUT user_identities, #update' do
|
||
|
it 'When valid request, update identity for current user' do
|
||
|
hash_body = nil
|
||
|
put api_v1_user_user_identity_path(user_id: @user1.id,
|
||
|
id: @user1.user_identities.order(:id).last),
|
||
|
params: {
|
||
|
data: { id: @user1.user_identities.order(:id).last.id,
|
||
|
type: 'user_identities',
|
||
|
attributes: { uid: Faker::Crypto.unique.sha1 } }
|
||
|
},
|
||
|
headers: @valid_headers
|
||
|
expect { hash_body = json }.not_to raise_exception
|
||
|
expect(hash_body[:data]).to match(
|
||
|
ActiveModelSerializers::SerializableResource
|
||
|
.new(@user1.user_identities.order(:id).last,
|
||
|
serializer: Api::V1::UserIdentitySerializer)
|
||
|
.as_json[:data]
|
||
|
)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe 'DELETE user_identity, #destroy' do
|
||
|
it 'When valid request, destroy specified identity for current user' do
|
||
|
identity = @user1.user_identities.order(:id).last
|
||
|
delete api_v1_user_user_identity_path(user_id: @user1.id, id: identity),
|
||
|
headers: @valid_headers
|
||
|
expect(response).to have_http_status(200)
|
||
|
expect(response.body).to eq('')
|
||
|
expect(UserIdentity.find_by_id(identity.id)).to eq(nil)
|
||
|
end
|
||
|
end
|
||
|
end
|