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