|
|
|
@ -33,21 +33,11 @@ describe 'API v3 Principals resource', type: :request do |
|
|
|
|
include Rack::Test::Methods |
|
|
|
|
include API::V3::Utilities::PathHelper |
|
|
|
|
|
|
|
|
|
describe '#get principals' do |
|
|
|
|
let(:path) do |
|
|
|
|
path = api_v3_paths.principals |
|
|
|
|
|
|
|
|
|
query_props = [] |
|
|
|
|
|
|
|
|
|
if order |
|
|
|
|
query_props << "sortBy=#{JSON.dump(order.map { |(k, v)| [k, v] })}" |
|
|
|
|
end |
|
|
|
|
describe '#GET /api/v3/principals' do |
|
|
|
|
subject(:response) { last_response } |
|
|
|
|
|
|
|
|
|
if filter |
|
|
|
|
query_props << "filters=#{CGI.escape(JSON.dump(filter))}" |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
"#{path}?#{query_props.join('&')}" |
|
|
|
|
let(:path) do |
|
|
|
|
api_v3_paths.path_for :principals, filters: filter, sort_by: order |
|
|
|
|
end |
|
|
|
|
let(:order) { { name: :desc } } |
|
|
|
|
let(:filter) { nil } |
|
|
|
@ -102,84 +92,78 @@ describe 'API v3 Principals resource', type: :request do |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
it 'succeeds' do |
|
|
|
|
expect(last_response.status) |
|
|
|
|
.to eql(200) |
|
|
|
|
expect(response.status) |
|
|
|
|
.to eq(200) |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
it_behaves_like 'API V3 collection response', 4, 4 do |
|
|
|
|
let(:response) { last_response } |
|
|
|
|
|
|
|
|
|
it 'has the group as the last and the placeholder as the second to last element', :aggregate_failures do |
|
|
|
|
is_expected |
|
|
|
|
.to be_json_eql('PlaceholderUser'.to_json) |
|
|
|
|
.at_path('_embedded/elements/0/_type') |
|
|
|
|
|
|
|
|
|
is_expected |
|
|
|
|
.to be_json_eql('Group'.to_json) |
|
|
|
|
.at_path('_embedded/elements/1/_type') |
|
|
|
|
|
|
|
|
|
is_expected |
|
|
|
|
.to be_json_eql('User'.to_json) |
|
|
|
|
.at_path('_embedded/elements/2/_type') |
|
|
|
|
end |
|
|
|
|
let(:elements) { [placeholder_user, group, other_user, user] } |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
context 'provide filter for project the user is member in' do |
|
|
|
|
context 'with a filter for project the user is member in' do |
|
|
|
|
let(:filter) do |
|
|
|
|
[{ member: { operator: '=', values: [project.id.to_s] } }] |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
it_behaves_like 'API V3 collection response', 3, 3 do |
|
|
|
|
let(:response) { last_response } |
|
|
|
|
end |
|
|
|
|
it_behaves_like 'API V3 collection response', 3, 3 |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
context 'provide filter for type "User"' do |
|
|
|
|
context 'with a filter for type "User"' do |
|
|
|
|
let(:filter) do |
|
|
|
|
[{ type: { operator: '=', values: ['User'] } }] |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
it_behaves_like 'API V3 collection response', 2, 2, nil do |
|
|
|
|
let(:response) { last_response } |
|
|
|
|
end |
|
|
|
|
it_behaves_like 'API V3 collection response', 2, 2, nil |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
context 'provide filter for type "Group"' do |
|
|
|
|
context 'with a filter for type "Group"' do |
|
|
|
|
let(:filter) do |
|
|
|
|
[{ type: { operator: '=', values: ['Group'] } }] |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
it_behaves_like 'API V3 collection response', 1, 1, 'Group' do |
|
|
|
|
let(:response) { last_response } |
|
|
|
|
end |
|
|
|
|
it_behaves_like 'API V3 collection response', 1, 1, 'Group' |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
context 'provide filter for type "PlaceholderUser"' do |
|
|
|
|
context 'with a filter for type "PlaceholderUser"' do |
|
|
|
|
let(:filter) do |
|
|
|
|
[{ type: { operator: '=', values: ['PlaceholderUser'] } }] |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
it_behaves_like 'API V3 collection response', 1, 1, 'PlaceholderUser' do |
|
|
|
|
let(:response) { last_response } |
|
|
|
|
end |
|
|
|
|
it_behaves_like 'API V3 collection response', 1, 1, 'PlaceholderUser' |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
context 'user without a project membership' do |
|
|
|
|
context 'with a without a project membership' do |
|
|
|
|
let(:user) { FactoryBot.create(:user) } |
|
|
|
|
|
|
|
|
|
# The user herself |
|
|
|
|
it_behaves_like 'API V3 collection response', 1, 1, 'User' |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
context 'with a filter for any name attribute' do |
|
|
|
|
let(:filter) do |
|
|
|
|
[{ any_name_attribute: { operator: '~', values: ['aaaa@example.com'] } }] |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
it_behaves_like 'API V3 collection response', 1, 1, 'User' |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
context 'with a filter for id' do |
|
|
|
|
let(:filter) do |
|
|
|
|
[{ id: { operator: '=', values: [user.id.to_s] } }] |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
it_behaves_like 'API V3 collection response', 1, 1, 'User' do |
|
|
|
|
let(:response) { last_response } |
|
|
|
|
let(:elements) { [user] } |
|
|
|
|
end |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
context 'provide filter for any name attribute' do |
|
|
|
|
context 'with a filter for id with the `me` value' do |
|
|
|
|
let(:filter) do |
|
|
|
|
[{ any_name_attribute: { operator: '~', values: ['aaaa@example.com'] } }] |
|
|
|
|
[{ id: { operator: '=', values: ['me'] } }] |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
it_behaves_like 'API V3 collection response', 1, 1, 'User' do |
|
|
|
|
let(:response) { last_response } |
|
|
|
|
let(:elements) { [current_user] } |
|
|
|
|
end |
|
|
|
|
end |
|
|
|
|
end |
|
|
|
|