Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
148 changes: 136 additions & 12 deletions spec/notion/api/endpoints/users_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,152 @@
RSpec.describe Notion::Api::Endpoints::Users do
let(:client) { Notion::Client.new }

context 'users' do
it 'me', vcr: { cassette_name: 'users_me' } do
response = client.me
expect(response.name).to eql 'Notion to Orbit'
# https://developers.notion.com/reference/get-self
describe '#me' do
context "when retrieving the token's bot user (GET /v1/users/me)" do
let(:url) { 'https://api.notion.com/v1/users/me' }
let(:response_json) do
{
"object": 'user',
"id": '16d84278-ab0e-484c-9bdd-b35da3bd8905',
"name": 'pied piper',
"avatar_url": nil,
"type": 'bot',
"bot": {
"owner": {
"type": 'user',
"user": {
"object": 'user',
"id": '5389a034-eb5c-47b5-8a9e-f79c99ef166c',
"name": 'christine makenotion',
"avatar_url": nil,
"type": 'person',
"person": {
"email": 'christine@makenotion.com'
}
}
}
}
}.to_json
end

before do
stub_request(:get, url)
.to_return(
status: 200,
body: response_json,
headers: { 'Content-Type' => 'application/json' }
)
end

it 'returns a bot user object with owner information' do
response = client.me

expect(response['object']).to eq('user')
expect(response['type']).to eq('bot')

expect(response).to have_key('bot')
expect(response['bot']).to have_key('owner')
end
end
end

# https://developers.notion.com/reference/get-user
describe '#user_id' do
context 'when retrieving a specific person user by ID (GET /v1/users/{user_id})' do
let(:user_id) { 'd40e767c-d7af-4b18-a86d-55c61f1e39a4' }
let(:url) { "https://api.notion.com/v1/users/#{user_id}" }
let(:response_json) do
{
"object": 'user',
"id": user_id,
"type": 'person',
"person": {
"email": 'avo@example.org'
},
"name": 'Avocado Lovelace',
"avatar_url": 'https://secure.notion-static.com/e6a352a8-8381-44d0-a1dc-9ed80e62b53d.jpg'
}.to_json
end

before do
stub_request(:get, url)
.to_return(
status: 200,
body: response_json,
headers: { 'Content-Type' => 'application/json' }
)
end

it 'returns the specific person user object' do
response = client.user(user_id: user_id)

expect(response['object']).to eq('user')
expect(response['id']).to eq(user_id)
expect(response['type']).to eq('person')

it 'lists', vcr: { cassette_name: 'users_list' } do
response = client.users_list
expect(response.results.size).to be 1
expect(response['name']).to eq('Avocado Lovelace')
expect(response['person']['email']).to eq('avo@example.org')
end
end
end

# https://developers.notion.com/reference/get-users
describe '#users_list' do
context 'when retrieving a paginated list of users (GET /v1/users)' do
let(:url) { 'https://api.notion.com/v1/users' }
let(:response_json) do
{
"object": 'list',
"results": [
{
"object": 'user',
"id": 'd40e767c-d7af-4b18-a86d-55c61f1e39a4',
"type": 'person',
"person": { "email": 'avo@example.org' },
"name": 'Avocado Lovelace',
"avatar_url": 'https://secure.notion-static.com/e6a352a8-8381-44d0-a1dc-9ed80e62b53d.jpg'
},
{
"object": 'user',
"id": '9a3b5ae0-c6e6-482d-b0e1-ed315ee6dc57',
"type": 'bot',
"bot": {},
"name": 'Doug Engelbot',
"avatar_url": 'https://secure.notion-static.com/6720d746-3402-4171-8ebb-28d15144923c.jpg'
}
],
"next_cursor": 'fe2cc560-036c-44cd-90e8-294d5a74cebc',
"has_more": true
}.to_json
end

before do
stub_request(:get, url)
.to_return(
status: 200,
body: response_json,
headers: { 'Content-Type' => 'application/json' }
)
end

it 'returns a list object containing multiple user types' do
response = client.users_list

expect(response['object']).to eq('list')
expect(response['results']).to be_an(Array)
expect(response['results'].size).to eq(2)
end
end
end

context 'users' do
it 'paginated list', vcr: { cassette_name: 'paginated_users_list' } do
members = []
client.users_list(page_size: 1) do |page|
members.concat page.results
end
expect(members.size).to eq 1
end

it 'retrieves', vcr: { cassette_name: 'users' } do
response = client.user(user_id: 'a8da8d30-c858-4c3d-87ad-3f2d477bd98d')
expect(response.name).to eql 'Nicolas Goutay'
end
end
end