notion-ruby-client 0.0.1 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +14 -0
  3. data/.rspec +2 -0
  4. data/.rspec_status +18 -0
  5. data/.rubocop.yml +46 -0
  6. data/.rubocop_todo.yml +86 -0
  7. data/CHANGELOG.md +26 -0
  8. data/CODE_OF_CONDUCT.md +128 -0
  9. data/Gemfile.lock +95 -0
  10. data/README.md +192 -3
  11. data/Rakefile +18 -0
  12. data/lib/notion-ruby-client.rb +6 -8
  13. data/lib/notion/api/endpoints.rb +6 -0
  14. data/lib/notion/api/endpoints/blocks.rb +53 -0
  15. data/lib/notion/api/endpoints/databases.rb +78 -0
  16. data/lib/notion/api/endpoints/pages.rb +69 -0
  17. data/lib/notion/api/endpoints/users.rb +7 -3
  18. data/lib/notion/api/errors.rb +7 -1
  19. data/lib/notion/api/errors/notion_error.rb +2 -2
  20. data/lib/notion/config.rb +3 -1
  21. data/lib/notion/faraday/request.rb +8 -2
  22. data/lib/notion/faraday/response/raise_error.rb +3 -4
  23. data/lib/notion/pagination/cursor.rb +2 -2
  24. data/lib/notion/version.rb +3 -2
  25. data/notion-ruby-client-0.0.4.gem +0 -0
  26. data/spec/fixtures/notion/block_append_children.yml +135 -0
  27. data/spec/fixtures/notion/block_children.yml +137 -0
  28. data/spec/fixtures/notion/create_page.yml +137 -0
  29. data/spec/fixtures/notion/database.yml +133 -0
  30. data/spec/fixtures/notion/database_query.yml +135 -0
  31. data/spec/fixtures/notion/databases_list.yml +133 -0
  32. data/spec/fixtures/notion/page.yml +133 -0
  33. data/spec/fixtures/notion/paginated_block_children.yml +521 -0
  34. data/spec/fixtures/notion/paginated_database_query.yml +135 -0
  35. data/spec/fixtures/notion/paginated_databases_list.yml +133 -0
  36. data/spec/fixtures/notion/paginated_users_list.yml +133 -0
  37. data/spec/fixtures/notion/update_page.yml +136 -0
  38. data/spec/fixtures/notion/users.yml +132 -0
  39. data/spec/fixtures/notion/users_list.yml +133 -0
  40. data/spec/notion/api/endpoints/blocks_spec.rb +40 -0
  41. data/spec/notion/api/endpoints/databases_spec.rb +40 -0
  42. data/spec/notion/api/endpoints/pages_spec.rb +64 -0
  43. data/spec/notion/api/endpoints/users_spec.rb +26 -0
  44. data/spec/notion/config_spec.rb +16 -0
  45. data/spec/notion/version_spec.rb +8 -0
  46. data/spec/spec_helper.rb +22 -0
  47. data/spec/support/token.rb +10 -0
  48. data/spec/support/vcr.rb +16 -0
  49. metadata +67 -8
@@ -0,0 +1,132 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.notion.com/v1/users/a8da8d30-c858-4c3d-87ad-3f2d477bd98d
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - application/json; charset=utf-8
12
+ User-Agent:
13
+ - Notion Ruby Client/0.0.4
14
+ Authorization:
15
+ - Bearer <NOTION_API_TOKEN>
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Date:
24
+ - Sun, 25 Apr 2021 21:00:08 GMT
25
+ Content-Type:
26
+ - application/json; charset=utf-8
27
+ Transfer-Encoding:
28
+ - chunked
29
+ Connection:
30
+ - keep-alive
31
+ Set-Cookie:
32
+ - __cfduid=d10c7505ad45dea19d885ea9e087883651619384407; expires=Tue, 25-May-21
33
+ 21:00:07 GMT; path=/; domain=.notion.com; HttpOnly; SameSite=Lax
34
+ - notion_browser_id=6378e6be-b1ca-4d94-b556-8f3ae50d725f; Domain=www.notion.so;
35
+ Path=/; Expires=Wed, 01 Jan 2053 22:46:48 GMT; Secure
36
+ X-Dns-Prefetch-Control:
37
+ - 'off'
38
+ X-Frame-Options:
39
+ - SAMEORIGIN
40
+ Strict-Transport-Security:
41
+ - max-age=5184000; includeSubDomains
42
+ X-Download-Options:
43
+ - noopen
44
+ X-Content-Type-Options:
45
+ - nosniff
46
+ X-Xss-Protection:
47
+ - 1; mode=block
48
+ Referrer-Policy:
49
+ - same-origin
50
+ Content-Security-Policy:
51
+ - 'script-src ''self'' ''unsafe-inline'' ''unsafe-eval'' https://gist.github.com
52
+ https://apis.google.com https://api.amplitude.com https://widget.intercom.io
53
+ https://js.intercomcdn.com https://logs-01.loggly.com https://cdn.segment.com
54
+ https://analytics.pgncs.notion.so https://checkout.stripe.com https://js.stripe.com/v3
55
+ https://embed.typeform.com https://admin.typeform.com https://platform.twitter.com
56
+ https://cdn.syndication.twimg.com https://www.googletagmanager.com https://x.clearbitjs.com;
57
+ connect-src ''self'' https://msgstore.www.notion.so wss://msgstore.www.notion.so
58
+ ws://localhost:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com
59
+ https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com
60
+ https: http: https://api.amplitude.com https://api.embed.ly https://js.intercomcdn.com
61
+ https://api-iam.intercom.io wss://nexus-websocket-a.intercom.io https://logs-01.loggly.com
62
+ https://api.segment.io https://api.pgncs.notion.so https://checkout.stripe.com
63
+ https://js.stripe.com/v3 https://cdn.contentful.com https://preview.contentful.com
64
+ https://images.ctfassets.net https://api.unsplash.com https://boards-api.greenhouse.io;
65
+ font-src ''self'' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com;
66
+ img-src ''self'' data: blob: https: https://platform.twitter.com https://syndication.twitter.com
67
+ https://pbs.twimg.com https://ton.twimg.com www.googletagmanager.com; style-src
68
+ ''self'' ''unsafe-inline'' https://cdnjs.cloudflare.com https://github.githubassets.com
69
+ https://platform.twitter.com https://ton.twimg.com; frame-src https: http:;
70
+ media-src https: http:'
71
+ X-Content-Security-Policy:
72
+ - 'script-src ''self'' ''unsafe-inline'' ''unsafe-eval'' https://gist.github.com
73
+ https://apis.google.com https://api.amplitude.com https://widget.intercom.io
74
+ https://js.intercomcdn.com https://logs-01.loggly.com https://cdn.segment.com
75
+ https://analytics.pgncs.notion.so https://checkout.stripe.com https://js.stripe.com/v3
76
+ https://embed.typeform.com https://admin.typeform.com https://platform.twitter.com
77
+ https://cdn.syndication.twimg.com https://www.googletagmanager.com https://x.clearbitjs.com;
78
+ connect-src ''self'' https://msgstore.www.notion.so wss://msgstore.www.notion.so
79
+ ws://localhost:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com
80
+ https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com
81
+ https: http: https://api.amplitude.com https://api.embed.ly https://js.intercomcdn.com
82
+ https://api-iam.intercom.io wss://nexus-websocket-a.intercom.io https://logs-01.loggly.com
83
+ https://api.segment.io https://api.pgncs.notion.so https://checkout.stripe.com
84
+ https://js.stripe.com/v3 https://cdn.contentful.com https://preview.contentful.com
85
+ https://images.ctfassets.net https://api.unsplash.com https://boards-api.greenhouse.io;
86
+ font-src ''self'' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com;
87
+ img-src ''self'' data: blob: https: https://platform.twitter.com https://syndication.twitter.com
88
+ https://pbs.twimg.com https://ton.twimg.com www.googletagmanager.com; style-src
89
+ ''self'' ''unsafe-inline'' https://cdnjs.cloudflare.com https://github.githubassets.com
90
+ https://platform.twitter.com https://ton.twimg.com; frame-src https: http:;
91
+ media-src https: http:'
92
+ X-Webkit-Csp:
93
+ - 'script-src ''self'' ''unsafe-inline'' ''unsafe-eval'' https://gist.github.com
94
+ https://apis.google.com https://api.amplitude.com https://widget.intercom.io
95
+ https://js.intercomcdn.com https://logs-01.loggly.com https://cdn.segment.com
96
+ https://analytics.pgncs.notion.so https://checkout.stripe.com https://js.stripe.com/v3
97
+ https://embed.typeform.com https://admin.typeform.com https://platform.twitter.com
98
+ https://cdn.syndication.twimg.com https://www.googletagmanager.com https://x.clearbitjs.com;
99
+ connect-src ''self'' https://msgstore.www.notion.so wss://msgstore.www.notion.so
100
+ ws://localhost:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com
101
+ https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com
102
+ https: http: https://api.amplitude.com https://api.embed.ly https://js.intercomcdn.com
103
+ https://api-iam.intercom.io wss://nexus-websocket-a.intercom.io https://logs-01.loggly.com
104
+ https://api.segment.io https://api.pgncs.notion.so https://checkout.stripe.com
105
+ https://js.stripe.com/v3 https://cdn.contentful.com https://preview.contentful.com
106
+ https://images.ctfassets.net https://api.unsplash.com https://boards-api.greenhouse.io;
107
+ font-src ''self'' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com;
108
+ img-src ''self'' data: blob: https: https://platform.twitter.com https://syndication.twitter.com
109
+ https://pbs.twimg.com https://ton.twimg.com www.googletagmanager.com; style-src
110
+ ''self'' ''unsafe-inline'' https://cdnjs.cloudflare.com https://github.githubassets.com
111
+ https://platform.twitter.com https://ton.twimg.com; frame-src https: http:;
112
+ media-src https: http:'
113
+ Etag:
114
+ - W/"112-+UfaDnQ0AQtnGmMk1mvOOgv2xyk"
115
+ Vary:
116
+ - Accept-Encoding
117
+ Cf-Cache-Status:
118
+ - DYNAMIC
119
+ Cf-Request-Id:
120
+ - '09ac6e2e810000a843f7864000000001'
121
+ Expect-Ct:
122
+ - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
123
+ Server:
124
+ - cloudflare
125
+ Cf-Ray:
126
+ - 645a7fc3fe50a843-CDG
127
+ body:
128
+ encoding: UTF-8
129
+ string: '{"object":"user","id":"a8da8d30-c858-4c3d-87ad-3f2d477bd98d","name":"Nicolas
130
+ Goutay","avatar_url":"https://s3-us-west-2.amazonaws.com/public.notion-static.com/5f9b5c65-a7ed-4fc5-983a-6c999b7c2208/Copy_of_P1222454.jpg","type":"person","person":{"email":"nicolas@orbit.love"}}'
131
+ recorded_at: Sun, 25 Apr 2021 21:00:08 GMT
132
+ recorded_with: VCR 6.0.0
@@ -0,0 +1,133 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.notion.com/v1/users
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - application/json; charset=utf-8
12
+ User-Agent:
13
+ - Notion Ruby Client/0.0.4
14
+ Authorization:
15
+ - Bearer <NOTION_API_TOKEN>
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Date:
24
+ - Sun, 25 Apr 2021 21:00:06 GMT
25
+ Content-Type:
26
+ - application/json; charset=utf-8
27
+ Transfer-Encoding:
28
+ - chunked
29
+ Connection:
30
+ - keep-alive
31
+ Set-Cookie:
32
+ - __cfduid=d8bd1f2559197f7cbe522dc8d2a13cf771619384405; expires=Tue, 25-May-21
33
+ 21:00:05 GMT; path=/; domain=.notion.com; HttpOnly; SameSite=Lax
34
+ - notion_browser_id=a30325ff-c789-4096-a739-ba51b79eea5b; Domain=www.notion.so;
35
+ Path=/; Expires=Wed, 01 Jan 2053 22:46:46 GMT; Secure
36
+ X-Dns-Prefetch-Control:
37
+ - 'off'
38
+ X-Frame-Options:
39
+ - SAMEORIGIN
40
+ Strict-Transport-Security:
41
+ - max-age=5184000; includeSubDomains
42
+ X-Download-Options:
43
+ - noopen
44
+ X-Content-Type-Options:
45
+ - nosniff
46
+ X-Xss-Protection:
47
+ - 1; mode=block
48
+ Referrer-Policy:
49
+ - same-origin
50
+ Content-Security-Policy:
51
+ - 'script-src ''self'' ''unsafe-inline'' ''unsafe-eval'' https://gist.github.com
52
+ https://apis.google.com https://api.amplitude.com https://widget.intercom.io
53
+ https://js.intercomcdn.com https://logs-01.loggly.com https://cdn.segment.com
54
+ https://analytics.pgncs.notion.so https://checkout.stripe.com https://js.stripe.com/v3
55
+ https://embed.typeform.com https://admin.typeform.com https://platform.twitter.com
56
+ https://cdn.syndication.twimg.com https://www.googletagmanager.com https://x.clearbitjs.com;
57
+ connect-src ''self'' https://msgstore.www.notion.so wss://msgstore.www.notion.so
58
+ ws://localhost:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com
59
+ https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com
60
+ https: http: https://api.amplitude.com https://api.embed.ly https://js.intercomcdn.com
61
+ https://api-iam.intercom.io wss://nexus-websocket-a.intercom.io https://logs-01.loggly.com
62
+ https://api.segment.io https://api.pgncs.notion.so https://checkout.stripe.com
63
+ https://js.stripe.com/v3 https://cdn.contentful.com https://preview.contentful.com
64
+ https://images.ctfassets.net https://api.unsplash.com https://boards-api.greenhouse.io;
65
+ font-src ''self'' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com;
66
+ img-src ''self'' data: blob: https: https://platform.twitter.com https://syndication.twitter.com
67
+ https://pbs.twimg.com https://ton.twimg.com www.googletagmanager.com; style-src
68
+ ''self'' ''unsafe-inline'' https://cdnjs.cloudflare.com https://github.githubassets.com
69
+ https://platform.twitter.com https://ton.twimg.com; frame-src https: http:;
70
+ media-src https: http:'
71
+ X-Content-Security-Policy:
72
+ - 'script-src ''self'' ''unsafe-inline'' ''unsafe-eval'' https://gist.github.com
73
+ https://apis.google.com https://api.amplitude.com https://widget.intercom.io
74
+ https://js.intercomcdn.com https://logs-01.loggly.com https://cdn.segment.com
75
+ https://analytics.pgncs.notion.so https://checkout.stripe.com https://js.stripe.com/v3
76
+ https://embed.typeform.com https://admin.typeform.com https://platform.twitter.com
77
+ https://cdn.syndication.twimg.com https://www.googletagmanager.com https://x.clearbitjs.com;
78
+ connect-src ''self'' https://msgstore.www.notion.so wss://msgstore.www.notion.so
79
+ ws://localhost:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com
80
+ https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com
81
+ https: http: https://api.amplitude.com https://api.embed.ly https://js.intercomcdn.com
82
+ https://api-iam.intercom.io wss://nexus-websocket-a.intercom.io https://logs-01.loggly.com
83
+ https://api.segment.io https://api.pgncs.notion.so https://checkout.stripe.com
84
+ https://js.stripe.com/v3 https://cdn.contentful.com https://preview.contentful.com
85
+ https://images.ctfassets.net https://api.unsplash.com https://boards-api.greenhouse.io;
86
+ font-src ''self'' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com;
87
+ img-src ''self'' data: blob: https: https://platform.twitter.com https://syndication.twitter.com
88
+ https://pbs.twimg.com https://ton.twimg.com www.googletagmanager.com; style-src
89
+ ''self'' ''unsafe-inline'' https://cdnjs.cloudflare.com https://github.githubassets.com
90
+ https://platform.twitter.com https://ton.twimg.com; frame-src https: http:;
91
+ media-src https: http:'
92
+ X-Webkit-Csp:
93
+ - 'script-src ''self'' ''unsafe-inline'' ''unsafe-eval'' https://gist.github.com
94
+ https://apis.google.com https://api.amplitude.com https://widget.intercom.io
95
+ https://js.intercomcdn.com https://logs-01.loggly.com https://cdn.segment.com
96
+ https://analytics.pgncs.notion.so https://checkout.stripe.com https://js.stripe.com/v3
97
+ https://embed.typeform.com https://admin.typeform.com https://platform.twitter.com
98
+ https://cdn.syndication.twimg.com https://www.googletagmanager.com https://x.clearbitjs.com;
99
+ connect-src ''self'' https://msgstore.www.notion.so wss://msgstore.www.notion.so
100
+ ws://localhost:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com
101
+ https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com
102
+ https: http: https://api.amplitude.com https://api.embed.ly https://js.intercomcdn.com
103
+ https://api-iam.intercom.io wss://nexus-websocket-a.intercom.io https://logs-01.loggly.com
104
+ https://api.segment.io https://api.pgncs.notion.so https://checkout.stripe.com
105
+ https://js.stripe.com/v3 https://cdn.contentful.com https://preview.contentful.com
106
+ https://images.ctfassets.net https://api.unsplash.com https://boards-api.greenhouse.io;
107
+ font-src ''self'' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com;
108
+ img-src ''self'' data: blob: https: https://platform.twitter.com https://syndication.twitter.com
109
+ https://pbs.twimg.com https://ton.twimg.com www.googletagmanager.com; style-src
110
+ ''self'' ''unsafe-inline'' https://cdnjs.cloudflare.com https://github.githubassets.com
111
+ https://platform.twitter.com https://ton.twimg.com; frame-src https: http:;
112
+ media-src https: http:'
113
+ Etag:
114
+ - W/"2c7-9fGZ6Loa3izncqaW0AxZr7NvCPY"
115
+ Vary:
116
+ - Accept-Encoding
117
+ Cf-Cache-Status:
118
+ - DYNAMIC
119
+ Cf-Request-Id:
120
+ - '09ac6e27c800000853aea0c000000001'
121
+ Expect-Ct:
122
+ - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
123
+ Server:
124
+ - cloudflare
125
+ Cf-Ray:
126
+ - 645a7fb93dac0853-CDG
127
+ body:
128
+ encoding: UTF-8
129
+ string: '{"object":"list","results":[{"object":"user","id":"7ee614aa-0542-421d-b8aa-b14adf120642","name":"Arthur
130
+ Levoyer","avatar_url":"https://lh6.googleusercontent.com/-Y62UK1QjtV8/AAAAAAAAAAI/AAAAAAAAACk/3PgWyczXM8o/photo.jpg?sz=50","type":"person","person":{"email":"arthurl@bam.tech"}},{"object":"user","id":"a8da8d30-c858-4c3d-87ad-3f2d477bd98d","name":"Nicolas
131
+ Goutay","avatar_url":"https://s3-us-west-2.amazonaws.com/public.notion-static.com/5f9b5c65-a7ed-4fc5-983a-6c999b7c2208/Copy_of_P1222454.jpg","type":"person","person":{"email":"nicolas@orbit.love"}},{"object":"user","id":"f2e67536-c037-4dd5-97f5-8ed9d23a4dbd","name":"LeBot","avatar_url":null,"type":"bot","bot":{}}],"next_cursor":null,"has_more":false}'
132
+ recorded_at: Sun, 25 Apr 2021 21:00:06 GMT
133
+ recorded_with: VCR 6.0.0
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+ require 'spec_helper'
3
+
4
+ RSpec.describe Notion::Api::Endpoints::Blocks do
5
+ let(:client) { Notion::Client.new }
6
+ let(:page_id) { '723578f1-6e51-450c-8ee1-09158c19fd4c' }
7
+ let(:children) do
8
+ [
9
+ {
10
+ "object": 'block',
11
+ "type": 'heading_2',
12
+ "heading_2": {
13
+ "text": [{ "type": 'text', "text": { "content": 'Another Heading' } }]
14
+ }
15
+ }
16
+ ]
17
+ end
18
+
19
+ context 'blocks' do
20
+ it 'children', vcr: { cassette_name: 'block_children' } do
21
+ response = client.block_children(id: page_id)
22
+ expect(response.results.length).to be >= 1
23
+ expect(response.results[0].heading_1.text.first.plain_text).to eql 'A Header'
24
+ expect(response.results[1].paragraph.text.first.plain_text).to eql 'A paragraph'
25
+ end
26
+
27
+ it 'paginated children', vcr: { cassette_name: 'paginated_block_children' } do
28
+ children = []
29
+ client.block_children(id: page_id, page_size: 1) do |page|
30
+ children.concat page.results
31
+ end
32
+ expect(children.size).to be >= 1
33
+ end
34
+
35
+ it 'appends', vcr: { cassette_name: 'block_append_children' } do
36
+ response = client.block_append_children(id: page_id, children: children)
37
+ expect(response.id).to eql page_id
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+ require 'spec_helper'
3
+
4
+ RSpec.describe Notion::Api::Endpoints::Databases do
5
+ let(:client) { Notion::Client.new }
6
+ let(:database_id) { '89b30a70-ce51-4646-ab4f-5fdcb1d5e76c' }
7
+
8
+ context 'databases' do
9
+ it 'retrieves', vcr: { cassette_name: 'database' } do
10
+ response = client.database(id: database_id)
11
+ expect(response.title.first.plain_text).to eql 'A Notion database'
12
+ end
13
+
14
+ it 'queries', vcr: { cassette_name: 'database_query' } do
15
+ response = client.database_query(id: database_id)
16
+ expect(response.results.length).to be >= 1
17
+ end
18
+
19
+ it 'paginated queries', vcr: { cassette_name: 'paginated_database_query' } do
20
+ pages = []
21
+ client.database_query(id: database_id, limit: 1) do |page|
22
+ pages.concat page.results
23
+ end
24
+ expect(pages.size).to be >= 1
25
+ end
26
+
27
+ it 'lists', vcr: { cassette_name: 'databases_list' } do
28
+ response = client.databases_list
29
+ expect(response.results.length).to be >= 1
30
+ end
31
+
32
+ it 'paginated lists', vcr: { cassette_name: 'paginated_databases_list' } do
33
+ databases = []
34
+ client.databases_list(limit: 1) do |page|
35
+ databases.concat page.results
36
+ end
37
+ expect(databases.size).to be >= 1
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+ require 'spec_helper'
3
+
4
+ RSpec.describe Notion::Api::Endpoints::Pages do
5
+ let(:client) { Notion::Client.new }
6
+ let(:database_id) { '89b30a70-ce51-4646-ab4f-5fdcb1d5e76c' }
7
+ let(:page_id) { '723578f1-6e51-450c-8ee1-09158c19fd4c' }
8
+ let(:properties) do
9
+ {
10
+ "Name": [
11
+ {
12
+ "text": {
13
+ "content": 'Another Notion page'
14
+ }
15
+ }
16
+ ]
17
+ }
18
+ end
19
+ let(:children) do
20
+ [
21
+ {
22
+ "object": 'block',
23
+ "type": 'heading_2',
24
+ "heading_2": {
25
+ "text": [{ "type": 'text', "text": { "content": 'A heading' } }]
26
+ }
27
+ }
28
+ ]
29
+ end
30
+
31
+ context 'pages' do
32
+ it 'retrieves', vcr: { cassette_name: 'page' } do
33
+ response = client.page(id: page_id)
34
+ expect(response.properties.Name.type).to eql 'title'
35
+ expect(response.properties.Name.title.first.plain_text).to eql 'A Notion page'
36
+ end
37
+
38
+ it 'creates', vcr: { cassette_name: 'create_page' } do
39
+ response = client.create_page(
40
+ parent: { database_id: database_id },
41
+ properties: properties,
42
+ children: children
43
+ )
44
+ expect(response.properties.Name.title.first.plain_text).to eql 'Another Notion page'
45
+ end
46
+
47
+ it 'updates', vcr: { cassette_name: 'update_page' } do
48
+ properties = {
49
+ "Name": [
50
+ {
51
+ "text": {
52
+ "content": 'A Notion page'
53
+ }
54
+ }
55
+ ]
56
+ }
57
+ response = client.update_page(
58
+ id: page_id,
59
+ properties: properties
60
+ )
61
+ expect(response.properties.Name.title.first.plain_text).to eql 'A Notion page'
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+ require 'spec_helper'
3
+
4
+ RSpec.describe Notion::Api::Endpoints::Users do
5
+ let(:client) { Notion::Client.new }
6
+
7
+ context 'users' do
8
+ it 'lists', vcr: { cassette_name: 'users_list' } do
9
+ response = client.users_list
10
+ expect(response.results.size).to be 3
11
+ end
12
+
13
+ it 'paginated list', vcr: { cassette_name: 'paginated_users_list' } do
14
+ members = []
15
+ client.users_list(limit: 2) do |page|
16
+ members.concat page.results
17
+ end
18
+ expect(members.size).to eq 3
19
+ end
20
+
21
+ it 'retrieves', vcr: { cassette_name: 'users' } do
22
+ response = client.user(id: 'a8da8d30-c858-4c3d-87ad-3f2d477bd98d')
23
+ expect(response.name).to eql 'Nicolas Goutay'
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+ require 'spec_helper'
3
+
4
+ describe Notion::Config do
5
+ describe '#configure' do
6
+ before do
7
+ Notion.configure do |config|
8
+ config.token = 'a token'
9
+ end
10
+ end
11
+
12
+ it 'sets token' do
13
+ expect(Notion.config.token).to eq 'a token'
14
+ end
15
+ end
16
+ end