main
1# frozen_string_literal: true
2
3require 'rails_helper'
4
5describe '/scim/v1/.search' do
6 let(:user) { create(:user) }
7 let(:token) { create(:access_token, subject: user).to_jwt }
8 let(:headers) do
9 {
10 'Authorization' => "Bearer #{token}",
11 'Accept' => 'application/scim+json',
12 'Content-Type' => 'application/scim+json',
13 }
14 end
15
16 describe "POST /scim/v2/.search" do
17 let(:request_body) do
18 {
19 "schemas": [Scim::Kit::V2::Messages::SEARCH_REQUEST],
20 "attributes": %w[displayName userName],
21 "filter": "userName sw \"#{user.email}\"",
22 "startIndex": 1,
23 "count": 10
24 }
25 end
26 let(:json) { JSON.parse(response.body, symbolize_names: true) }
27
28 before { post "/scim/v2/.search", headers: headers, params: request_body.to_json }
29
30 specify { expect(response).to have_http_status(:ok) }
31 specify { expect(response.headers['Content-Type']).to eql('application/scim+json') }
32 specify { expect(response.body).to be_present }
33 specify { expect(json[:schemas]).to match_array([Scim::Kit::V2::Messages::LIST_RESPONSE]) }
34 specify { expect(json[:totalResults]).to be(1) }
35 specify { expect(json[:itemsPerPage]).to be(10) }
36 specify { expect(json[:startIndex]).to be(1) }
37 specify { expect(json[:Resources].map { |x| x[:userName] }).to match_array([user.email]) }
38 specify { expect(json[:Resources].map { |x| x[:displayName] }).to match_array([user.email]) }
39 end
40end