pinterest-ruby 1.0.0

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 (150) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +7 -0
  3. data/.rubocop.yml +63 -0
  4. data/.travis-gemfile +17 -0
  5. data/.travis.yml +12 -0
  6. data/.yardopts +1 -0
  7. data/CHANGELOG.md +3 -0
  8. data/Gemfile +24 -0
  9. data/README.md +34 -0
  10. data/Rakefile +44 -0
  11. data/docs/FaradayMiddleware/SafeOj.html +218 -0
  12. data/docs/FaradayMiddleware.html +125 -0
  13. data/docs/Pinterest/Board.html +410 -0
  14. data/docs/Pinterest/Client.html +1894 -0
  15. data/docs/Pinterest/Collection.html +1877 -0
  16. data/docs/Pinterest/Endpoints/Authentication.html +578 -0
  17. data/docs/Pinterest/Endpoints/Boards.html +1443 -0
  18. data/docs/Pinterest/Endpoints/Pins.html +1296 -0
  19. data/docs/Pinterest/Endpoints/Users.html +1220 -0
  20. data/docs/Pinterest/Endpoints.html +127 -0
  21. data/docs/Pinterest/Entity.html +473 -0
  22. data/docs/Pinterest/Errors/AuthorizationError.html +158 -0
  23. data/docs/Pinterest/Errors/BadRequestError.html +158 -0
  24. data/docs/Pinterest/Errors/BaseError.html +487 -0
  25. data/docs/Pinterest/Errors/MethodNotAllowedError.html +158 -0
  26. data/docs/Pinterest/Errors/NotFoundError.html +158 -0
  27. data/docs/Pinterest/Errors/NotImplementedError.html +158 -0
  28. data/docs/Pinterest/Errors/PermissionsError.html +158 -0
  29. data/docs/Pinterest/Errors/RateLimitError.html +158 -0
  30. data/docs/Pinterest/Errors/ServerError.html +158 -0
  31. data/docs/Pinterest/Errors/TimeoutError.html +158 -0
  32. data/docs/Pinterest/Errors.html +377 -0
  33. data/docs/Pinterest/Image.html +617 -0
  34. data/docs/Pinterest/Interest.html +402 -0
  35. data/docs/Pinterest/Pin.html +511 -0
  36. data/docs/Pinterest/User.html +408 -0
  37. data/docs/Pinterest/Version.html +187 -0
  38. data/docs/Pinterest.html +130 -0
  39. data/docs/_index.html +401 -0
  40. data/docs/class_list.html +51 -0
  41. data/docs/css/common.css +1 -0
  42. data/docs/css/full_list.css +58 -0
  43. data/docs/css/style.css +492 -0
  44. data/docs/file.README.html +106 -0
  45. data/docs/file_list.html +56 -0
  46. data/docs/frames.html +17 -0
  47. data/docs/index.html +106 -0
  48. data/docs/js/app.js +243 -0
  49. data/docs/js/full_list.js +216 -0
  50. data/docs/js/jquery.js +4 -0
  51. data/docs/method_list.html +643 -0
  52. data/docs/top-level-namespace.html +110 -0
  53. data/lib/pinterest/client.rb +146 -0
  54. data/lib/pinterest/collection.rb +97 -0
  55. data/lib/pinterest/endpoints/authentication.rb +99 -0
  56. data/lib/pinterest/endpoints/boards.rb +193 -0
  57. data/lib/pinterest/endpoints/pins.rb +187 -0
  58. data/lib/pinterest/endpoints/users.rb +158 -0
  59. data/lib/pinterest/errors.rb +94 -0
  60. data/lib/pinterest/models/board.rb +34 -0
  61. data/lib/pinterest/models/entity.rb +42 -0
  62. data/lib/pinterest/models/image.rb +49 -0
  63. data/lib/pinterest/models/interest.rb +30 -0
  64. data/lib/pinterest/models/pin.rb +43 -0
  65. data/lib/pinterest/models/user.rb +33 -0
  66. data/lib/pinterest/safe_oj.rb +25 -0
  67. data/lib/pinterest/version.rb +23 -0
  68. data/lib/pinterest.rb +31 -0
  69. data/pinterest.gemspec +32 -0
  70. data/spec/cassettes/Pinterest_Client/_perform_network_request_private_/should_correctly_handle_malformed_requests.yml +51 -0
  71. data/spec/cassettes/Pinterest_Endpoints_Authentication/_fetch_access_token/should_make_the_call_to_Pinterest_and_return_the_authorization_token_also_saving_it.yml +58 -0
  72. data/spec/cassettes/Pinterest_Endpoints_Authentication/_verify_access_token/should_return_an_exception_when_using_an_invalid_token.yml +52 -0
  73. data/spec/cassettes/Pinterest_Endpoints_Authentication/_verify_access_token/should_verify_the_token.yml +59 -0
  74. data/spec/cassettes/Pinterest_Endpoints_Boards/_board/should_complain_for_invalid_boards.yml +48 -0
  75. data/spec/cassettes/Pinterest_Endpoints_Boards/_board/should_get_the_current_informations.yml +63 -0
  76. data/spec/cassettes/Pinterest_Endpoints_Boards/_board/should_restrict_to_requested_fields.yml +57 -0
  77. data/spec/cassettes/Pinterest_Endpoints_Boards/_boards/should_only_get_requested_fields.yml +57 -0
  78. data/spec/cassettes/Pinterest_Endpoints_Boards/_boards/should_return_a_list_of_boards.yml +74 -0
  79. data/spec/cassettes/Pinterest_Endpoints_Boards/_create_board/should_create_the_board_and_return_it_with_only_the_requested_fields.yml +56 -0
  80. data/spec/cassettes/Pinterest_Endpoints_Boards/_delete_board/should_perform_the_call_and_return_an_error.yml +48 -0
  81. data/spec/cassettes/Pinterest_Endpoints_Boards/_delete_board/should_perform_the_call_and_return_true.yml +109 -0
  82. data/spec/cassettes/Pinterest_Endpoints_Boards/_edit_board/should_edit_the_board_and_return_it_with_only_the_requested_fields.yml +56 -0
  83. data/spec/cassettes/Pinterest_Endpoints_Boards/_follow_board/should_complain_for_invalid_boards.yml +56 -0
  84. data/spec/cassettes/Pinterest_Endpoints_Boards/_follow_board/should_perform_the_call_and_return_true.yml +109 -0
  85. data/spec/cassettes/Pinterest_Endpoints_Boards/_following_boards/should_only_get_requested_fields.yml +59 -0
  86. data/spec/cassettes/Pinterest_Endpoints_Boards/_following_boards/should_paginate_correctly.yml +72 -0
  87. data/spec/cassettes/Pinterest_Endpoints_Boards/_following_boards/should_return_the_followed_boards.yml +72 -0
  88. data/spec/cassettes/Pinterest_Endpoints_Boards/_search_my_boards/should_only_get_requested_fields.yml +59 -0
  89. data/spec/cassettes/Pinterest_Endpoints_Boards/_search_my_boards/should_paginate_correctly.yml +66 -0
  90. data/spec/cassettes/Pinterest_Endpoints_Boards/_search_my_boards/should_search_boards.yml +75 -0
  91. data/spec/cassettes/Pinterest_Endpoints_Boards/_suggested_boards/should_return_the_suggested_boards_returning_only_the_requested_fields.yml +56 -0
  92. data/spec/cassettes/Pinterest_Endpoints_Boards/_unfollow_board/should_complain_for_invalid_boards.yml +56 -0
  93. data/spec/cassettes/Pinterest_Endpoints_Boards/_unfollow_board/should_perform_the_call_and_return_true.yml +109 -0
  94. data/spec/cassettes/Pinterest_Endpoints_Pins/_board_pins/should_only_get_requested_fields.yml +59 -0
  95. data/spec/cassettes/Pinterest_Endpoints_Pins/_board_pins/should_paginate_correctly.yml +85 -0
  96. data/spec/cassettes/Pinterest_Endpoints_Pins/_board_pins/should_return_the_pins_of_the_board.yml +85 -0
  97. data/spec/cassettes/Pinterest_Endpoints_Pins/_create_pin/should_create_a_pin_by_using_a_image_URL.yml +71 -0
  98. data/spec/cassettes/Pinterest_Endpoints_Pins/_create_pin/should_create_a_pin_by_using_a_image_file.yml +1997 -0
  99. data/spec/cassettes/Pinterest_Endpoints_Pins/_create_pin/should_return_a_pin_containing_only_requested_fields.yml +56 -0
  100. data/spec/cassettes/Pinterest_Endpoints_Pins/_delete_pin/should_perform_the_call_and_return_an_error.yml +56 -0
  101. data/spec/cassettes/Pinterest_Endpoints_Pins/_delete_pin/should_perform_the_call_and_return_true.yml +109 -0
  102. data/spec/cassettes/Pinterest_Endpoints_Pins/_edit_pin/should_edit_the_pin_and_return_it_with_only_the_requested_fields.yml +56 -0
  103. data/spec/cassettes/Pinterest_Endpoints_Pins/_likes/should_only_get_requested_fields.yml +58 -0
  104. data/spec/cassettes/Pinterest_Endpoints_Pins/_likes/should_paginate_correctly.yml +87 -0
  105. data/spec/cassettes/Pinterest_Endpoints_Pins/_likes/should_return_the_list_of_liked_pins.yml +85 -0
  106. data/spec/cassettes/Pinterest_Endpoints_Pins/_pin/should_complain_for_non_existent_pins.yml +56 -0
  107. data/spec/cassettes/Pinterest_Endpoints_Pins/_pin/should_get_the_current_informations.yml +71 -0
  108. data/spec/cassettes/Pinterest_Endpoints_Pins/_pin/should_restrict_to_requested_fields.yml +56 -0
  109. data/spec/cassettes/Pinterest_Endpoints_Pins/_pins/should_only_get_requested_fields.yml +59 -0
  110. data/spec/cassettes/Pinterest_Endpoints_Pins/_pins/should_paginate_correctly.yml +808 -0
  111. data/spec/cassettes/Pinterest_Endpoints_Pins/_pins/should_return_my_pins.yml +88 -0
  112. data/spec/cassettes/Pinterest_Endpoints_Pins/_search_my_pins/should_only_get_requested_fields.yml +61 -0
  113. data/spec/cassettes/Pinterest_Endpoints_Pins/_search_my_pins/should_paginate_correctly.yml +89 -0
  114. data/spec/cassettes/Pinterest_Endpoints_Pins/_search_my_pins/should_search_my_pins.yml +89 -0
  115. data/spec/cassettes/Pinterest_Endpoints_Users/_follow_interest/should_perform_the_call_and_return_an_error.yml +48 -0
  116. data/spec/cassettes/Pinterest_Endpoints_Users/_follow_user/should_complain_for_invalid_users.yml +56 -0
  117. data/spec/cassettes/Pinterest_Endpoints_Users/_follow_user/should_perform_the_call_and_return_true.yml +109 -0
  118. data/spec/cassettes/Pinterest_Endpoints_Users/_followers/should_only_get_requested_fields.yml +62 -0
  119. data/spec/cassettes/Pinterest_Endpoints_Users/_followers/should_paginate_correctly.yml +62 -0
  120. data/spec/cassettes/Pinterest_Endpoints_Users/_followers/should_return_a_list_of_followers.yml +62 -0
  121. data/spec/cassettes/Pinterest_Endpoints_Users/_following_users/should_only_get_requested_fields.yml +62 -0
  122. data/spec/cassettes/Pinterest_Endpoints_Users/_following_users/should_paginate_correctly.yml +131 -0
  123. data/spec/cassettes/Pinterest_Endpoints_Users/_following_users/should_return_a_list_of_followed_users.yml +66 -0
  124. data/spec/cassettes/Pinterest_Endpoints_Users/_interests/should_paginate_correctly.yml +112 -0
  125. data/spec/cassettes/Pinterest_Endpoints_Users/_interests/should_return_a_list_of_followed_interest.yml +58 -0
  126. data/spec/cassettes/Pinterest_Endpoints_Users/_me/should_get_the_current_informations.yml +62 -0
  127. data/spec/cassettes/Pinterest_Endpoints_Users/_me/should_restrict_to_requested_fields.yml +56 -0
  128. data/spec/cassettes/Pinterest_Endpoints_Users/_unfollow_interest/should_perform_the_call_and_return_an_error.yml +48 -0
  129. data/spec/cassettes/Pinterest_Endpoints_Users/_unfollow_user/should_complain_for_invalid_users.yml +56 -0
  130. data/spec/cassettes/Pinterest_Endpoints_Users/_unfollow_user/should_perform_the_call_and_return_true.yml +109 -0
  131. data/spec/cassettes/Pinterest_Endpoints_Users/_user/should_complain_for_non_existent_users.yml +56 -0
  132. data/spec/cassettes/Pinterest_Endpoints_Users/_user/should_get_the_current_informations.yml +60 -0
  133. data/spec/cassettes/Pinterest_Endpoints_Users/_user/should_restrict_to_requested_fields.yml +56 -0
  134. data/spec/pinterest/client_spec.rb +70 -0
  135. data/spec/pinterest/collection_spec.rb +82 -0
  136. data/spec/pinterest/endpoints/authentication_spec.rb +81 -0
  137. data/spec/pinterest/endpoints/boards_spec.rb +209 -0
  138. data/spec/pinterest/endpoints/pins_spec.rb +239 -0
  139. data/spec/pinterest/endpoints/users_spec.rb +194 -0
  140. data/spec/pinterest/errors_spec.rb +59 -0
  141. data/spec/pinterest/fixtures/first.jpg +0 -0
  142. data/spec/pinterest/models/board_spec.rb +48 -0
  143. data/spec/pinterest/models/entity_spec.rb +35 -0
  144. data/spec/pinterest/models/image_spec.rb +50 -0
  145. data/spec/pinterest/models/interest_spec.rb +20 -0
  146. data/spec/pinterest/models/pin_spec.rb +55 -0
  147. data/spec/pinterest/models/user_spec.rb +45 -0
  148. data/spec/spec_helper.rb +49 -0
  149. data/tester.rb +19 -0
  150. metadata +341 -0
@@ -0,0 +1,209 @@
1
+ #
2
+ # This file is part of the pinterest-ruby gem. Copyright (C) 2017 and above Shogun <shogun@cowtech.it>.
3
+ # Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
4
+ #
5
+
6
+ require "spec_helper"
7
+
8
+ describe Pinterest::Endpoints::Boards, vcr: true do
9
+ subject {
10
+ Pinterest::Client.new(access_token: "AVP99QpzwII-f1I2p5gyHi8CiCeQFJkDr8dP-JpDs-LEtAAyegAAAAA")
11
+ }
12
+
13
+ context "#board" do
14
+ it "should get the current informations" do
15
+ response = subject.board("491736921752475493")
16
+ expect(response).to be_a(Pinterest::Board)
17
+
18
+ expect(response.as_json).to eq({
19
+ counts: {"pins" => 3423, "collaborators" => 0, "followers" => 7618},
20
+ created_at: DateTime.civil(2012, 9, 15, 14, 10, 33),
21
+ creator: {
22
+ id: "491736990471948025",
23
+ username: "dderse",
24
+ first_name: "Daniel",
25
+ last_name: "Derse",
26
+ bio: "",
27
+ created_at: DateTime.civil(2012, 9, 3, 13, 21, 48),
28
+ counts: {"pins" => 23400, "following" => 691, "followers" => 13079, "boards" => 37, "likes" => 35},
29
+ image: {
30
+ "60x60" => {"url" => "https://s-media-cache-ak0.pinimg.com/avatars/dderse_1477012877_60.jpg", "width" => 60, "height" => 60}
31
+ }
32
+ },
33
+ description: "",
34
+ id: "491736921752475493",
35
+ image: {
36
+ "60x60" => {"url" => "https://s-media-cache-ak0.pinimg.com/60x60/8f/a3/01/8fa3011c924838a3afe246419486dde3.jpg", "width" => 60, "height" => 60}
37
+ },
38
+ name: "Woodworking",
39
+ url: "https://www.pinterest.com/dderse/woodworking/"
40
+ })
41
+ end
42
+
43
+ it "should restrict to requested fields" do
44
+ response = subject.board("491736921752475493", fields: ["abc", "url"])
45
+ expect(response.url).to eq("https://www.pinterest.com/dderse/woodworking/")
46
+ expect(response.name).to be_nil
47
+ end
48
+
49
+ it "should complain for invalid boards" do
50
+ expect { subject.board("invalid-board") }.to raise_error(::Pinterest::Errors::NotFoundError)
51
+ end
52
+ end
53
+
54
+ context "#boards" do
55
+ it "should return a list of boards" do
56
+ response = subject.boards
57
+
58
+ expect(response).to be_a(::Pinterest::Collection)
59
+ expect(response.records.map(&:class).uniq).to eq([::Pinterest::Board])
60
+
61
+ expect(response.records.first.name).to eq("9GAG")
62
+ expect(response.records.first.url).to eq("https://www.pinterest.com/shogunpanda/9gag/")
63
+ end
64
+
65
+ it "should only get requested fields" do
66
+ response = subject.boards(fields: ["name"])
67
+ expect(response.records.first.name).to eq("9GAG")
68
+ expect(response.records.first.url).to be_nil
69
+ end
70
+ end
71
+
72
+ context "#create_board" do
73
+ it "should complain when the name is missing" do
74
+ expect { subject.create_board("") }.to raise_error(ArgumentError, "You have to specify the board name.")
75
+ end
76
+
77
+ it "should create the board and return it with only the requested fields" do
78
+ response = subject.create_board("Foo", "Bar", fields: ["name"])
79
+ expect(response).to be_a(Pinterest::Board)
80
+ expect(response.name).to eq("Foo")
81
+ expect(response.creator).to be_nil
82
+ end
83
+ end
84
+
85
+ context "#edit_board" do
86
+ it "should validate the board" do
87
+ expect { subject.edit_board(nil, name: "") }.to raise_error(ArgumentError, "You have to specify a board or its id.")
88
+ end
89
+
90
+ it "should edit the board and return it with only the requested fields" do
91
+ response = subject.edit_board("559853866116962371", description: "Baz", fields: ["description"])
92
+ expect(response).to be_a(Pinterest::Board)
93
+ expect(response.description).to eq("Baz")
94
+ expect(response.creator).to be_nil
95
+ end
96
+ end
97
+
98
+ context "#delete_board" do
99
+ it "should validate the board" do
100
+ expect { subject.delete_board(nil) }.to raise_error(ArgumentError, "You have to specify a board or its id.")
101
+ end
102
+
103
+ it "should perform the call and return true" do
104
+ expect(subject.delete_board("559853866116962371")).to be_truthy
105
+ expect { subject.board("559853866116962371") }.to raise_error(::Pinterest::Errors::NotFoundError)
106
+ end
107
+
108
+ it "should perform the call and return an error" do
109
+ expect { subject.delete_board("invalid-board") }.to raise_error(::Pinterest::Errors::NotFoundError)
110
+ end
111
+ end
112
+
113
+ context "#search_my_boards" do
114
+ it "should validate the query" do
115
+ expect { subject.search_my_boards(nil) }.to raise_error(ArgumentError, "You have to specify a query.")
116
+ expect { subject.search_my_boards(" ") }.to raise_error(ArgumentError, "You have to specify a query.")
117
+ end
118
+
119
+ it "should search boards" do
120
+ response = subject.search_my_boards("foo", limit: 2)
121
+
122
+ expect(response).to be_a(::Pinterest::Collection)
123
+ expect(response.next_cursor).to eq("b28yfGNhZGY0ZDM1MjlhNjEwNGYzZTAxYTVjNDlkYjE4MDk2MDczNDMyNTc4ZjYyYmM3Zjg3NWU0ZjA1NDYzYTAyMmE=")
124
+ expect(response.records.map(&:class).uniq).to eq([::Pinterest::Board])
125
+
126
+ expect(response.records.first.name).to eq("Foo 3")
127
+ expect(response.records.first.url).to eq("https://www.pinterest.com/shogunpanda/foo-3/")
128
+ end
129
+
130
+ it "should paginate correctly" do
131
+ response = subject.search_my_boards("foo", limit: 2, cursor: "b28yfGNhZGY0ZDM1MjlhNjEwNGYzZTAxYTVjNDlkYjE4MDk2MDczNDMyNTc4ZjYyYmM3Zjg3NWU0ZjA1NDYzYTAyMmE=")
132
+ expect(response.records.first.name).to eq("Foo 1")
133
+ expect(response.size).to eq(1)
134
+ end
135
+
136
+ it "should only get requested fields" do
137
+ response = subject.search_my_boards("foo", limit: 2, fields: ["url"])
138
+
139
+ expect(response.records.first.name).to be_nil
140
+ expect(response.records.first.url).to eq("https://www.pinterest.com/shogunpanda/foo-3/")
141
+ end
142
+ end
143
+
144
+ context "#suggested_boards" do
145
+ it "should return the suggested boards returning only the requested fields" do
146
+ response = subject.suggested_boards(limit: 2, fields: ["url"])
147
+
148
+ expect(response).to be_a(::Pinterest::Collection)
149
+ expect(response.records.map(&:class).uniq).to eq([::Pinterest::Board])
150
+ expect(response.records.first.name).to be_nil
151
+ expect(response.records.first.url).to eq("https://www.pinterest.com/shogunpanda/foo-3/")
152
+ end
153
+ end
154
+
155
+ context "#following_boards" do
156
+ it "should return the followed boards" do
157
+ response = subject.following_boards(limit: 2)
158
+
159
+ expect(response).to be_a(::Pinterest::Collection)
160
+ expect(response.next_cursor).to eq("Pz9Nakl5TlRvNE5UazVNRGMwTWpneU5ESXhPVEF5TnpvNU1qSXpNemN3TlRVeU5qTXhNRE16TnpZenw0ZjEwYWZkYWRlOGI2MjMzMzk1ZGJiYjllYjBmMWY3NzVjNTg4OTc3ODRlNWJjZTdlMTliN2UyYzQ5Njc4MWY5")
161
+ expect(response.records.map(&:class).uniq).to eq([::Pinterest::Board])
162
+
163
+ expect(response.records.first.name).to eq("Drinks")
164
+ expect(response.records.first.url).to eq("https://www.pinterest.com/gemmorgan/drinks/")
165
+ end
166
+
167
+ it "should paginate correctly" do
168
+ response = subject.following_boards(limit: 2, cursor: "Pz9Nakl5TlRvNE5UazVNRGMwTWpneU5ESXhPVEF5TnpvNU1qSXpNemN3TlRVeU5qTXhNRE16TnpZenw0ZjEwYWZkYWRlOGI2MjMzMzk1ZGJiYjllYjBmMWY3NzVjNTg4OTc3ODRlNWJjZTdlMTliN2UyYzQ5Njc4MWY5")
169
+ expect(response.records.first.name).to eq("Tigers")
170
+ end
171
+
172
+ it "should only get requested fields" do
173
+ response = subject.following_boards(limit: 2, fields: ["url"])
174
+
175
+ expect(response.records.first.name).to be_nil
176
+ expect(response.records.first.url).to eq("https://www.pinterest.com/gemmorgan/drinks/")
177
+ end
178
+ end
179
+
180
+ context "#follow_board" do
181
+ it "should validate the board" do
182
+ expect { subject.follow_board(nil) }.to raise_error(ArgumentError, "You have to specify a board or its id.")
183
+ end
184
+
185
+ it "should perform the call and return true" do
186
+ expect(subject.follow_board("491736921752475493")).to be_truthy
187
+ expect(subject.follow_board("491736921752475493")).to be_truthy
188
+ end
189
+
190
+ it "should complain for invalid boards" do
191
+ expect { subject.follow_board("invalid-board") }.to raise_error(::Pinterest::Errors::NotFoundError)
192
+ end
193
+ end
194
+
195
+ context "#unfollow_board" do
196
+ it "should validate the board" do
197
+ expect { subject.unfollow_board(nil) }.to raise_error(ArgumentError, "You have to specify a board or its id.")
198
+ end
199
+
200
+ it "should perform the call and return true" do
201
+ expect(subject.unfollow_board("491736921752475493")).to be_truthy
202
+ expect(subject.unfollow_board("491736921752475493")).to be_truthy
203
+ end
204
+
205
+ it "should complain for invalid boards" do
206
+ expect { subject.follow_board("invalid-board") }.to raise_error(::Pinterest::Errors::NotFoundError)
207
+ end
208
+ end
209
+ end
@@ -0,0 +1,239 @@
1
+ #
2
+ # This file is part of the pinterest-ruby gem. Copyright (C) 2017 and above Shogun <shogun@cowtech.it>.
3
+ # Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
4
+ #
5
+
6
+ require "spec_helper"
7
+
8
+ describe Pinterest::Endpoints::Pins, vcr: true do
9
+ subject {
10
+ Pinterest::Client.new(access_token: "AVP99QpzwII-f1I2p5gyHi8CiCeQFJkDr8dP-JpDs-LEtAAyegAAAAA")
11
+ }
12
+
13
+ context "#pin" do
14
+ it "should get the current informations" do
15
+ response = subject.pin("491736853043758927")
16
+ expect(response).to be_a(Pinterest::Pin)
17
+
18
+ expect(response.as_json).to eq({
19
+ attribution: nil,
20
+ board: {
21
+ id: "491736921752475493",
22
+ name: "Woodworking",
23
+ url: "https://www.pinterest.com/dderse/woodworking/",
24
+ description: "",
25
+ creator: {
26
+ id: "491736990471948025",
27
+ username: nil,
28
+ first_name: nil,
29
+ last_name: nil,
30
+ bio: nil,
31
+ created_at: nil,
32
+ counts: nil,
33
+ image: nil
34
+ },
35
+ created_at: DateTime.civil(2012, 9, 15, 14, 10, 33),
36
+ counts: {"pins" => 3423, "collaborators" => 0, "followers" => 7618},
37
+ image: {
38
+ "60x60" => {"url" => "https://s-media-cache-ak0.pinimg.com/60x60/8f/a3/01/8fa3011c924838a3afe246419486dde3.jpg", "width" => 60, "height" => 60}
39
+ }
40
+ },
41
+ color: "#ffffff",
42
+ counts: {"likes" => 2, "comments" => 0, "repins" => 12},
43
+ created_at: DateTime.civil(2015, 11, 13, 12, 30, 13),
44
+ creator: {
45
+ id: "491736990471948025",
46
+ username: "dderse",
47
+ first_name: "Daniel",
48
+ last_name: "Derse",
49
+ bio: "",
50
+ created_at: DateTime.civil(2012, 9, 3, 13, 21, 48),
51
+ counts: {"pins" => 23400, "following" => 691, "followers" => 13079, "boards" => 37, "likes" => 35},
52
+ image: {
53
+ "60x60" => {"url" => "https://s-media-cache-ak0.pinimg.com/avatars/dderse_1477012877_60.jpg", "width" => 60, "height" => 60}
54
+ }
55
+ },
56
+ id: "491736853043758927",
57
+ image: {
58
+ "original" => {"url" => "https://s-media-cache-ak0.pinimg.com/originals/ad/90/47/ad90475f646cb866b31a1dc5c4f754f3.jpg", "width" => 480, "height" => 1056}
59
+ },
60
+ link: "https://www.pinterest.com/r/pin/491736853043758927/4878490596204882047/cea63543062d06243202ee09a1ae786da38078b5c996f5072a58fc89618443a7",
61
+ media: {"type" => "image"},
62
+ note: "Great tip! A really easy way to figure out tricky angles when you're installing moldings, trim, and baseboards.",
63
+ url: "https://www.pinterest.com/pin/491736853043758927/",
64
+ })
65
+ end
66
+
67
+ it "should restrict to requested fields" do
68
+ response = subject.pin("491736853043758927", fields: ["color", "abc"])
69
+ expect(response.color).to eq("#ffffff")
70
+ expect(response.link).to be_nil
71
+ end
72
+
73
+ it "should complain for non existent pins" do
74
+ expect { subject.pin("invalid-pin") }.to raise_error(::Pinterest::Errors::NotFoundError)
75
+ end
76
+ end
77
+
78
+ context "#create_pin" do
79
+ it "should validate the board" do
80
+ expect { subject.create_pin(nil, "http://placehold.it/300x300.png") }.to raise_error(ArgumentError, "You have to specify a board or its id.")
81
+ end
82
+
83
+ it "should create a pin by using a image URL" do
84
+ expect(subject.create_pin("shogunpanda/foo-1", "http://placehold.it/300x300.png")).to be_a(Pinterest::Pin)
85
+ end
86
+
87
+ it "should create a pin by using a image file" do
88
+ expect(subject.create_pin("shogunpanda/foo-1", __dir__ + "/../fixtures/first.jpg")).to be_a(Pinterest::Pin)
89
+ end
90
+
91
+ it "should return a pin containing only requested fields" do
92
+ response = subject.create_pin("shogunpanda/foo-1", "http://placehold.it/300x300.png", note: "NOTE", link: "http://google.it", fields: ["note"])
93
+ expect(response.note).to eq("NOTE")
94
+ expect(response.link).to be_nil
95
+ expect(response.url).to be_nil
96
+ end
97
+ end
98
+
99
+ context "#edit_pin" do
100
+ it "should validate the pin" do
101
+ expect { subject.edit_pin(nil) }.to raise_error(ArgumentError, "You have to specify a pin or its id.")
102
+ end
103
+
104
+ it "should edit the pin and return it with only the requested fields" do
105
+ response = subject.edit_pin("559853797412741144", note: "Ok", fields: ["note"])
106
+ expect(response.note).to eq("Ok")
107
+ expect(response.link).to be_nil
108
+ expect(response.url).to be_nil
109
+ end
110
+ end
111
+
112
+ context "#delete_pin" do
113
+ it "should validate the pin" do
114
+ expect { subject.delete_pin(nil) }.to raise_error(ArgumentError, "You have to specify a pin or its id.")
115
+ end
116
+
117
+ it "should perform the call and return true" do
118
+ expect(subject.delete_pin("559853797412741144")).to be_truthy
119
+ expect { subject.delete_pin("559853797412741144") }.to raise_error(::Pinterest::Errors::NotFoundError)
120
+ end
121
+
122
+ it "should perform the call and return an error" do
123
+ expect { subject.delete_pin("invalid-pin") }.to raise_error(::Pinterest::Errors::NotFoundError)
124
+ end
125
+ end
126
+
127
+ context "#pins" do
128
+ it "should return my pins" do
129
+ response = subject.pins(limit: 2)
130
+
131
+ expect(response).to be_a(::Pinterest::Collection)
132
+ expect(response.next_cursor).to eq("LT41NTk4NTM3OTc0MTI3NDExNTc6MnxhYzA2ZDAwYjI4NDhjNTVhMDMxMDU5NWNlODFmOTg5MzIzZmVlNmQ1MDdiZjIxNjY0NDgwYjVkZWZkYjEwNTg3")
133
+ expect(response.size).to eq(2)
134
+ expect(response.records.map(&:class).uniq).to eq([::Pinterest::Pin])
135
+
136
+ expect(response.records.first.note).to eq("NOTE")
137
+ expect(response.records.first.url).to eq("https://www.pinterest.com/pin/559853797412741158/")
138
+ end
139
+
140
+ it "should paginate correctly" do
141
+ response = subject.pins(limit: 50, cursor: "LT41NTk4NTM3OTc0MTI3NDExNTc6MnxhYzA2ZDAwYjI4NDhjNTVhMDMxMDU5NWNlODFmOTg5MzIzZmVlNmQ1MDdiZjIxNjY0NDgwYjVkZWZkYjEwNTg3")
142
+ expect(response.records.first.note).to eq(" ")
143
+ expect(response.size).to eq(47)
144
+ end
145
+
146
+ it "should only get requested fields" do
147
+ response = subject.pins(limit: 2, fields: ["url"])
148
+
149
+ expect(response.records.first.note).to be_nil
150
+ expect(response.records.first.url).to eq("https://www.pinterest.com/pin/559853797412741158/")
151
+ end
152
+ end
153
+
154
+ context "#search_my_pins" do
155
+ it "should validate the query" do
156
+ expect { subject.search_my_pins(nil) }.to raise_error(ArgumentError, "You have to specify a query.")
157
+ expect { subject.search_my_pins(" ") }.to raise_error(ArgumentError, "You have to specify a query.")
158
+ end
159
+
160
+ it "should search my pins" do
161
+ response = subject.search_my_pins("kitten", limit: 2)
162
+
163
+ expect(response).to be_a(::Pinterest::Collection)
164
+ expect(response.next_cursor).to eq("b28yfGNhZGY0ZDM1MjlhNjEwNGYzZTAxYTVjNDlkYjE4MDk2MDczNDMyNTc4ZjYyYmM3Zjg3NWU0ZjA1NDYzYTAyMmE=")
165
+ expect(response.records.map(&:class).uniq).to eq([::Pinterest::Pin])
166
+
167
+ expect(response.records.first.note).to eq("Kitten streching")
168
+ expect(response.records.first.url).to eq("https://www.pinterest.com/pin/559853797412741184/")
169
+ end
170
+
171
+ it "should paginate correctly" do
172
+ response = subject.search_my_pins("kitten", limit: 50, cursor: "b28yfGNhZGY0ZDM1MjlhNjEwNGYzZTAxYTVjNDlkYjE4MDk2MDczNDMyNTc4ZjYyYmM3Zjg3NWU0ZjA1NDYzYTAyMmE=")
173
+ expect(response.records.first.url).to eq("https://www.pinterest.com/pin/559853797398871450/")
174
+ expect(response.size).to eq(2)
175
+ end
176
+
177
+ it "should only get requested fields" do
178
+ response = subject.search_my_pins("kitten", limit: 50, fields: ["url"])
179
+
180
+ expect(response.records.first.note).to be_nil
181
+ expect(response.records.first.url).to eq("https://www.pinterest.com/pin/559853797412741184/")
182
+ end
183
+ end
184
+
185
+ context "#board_pins" do
186
+ it "should validate the board" do
187
+ expect { subject.board_pins(nil) }.to raise_error(ArgumentError, "You have to specify a board or its id.")
188
+ end
189
+
190
+ it "should return the pins of the board" do
191
+ response = subject.board_pins("491736921752475493", limit: 2)
192
+
193
+ expect(response).to be_a(::Pinterest::Collection)
194
+ expect(response.next_cursor).to eq("LT40OTE3MzY4NTMwNDk4MzYwNTE6Mnw5ZTRiNmEyOGM5MDMwY2U5MmRkMTNmOWIyMDQyYTIzMjU5NTA2YzAzNTgzY2EwNzlhODBiMzNhOGQwNzg1NTNj")
195
+ expect(response.records.map(&:class).uniq).to eq([::Pinterest::Pin])
196
+
197
+ expect(response.records.first.note).to eq("Wooden pallet Shamrock by DoodlesbyDiana on Etsy")
198
+ expect(response.records.first.url).to eq("https://www.pinterest.com/pin/491736853049887002/")
199
+ end
200
+
201
+ it "should paginate correctly" do
202
+ response = subject.board_pins("491736921752475493", limit: 2, cursor: "LT40OTE3MzY4NTMwNDk4MzYwNTE6Mnw5ZTRiNmEyOGM5MDMwY2U5MmRkMTNmOWIyMDQyYTIzMjU5NTA2YzAzNTgzY2EwNzlhODBiMzNhOGQwNzg1NTNj")
203
+ expect(response.records.first.url).to eq("https://www.pinterest.com/pin/491736853049727534/")
204
+ end
205
+
206
+ it "should only get requested fields" do
207
+ response = subject.board_pins("491736921752475493", limit: 2, fields: ["url"])
208
+
209
+ expect(response.records.first.note).to be_nil
210
+ expect(response.records.first.url).to eq("https://www.pinterest.com/pin/491736853049887002/")
211
+ end
212
+ end
213
+
214
+ context "#likes" do
215
+ it "should return the list of liked pins" do
216
+ response = subject.likes(limit: 2)
217
+
218
+ expect(response).to be_a(::Pinterest::Collection)
219
+ expect(response.next_cursor).to eq("LT41MjcyNzMwNjg4NTkwMDQwMTA6MnxmYWJkMDlhOGI4MmQ3ZTJmNGZhM2ZjMTQ2Y2UwOTdkZTI2ZTA1NmRjYzZhZWQ3NTJlODFhNjBmNThhYzEwNjkw")
220
+ expect(response.records.map(&:class).uniq).to eq([::Pinterest::Pin])
221
+
222
+ expect(response.records.first.note).to eq("best-kitten-names-1.jpg (680×411)")
223
+ expect(response.records.first.url).to eq("https://www.pinterest.com/pin/414049759476182583/")
224
+ end
225
+
226
+ it "should paginate correctly" do
227
+ response = subject.likes(limit: 2, cursor: "LT41MjcyNzMwNjg4NTkwMDQwMTA6MnxmYWJkMDlhOGI4MmQ3ZTJmNGZhM2ZjMTQ2Y2UwOTdkZTI2ZTA1NmRjYzZhZWQ3NTJlODFhNjBmNThhYzEwNjkw")
228
+ expect(response.size).to eq(2)
229
+ expect(response.records.first.url).to eq("https://www.pinterest.com/pin/115052965460744443/")
230
+ end
231
+
232
+ it "should only get requested fields" do
233
+ response = subject.likes(limit: 1, fields: ["url"])
234
+
235
+ expect(response.records.first.note).to be_nil
236
+ expect(response.records.first.url).to eq("https://www.pinterest.com/pin/414049759476182583/")
237
+ end
238
+ end
239
+ end
@@ -0,0 +1,194 @@
1
+ #
2
+ # This file is part of the pinterest-ruby gem. Copyright (C) 2017 and above Shogun <shogun@cowtech.it>.
3
+ # Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
4
+ #
5
+
6
+ require "spec_helper"
7
+
8
+ describe Pinterest::Endpoints::Users, vcr: true do
9
+ subject {
10
+ Pinterest::Client.new(access_token: "AVP99QpzwII-f1I2p5gyHi8CiCeQFJkDr8dP-JpDs-LEtAAyegAAAAA")
11
+ }
12
+
13
+ context "#me" do
14
+ it "should get the current informations" do
15
+ response = subject.me
16
+ expect(response).to be_a(Pinterest::User)
17
+
18
+ expect(response.as_json).to eq({
19
+ id: "559853934835925315",
20
+ username: "shogunpanda",
21
+ first_name: "Paolo",
22
+ last_name: "Insogna",
23
+ bio: "Senior developer in Ruby on Rails, jQuery, HTML5, CSS3, BootStrap, Backbone.JS and others. LARV addicted and nerd on many things. From Molise, Italy.",
24
+ created_at: DateTime.civil(2012, 8, 12, 6, 28, 34),
25
+ counts: {"pins" => 46, "following" => 8, "followers" => 9, "boards" => 2, "likes" => 1},
26
+ image: {
27
+ "60x60" => {"url" => "https://s-media-cache-ak0.pinimg.com/avatars/shogunpanda_1344752914_60.jpg", "width" => 60, "height" => 60
28
+ }
29
+ }
30
+ })
31
+ end
32
+
33
+ it "should restrict to requested fields" do
34
+ response = subject.me(fields: ["username", "abc"])
35
+ expect(response.username).to eq("shogunpanda")
36
+ expect(response.first_name).to be_nil
37
+ end
38
+ end
39
+
40
+ context "#user" do
41
+ it "should get the current informations" do
42
+ response = subject.user("testerfb11")
43
+ expect(response).to be_a(Pinterest::User)
44
+
45
+ expect(response.as_json).to eq({
46
+ id: "332914734862997577",
47
+ username: "testerfb11",
48
+ first_name: "Tester",
49
+ last_name: "tes",
50
+ bio: "",
51
+ created_at: DateTime.civil(2014, 10, 10, 18, 52, 41),
52
+ counts: {"pins" => 1835, "following" => 2, "followers" => 6, "boards" => 18, "likes" => 9},
53
+ image: {
54
+ "60x60" => {"url" => "https://s.pinimg.com/images/user/default_60.png", "width" => 60, "height" => 60
55
+ }
56
+ }
57
+ })
58
+ end
59
+
60
+ it "should restrict to requested fields" do
61
+ response = subject.user("testerfb11", fields: ["username", "abc"])
62
+ expect(response.username).to eq("testerfb11")
63
+ expect(response.first_name).to be_nil
64
+ end
65
+
66
+ it "should complain for non existent users" do
67
+ expect { subject.user("invalid-user") }.to raise_error(::Pinterest::Errors::NotFoundError)
68
+ end
69
+ end
70
+
71
+ context "#followers" do
72
+ it "should return a list of followers" do
73
+ response = subject.followers(limit: 1)
74
+
75
+ expect(response).to be_a(::Pinterest::Collection)
76
+ expect(response.next_cursor).to eq("Pz9Nakl5TXpvek16STNOek01T1Rjek56UTJOVEV6TVRRNk9USXlNek0zTWpBek5UUXpNak00T1RneE9GOUZ8NjY4OTYzMGIyMmVhNTVjYjliMzY2NmY1YWVmMWQxODU5MDlhMjk4MjdlYWJmMDc4MTk3NWEzZWM1NWVmMGI4NQ==")
77
+ expect(response.records.map(&:class).uniq).to eq([::Pinterest::User])
78
+
79
+ expect(response.records.first.username).to eq("ges_si")
80
+ expect(response.records.first.first_name).to eq("Gessica")
81
+ end
82
+
83
+ it "should paginate correctly" do
84
+ response = subject.followers(limit: 1, cursor: "Pz9Nakl5TXpvME9UUTVNRE0xT0RNNU5UazVPREU1TlRrNk9USXlNek0zTURVNE5EZ3hOamcwT0RVeE9WOUZ8ZTQ5MDlkYTI3YTQ1N2Y5NWZiMzQ5YTVjNWI4MjAzZmM5NTBlZWNiNDFiNGI5NmMyMGQyZDdmMzA0MjNhODg1Ng==")
85
+ expect(response.records.first.username).to eq("ges_si")
86
+ expect(response.next?).to be_truthy
87
+ end
88
+
89
+ it "should only get requested fields" do
90
+ response = subject.followers(fields: ["username"])
91
+ expect(response.records.first.username).to eq("ges_si")
92
+ expect(response.records.first.first_name).to be_nil
93
+ end
94
+ end
95
+
96
+ context "#following_users" do
97
+ it "should return a list of followed users" do
98
+ response = subject.following_users(limit: 2)
99
+
100
+ expect(response).to be_a(::Pinterest::Collection)
101
+ expect(response.next_cursor).to eq("Pz9Nakl5TXpvMk9EQTBOamM0TVRjM09ESXpOVFl4TnpvNU1qSXpNemN5TURNMU5EYzJOakUxTWpZNVgwVT18ZmY3MzQyMTMyNWI2ZGVjZTIyODZmZjI2ZGJmMGNjZDEzNWVlZjM2MGRkOWY4ZDQ5YmM2YjdiMzViNTk4MWEyMg==")
102
+ expect(response.records.map(&:class).uniq).to eq([::Pinterest::User])
103
+
104
+ expect(response.records.first.username).to eq("rajkadam")
105
+ expect(response.records.first.first_name).to eq("Raj")
106
+ end
107
+
108
+ it "should paginate correctly" do
109
+ expect(subject.following_users(limit: 2).size).to eq(2)
110
+ response = subject.following_users(limit: 2, cursor: "Pz9Nakl5TXpvMk9EQTBOamM0TVRjM09ESXpOVFl4TnpvNU1qSXpNemN5TURNMU5EYzJOakUxTWpZNVgwVT18ZmY3MzQyMTMyNWI2ZGVjZTIyODZmZjI2ZGJmMGNjZDEzNWVlZjM2MGRkOWY4ZDQ5YmM2YjdiMzViNTk4MWEyMg==")
111
+
112
+ expect(response.records.first.username).to eq("eileenrene11")
113
+ expect(response.size).to eq(2)
114
+ expect(response.next?).to be_truthy
115
+ end
116
+
117
+ it "should only get requested fields" do
118
+ response = subject.following_users(fields: ["username"])
119
+ expect(response.records.first.username).to eq("rajkadam")
120
+ expect(response.records.first.first_name).to be_nil
121
+ end
122
+ end
123
+
124
+ context "#follow_user" do
125
+ it "should validate the user" do
126
+ expect { subject.follow_user(nil) }.to raise_error(ArgumentError, "You have to specify a user or its id.")
127
+ end
128
+
129
+ it "should perform the call and return true" do
130
+ expect(subject.follow_user("testerfb11")).to be_truthy
131
+ expect(subject.follow_user("testerfb11")).to be_truthy
132
+ end
133
+
134
+ it "should complain for invalid users" do
135
+ expect { subject.follow_user("invalid-user") }.to raise_error(::Pinterest::Errors::NotFoundError)
136
+ end
137
+ end
138
+
139
+ context "#unfollow_user" do
140
+ it "should validate the user" do
141
+ expect { subject.unfollow_user(nil) }.to raise_error(ArgumentError, "You have to specify a user or its id.")
142
+ end
143
+
144
+ it "should perform the call and return true" do
145
+ expect(subject.unfollow_user("testerfb11")).to be_truthy
146
+ expect(subject.unfollow_user("testerfb11")).to be_truthy
147
+ end
148
+
149
+ it "should complain for invalid users" do
150
+ expect { subject.unfollow_user("invalid-user") }.to raise_error(::Pinterest::Errors::NotFoundError)
151
+ end
152
+ end
153
+
154
+ context "#interests" do
155
+ it "should return a list of followed interest" do
156
+ response = subject.interests
157
+
158
+ expect(response).to be_a(::Pinterest::Collection)
159
+ expect(response.records.map(&:class).uniq).to eq([::Pinterest::Interest])
160
+
161
+ expect(response.records.map(&:name)).to eq(["cats", "puppies", "food"])
162
+ end
163
+
164
+ it "should paginate correctly" do
165
+ first_page = subject.interests(limit: 2)
166
+ expect(first_page.size).to eq(2)
167
+ response = subject.interests(limit: 2, cursor: first_page.next_cursor)
168
+
169
+ expect(response.records.map(&:name)).to eq(["food"])
170
+ expect(response.size).to eq(1)
171
+ expect(response.next?).to be_falsey
172
+ end
173
+ end
174
+
175
+ context "#follow_interest" do
176
+ it "should validate the user" do
177
+ expect { subject.follow_interest(nil) }.to raise_error(ArgumentError, "You have to specify a interest or its id.")
178
+ end
179
+
180
+ it "should perform the call and return an error" do
181
+ expect { subject.follow_interest("905661505034") }.to raise_error(::Pinterest::Errors::MethodNotAllowedError)
182
+ end
183
+ end
184
+
185
+ context "#unfollow_interest" do
186
+ it "should validate the user" do
187
+ expect { subject.unfollow_interest(nil) }.to raise_error(ArgumentError, "You have to specify a interest or its id.")
188
+ end
189
+
190
+ it "should perform the call and return an error" do
191
+ expect { subject.unfollow_interest("905661505034") }.to raise_error(::Pinterest::Errors::NotFoundError)
192
+ end
193
+ end
194
+ end