redditkit 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 (180) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.md +22 -0
  3. data/README.md +155 -0
  4. data/Rakefile +8 -0
  5. data/lib/redditkit.rb +26 -0
  6. data/lib/redditkit/base.rb +60 -0
  7. data/lib/redditkit/client.rb +142 -0
  8. data/lib/redditkit/client/account.rb +73 -0
  9. data/lib/redditkit/client/apps.rb +63 -0
  10. data/lib/redditkit/client/captcha.rb +36 -0
  11. data/lib/redditkit/client/comments.rb +54 -0
  12. data/lib/redditkit/client/flair.rb +148 -0
  13. data/lib/redditkit/client/links.rb +134 -0
  14. data/lib/redditkit/client/miscellaneous.rb +50 -0
  15. data/lib/redditkit/client/moderation.rb +179 -0
  16. data/lib/redditkit/client/multireddits.rb +207 -0
  17. data/lib/redditkit/client/private_messages.rb +74 -0
  18. data/lib/redditkit/client/search.rb +25 -0
  19. data/lib/redditkit/client/subreddits.rb +120 -0
  20. data/lib/redditkit/client/users.rb +109 -0
  21. data/lib/redditkit/client/utilities.rb +137 -0
  22. data/lib/redditkit/client/voting.rb +41 -0
  23. data/lib/redditkit/client/wiki.rb +83 -0
  24. data/lib/redditkit/comment.rb +54 -0
  25. data/lib/redditkit/creatable.rb +17 -0
  26. data/lib/redditkit/error.rb +111 -0
  27. data/lib/redditkit/link.rb +140 -0
  28. data/lib/redditkit/moderator_action.rb +19 -0
  29. data/lib/redditkit/multireddit.rb +32 -0
  30. data/lib/redditkit/multireddit_description.rb +14 -0
  31. data/lib/redditkit/paginated_response.rb +22 -0
  32. data/lib/redditkit/private_message.rb +27 -0
  33. data/lib/redditkit/response/parse_json.rb +29 -0
  34. data/lib/redditkit/response/raise_error.rb +21 -0
  35. data/lib/redditkit/subreddit.rb +86 -0
  36. data/lib/redditkit/thing.rb +20 -0
  37. data/lib/redditkit/user.rb +30 -0
  38. data/lib/redditkit/version.rb +19 -0
  39. data/lib/redditkit/votable.rb +37 -0
  40. data/redditkit.gemspec +25 -0
  41. data/spec/cassettes/RedditKit_Client/should_raise_an_error_with_invalid_credentials.yml +39 -0
  42. data/spec/cassettes/RedditKit_Client_Account/_sign_in/signs_the_user_in.yml +132 -0
  43. data/spec/cassettes/RedditKit_Client_Account/_update_session/updates_the_current_session.yml +133 -0
  44. data/spec/cassettes/RedditKit_Client_Captcha/_captcha_url/returns_a_CAPTCHA_url_from_an_identifier.yml +38 -0
  45. data/spec/cassettes/RedditKit_Client_Captcha/_needs_captcha_/checks_if_the_current_account_needs_a_CAPTCHA.yml +44 -0
  46. data/spec/cassettes/RedditKit_Client_Captcha/_new_captcha_identifier/returns_a_new_CAPTCHA_identifier.yml +38 -0
  47. data/spec/cassettes/RedditKit_Client_Comments/_comment/requests_the_correct_resource.yml +47 -0
  48. data/spec/cassettes/RedditKit_Client_Comments/_comments/with_a_RedditKit_Link/returns_comments_on_a_link.yml +140 -0
  49. data/spec/cassettes/RedditKit_Client_Comments/_comments/with_a_link_identifier/returns_comments_on_a_link.yml +89 -0
  50. data/spec/cassettes/RedditKit_Client_Comments/_submit_comment/requests_the_correct_resource.yml +313 -0
  51. data/spec/cassettes/RedditKit_Client_Flair/_apply_flair_template/clears_flair_templates.yml +52 -0
  52. data/spec/cassettes/RedditKit_Client_Flair/_clear_flair_templates/clears_flair_templates.yml +49 -0
  53. data/spec/cassettes/RedditKit_Client_Flair/_create_flair_template/creates_a_flair_template.yml +46 -0
  54. data/spec/cassettes/RedditKit_Client_Flair/_create_flair_template/raises_InvalidClassName.yml +46 -0
  55. data/spec/cassettes/RedditKit_Client_Flair/_create_flair_template/raises_TooManyClassNames.yml +47 -0
  56. data/spec/cassettes/RedditKit_Client_Flair/_delete_user_flair/requests_the_correct_resource.yml +60 -0
  57. data/spec/cassettes/RedditKit_Client_Flair/_flair_list/returns_the_list_of_flair.yml +44 -0
  58. data/spec/cassettes/RedditKit_Client_Flair/_set_flair/requests_the_correct_resource.yml +49 -0
  59. data/spec/cassettes/RedditKit_Client_Flair/_set_flair_options/sets_flair_options.yml +49 -0
  60. data/spec/cassettes/RedditKit_Client_Flair/_set_flair_with_csv/requests_the_correct_resource.yml +51 -0
  61. data/spec/cassettes/RedditKit_Client_Flair/_toggle_flair/requests_the_correct_resource.yml +49 -0
  62. data/spec/cassettes/RedditKit_Client_Links/_front_page/requests_the_correct_category.yml +498 -0
  63. data/spec/cassettes/RedditKit_Client_Links/_front_page/requests_the_correct_resource.yml +603 -0
  64. data/spec/cassettes/RedditKit_Client_Links/_hide/requests_the_correct_resource.yml +46 -0
  65. data/spec/cassettes/RedditKit_Client_Links/_link/returns_a_link.yml +55 -0
  66. data/spec/cassettes/RedditKit_Client_Links/_links/contains_pagination_information.yml +402 -0
  67. data/spec/cassettes/RedditKit_Client_Links/_links/requests_a_certain_number_of_links.yml +186 -0
  68. data/spec/cassettes/RedditKit_Client_Links/_links/requests_front_page_links_if_no_subreddit_is_present.yml +603 -0
  69. data/spec/cassettes/RedditKit_Client_Links/_links/requests_links_with_the_correct_time_frame.yml +375 -0
  70. data/spec/cassettes/RedditKit_Client_Links/_links/requests_the_correct_subreddit_and_category.yml +402 -0
  71. data/spec/cassettes/RedditKit_Client_Links/_links_with_domain/returns_links_with_a_specific_domain.yml +99 -0
  72. data/spec/cassettes/RedditKit_Client_Links/_mark_nsfw/requests_the_correct_resource.yml +46 -0
  73. data/spec/cassettes/RedditKit_Client_Links/_random_link/returns_a_random_link.yml +91 -0
  74. data/spec/cassettes/RedditKit_Client_Links/_submit/raises_RedditKit_InvalidCaptcha_if_no_CAPTCHA_is_filled_out.yml +54 -0
  75. data/spec/cassettes/RedditKit_Client_Links/_unhide/requests_the_correct_resource.yml +46 -0
  76. data/spec/cassettes/RedditKit_Client_Links/_unmark_nsfw/requests_the_correct_resource.yml +46 -0
  77. data/spec/cassettes/RedditKit_Client_Miscellaneous/_delete/requests_the_correct_resource.yml +46 -0
  78. data/spec/cassettes/RedditKit_Client_Miscellaneous/_edit/requests_the_correct_resource.yml +52 -0
  79. data/spec/cassettes/RedditKit_Client_Miscellaneous/_save/saves_an_object.yml +46 -0
  80. data/spec/cassettes/RedditKit_Client_Miscellaneous/_unsave/unsaves_an_object.yml +89 -0
  81. data/spec/cassettes/RedditKit_Client_Moderation/_accept_moderator_invitation/requests_the_correct_resource.yml +53 -0
  82. data/spec/cassettes/RedditKit_Client_Moderation/_ban/requests_the_correct_resource.yml +103 -0
  83. data/spec/cassettes/RedditKit_Client_Moderation/_contributors_to_subreddit/requests_the_correct_resource.yml +47 -0
  84. data/spec/cassettes/RedditKit_Client_Moderation/_ignore_reports/requests_the_correct_resource.yml +46 -0
  85. data/spec/cassettes/RedditKit_Client_Moderation/_moderation_log/returns_RedditKit_ModeratorAction_objects.yml +153 -0
  86. data/spec/cassettes/RedditKit_Client_Moderation/_moderators_of_subreddit/requests_the_correct_resource.yml +48 -0
  87. data/spec/cassettes/RedditKit_Client_Moderation/_reset_subreddit_header/requests_the_correct_resource.yml +55 -0
  88. data/spec/cassettes/RedditKit_Client_Moderation/_set_contest_mode/requests_the_correct_resource.yml +46 -0
  89. data/spec/cassettes/RedditKit_Client_Moderation/_set_sticky_post/requests_the_correct_resource.yml +46 -0
  90. data/spec/cassettes/RedditKit_Client_Moderation/_unban/requests_the_correct_resource.yml +54 -0
  91. data/spec/cassettes/RedditKit_Client_Moderation/_unignore_reports/requests_the_correct_resource.yml +46 -0
  92. data/spec/cassettes/RedditKit_Client_Multireddits/_add_subreddit_to_multireddit/adds_a_subreddit_to_a_multireddit.yml +177 -0
  93. data/spec/cassettes/RedditKit_Client_Multireddits/_create_multireddit/creates_a_multireddit.yml +137 -0
  94. data/spec/cassettes/RedditKit_Client_Multireddits/_create_multireddit/raises_RedditKit_Conflict_when_using_an_existing_name.yml +133 -0
  95. data/spec/cassettes/RedditKit_Client_Multireddits/_delete_multireddit/deletes_a_multireddit.yml +134 -0
  96. data/spec/cassettes/RedditKit_Client_Multireddits/_multireddit/with_a_path/returns_a_multireddit.yml +39 -0
  97. data/spec/cassettes/RedditKit_Client_Multireddits/_multireddit/without_a_path/returns_a_multireddit.yml +39 -0
  98. data/spec/cassettes/RedditKit_Client_Multireddits/_multireddit_description/with_a_multireddit/returns_a_multireddit_description.yml +81 -0
  99. data/spec/cassettes/RedditKit_Client_Multireddits/_multireddit_description/with_a_username_and_multireddit_name/returns_a_multireddit_description.yml +45 -0
  100. data/spec/cassettes/RedditKit_Client_Multireddits/_my_multireddits/return_s_the_user_s_multireddits.yml +47 -0
  101. data/spec/cassettes/RedditKit_Client_Multireddits/_remove_subreddit_from_multireddit/removes_a_subreddit_from_a_multireddit.yml +175 -0
  102. data/spec/cassettes/RedditKit_Client_Multireddits/_rename_multireddit/renames_a_multireddit.yml +134 -0
  103. data/spec/cassettes/RedditKit_Client_Multireddits/_set_multireddit_description/returns_a_multireddit_description.yml +48 -0
  104. data/spec/cassettes/RedditKit_Client_Multireddits/_update_multireddit/updates_a_multireddit.yml +184 -0
  105. data/spec/cassettes/RedditKit_Client_PrivateMessages/_block_author_of_message/requests_the_correct_resource.yml +46 -0
  106. data/spec/cassettes/RedditKit_Client_PrivateMessages/_mark_as_read/requests_the_correct_resource.yml +51 -0
  107. data/spec/cassettes/RedditKit_Client_PrivateMessages/_mark_as_unread/requests_the_correct_resource.yml +51 -0
  108. data/spec/cassettes/RedditKit_Client_PrivateMessages/_messages/requests_the_correct_resource.yml +187 -0
  109. data/spec/cassettes/RedditKit_Client_PrivateMessages/_unblock/requests_the_correct_resource.yml +46 -0
  110. data/spec/cassettes/RedditKit_Client_Search/_search/restricts_searches_to_a_specific_subreddit.yml +878 -0
  111. data/spec/cassettes/RedditKit_Client_Search/_search/returns_a_specific_number_of_results.yml +130 -0
  112. data/spec/cassettes/RedditKit_Client_Search/_search/returns_search_results.yml +844 -0
  113. data/spec/cassettes/RedditKit_Client_Subreddits/_random_subreddit/returns_a_random_subreddit.yml +181 -0
  114. data/spec/cassettes/RedditKit_Client_Subreddits/_recommended_subreddits/returns_subreddit_names.yml +37 -0
  115. data/spec/cassettes/RedditKit_Client_Subreddits/_search_subreddits_by_name/returns_subreddit_names.yml +875 -0
  116. data/spec/cassettes/RedditKit_Client_Subreddits/_subreddit/returns_a_specified_subreddit.yml +100 -0
  117. data/spec/cassettes/RedditKit_Client_Subreddits/_subreddits/returns_a_specified_number_of_subreddits.yml +505 -0
  118. data/spec/cassettes/RedditKit_Client_Subreddits/_subreddits/returns_subreddits_from_a_specific_category.yml +510 -0
  119. data/spec/cassettes/RedditKit_Client_Subreddits/_subreddits_by_topic/returns_subreddit_names.yml +41 -0
  120. data/spec/cassettes/RedditKit_Client_Subreddits/_subscribe/requests_the_correct_resource.yml +46 -0
  121. data/spec/cassettes/RedditKit_Client_Subreddits/_subscribed_subreddits/returns_a_specified_number_of_subreddits.yml +415 -0
  122. data/spec/cassettes/RedditKit_Client_Subreddits/_subscribed_subreddits/returns_subreddits_from_a_specific_category.yml +58 -0
  123. data/spec/cassettes/RedditKit_Client_Subreddits/_subscribed_subreddits/returns_the_user_s_subscribed_subreddits.yml +3469 -0
  124. data/spec/cassettes/RedditKit_Client_Subreddits/_unsubscribe/requests_the_correct_resource.yml +46 -0
  125. data/spec/cassettes/RedditKit_Client_Users/_friends/returns_the_user_s_friends.yml +48 -0
  126. data/spec/cassettes/RedditKit_Client_Users/_my_content/returns_the_user_s_content.yml +60 -0
  127. data/spec/cassettes/RedditKit_Client_Users/_user/requests_the_correct_resource.yml +48 -0
  128. data/spec/cassettes/RedditKit_Client_Users/_user/returns_a_specified_user.yml +48 -0
  129. data/spec/cassettes/RedditKit_Client_Users/_user/returns_the_authenticated_user.yml +48 -0
  130. data/spec/cassettes/RedditKit_Client_Users/_user_content/returns_the_user_s_content.yml +41 -0
  131. data/spec/cassettes/RedditKit_Client_Users/_username_available_/returns_false_for_an_unavailable_username.yml +36 -0
  132. data/spec/cassettes/RedditKit_Client_Users/_username_available_/returns_true_for_an_available_username.yml +36 -0
  133. data/spec/cassettes/RedditKit_Client_Voting/_downvote/with_a_comment_full_name_passed/downvotes_the_comment.yml +100 -0
  134. data/spec/cassettes/RedditKit_Client_Voting/_downvote/with_a_comment_passed/downvotes_the_comment.yml +154 -0
  135. data/spec/cassettes/RedditKit_Client_Voting/_downvote/with_a_link_full_name_passed/downvotes_the_link.yml +106 -0
  136. data/spec/cassettes/RedditKit_Client_Voting/_downvote/with_a_link_passed/downvotes_the_link.yml +166 -0
  137. data/spec/cassettes/RedditKit_Client_Voting/_upvote/with_a_comment_full_name_passed/upvotes_the_comment.yml +100 -0
  138. data/spec/cassettes/RedditKit_Client_Voting/_upvote/with_a_comment_passed/upvotes_the_comment.yml +154 -0
  139. data/spec/cassettes/RedditKit_Client_Voting/_upvote/with_a_link_full_name_passed/upvotes_the_link.yml +106 -0
  140. data/spec/cassettes/RedditKit_Client_Voting/_upvote/with_a_link_passed/upvotes_the_link.yml +166 -0
  141. data/spec/cassettes/RedditKit_Client_Voting/_withdraw_vote/with_a_comment_full_name_passed/withdraws_the_vote_on_the_comment.yml +154 -0
  142. data/spec/cassettes/RedditKit_Client_Voting/_withdraw_vote/with_a_comment_passed/withdraws_the_vote_on_the_comment.yml +208 -0
  143. data/spec/cassettes/RedditKit_Client_Voting/_withdraw_vote/with_a_link_full_name_passed/withdraws_the_vote_on_the_link.yml +166 -0
  144. data/spec/cassettes/RedditKit_Client_Voting/_withdraw_vote/with_a_link_passed/withdraws_the_vote_on_the_link.yml +226 -0
  145. data/spec/cassettes/RedditKit_Client_Wiki/_add_wiki_editor/requests_the_correct_resource.yml +46 -0
  146. data/spec/cassettes/RedditKit_Client_Wiki/_edit_wiki_page/requests_the_correct_resource.yml +48 -0
  147. data/spec/cassettes/RedditKit_Client_Wiki/_hide_wiki_revision/requests_the_correct_resource.yml +46 -0
  148. data/spec/cassettes/RedditKit_Client_Wiki/_remove_wiki_editor/requests_the_correct_resource.yml +46 -0
  149. data/spec/cassettes/RedditKit_Client_Wiki/_revert_to_revision/requests_the_correct_resource.yml +46 -0
  150. data/spec/cassettes/RedditKit_Comment/should_not_be_deleted_if_neither_author_and_comment_attributes_are_set_to_deleted_.yml +90 -0
  151. data/spec/cassettes/RedditKit_Comment/should_return_replies.yml +90 -0
  152. data/spec/cassettes/authenticated_client.yml +87 -0
  153. data/spec/redditkit/base_spec.rb +45 -0
  154. data/spec/redditkit/client/account_spec.rb +50 -0
  155. data/spec/redditkit/client/apps_spec.rb +58 -0
  156. data/spec/redditkit/client/captcha_spec.rb +30 -0
  157. data/spec/redditkit/client/comments_spec.rb +40 -0
  158. data/spec/redditkit/client/flair_spec.rb +92 -0
  159. data/spec/redditkit/client/links_spec.rb +103 -0
  160. data/spec/redditkit/client/miscellaneous_spec.rb +40 -0
  161. data/spec/redditkit/client/moderation_spec.rb +141 -0
  162. data/spec/redditkit/client/multireddits_spec.rb +158 -0
  163. data/spec/redditkit/client/private_messages_spec.rb +51 -0
  164. data/spec/redditkit/client/search_spec.rb +25 -0
  165. data/spec/redditkit/client/subreddits_spec.rb +83 -0
  166. data/spec/redditkit/client/users_spec.rb +92 -0
  167. data/spec/redditkit/client/voting_spec.rb +99 -0
  168. data/spec/redditkit/client/wiki_spec.rb +40 -0
  169. data/spec/redditkit/client_spec.rb +46 -0
  170. data/spec/redditkit/comment_spec.rb +26 -0
  171. data/spec/redditkit/creatable_spec.rb +24 -0
  172. data/spec/redditkit/error_spec.rb +61 -0
  173. data/spec/redditkit/link_spec.rb +33 -0
  174. data/spec/redditkit/multireddit_spec.rb +27 -0
  175. data/spec/redditkit/paginated_response_spec.rb +23 -0
  176. data/spec/redditkit/thing_spec.rb +18 -0
  177. data/spec/redditkit/votable_spec.rb +52 -0
  178. data/spec/redditkit_spec.rb +21 -0
  179. data/spec/spec_helper.rb +124 -0
  180. metadata +390 -0
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe RedditKit::Base do
4
+
5
+ before do
6
+ @base = RedditKit::Base.new(:kind => 't1', :data => {:id => '12345'})
7
+ @thing = RedditKit::Thing.new(:kind => 't1', :data => {:id => '12345'})
8
+ end
9
+
10
+ describe "#attributes" do
11
+ it "return a hash of attributes" do
12
+ expect(@base.attributes).to eq(:kind => 't1', :id => '12345')
13
+ end
14
+ end
15
+
16
+ describe "calling methods" do
17
+ context "attribute method" do
18
+ it "can access attribute methods" do
19
+ expect(@thing.id).to eq '12345'
20
+ end
21
+ end
22
+
23
+ context "predicate method" do
24
+ it "can access predicate methods" do
25
+ expect(@thing.id?).to be_true
26
+ end
27
+ end
28
+
29
+ context "#[]" do
30
+ it "can call methods using strings" do
31
+ expect(@base['object_id']).to be_an Integer
32
+ end
33
+
34
+ it "can call methods using symbols" do
35
+ expect(@base[:object_id]).to be_an Integer
36
+ end
37
+
38
+ it "returns nil for nonexistent methods" do
39
+ expect(@base['missing']).to be_nil
40
+ expect(@base[:missing]).to be_nil
41
+ end
42
+ end
43
+ end
44
+
45
+ end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe RedditKit::Client::Account, :vcr do
4
+
5
+ describe "#sign_in" do
6
+ it "signs the user in" do
7
+ client = RedditKit::Client.new redditkit_username, redditkit_password
8
+
9
+ expect(client.signed_in?).to be_true
10
+ expect(client.user).to_not be_nil
11
+ end
12
+ end
13
+
14
+ describe "#signed_in?" do
15
+ it "determines whether there is a user signed in" do
16
+ expect(authenticated_client.signed_in?).to be_true
17
+ end
18
+ end
19
+
20
+ describe "#sign_out" do
21
+ it "signs the current user out" do
22
+ client = RedditKit::Client.new :username => redditkit_username, :password => redditkit_password
23
+ client.sign_out
24
+
25
+ expect(client.signed_in?).to_not be_true
26
+ end
27
+ end
28
+
29
+ describe "#update_account" do
30
+ before do
31
+ stub_empty_post_request 'api/update'
32
+ end
33
+
34
+ it "requests the correct resource" do
35
+ authenticated_client.update_account :current_password => redditkit_password, :new_password => redditkit_password
36
+ expect(a_post('api/update')).to have_been_made
37
+ end
38
+ end
39
+
40
+ describe "#update_session" do
41
+ it "updates the current session" do
42
+ client = RedditKit::Client.new redditkit_username, redditkit_password
43
+ old_cookie = client.cookie
44
+
45
+ new_cookie = client.update_session redditkit_password
46
+ expect(old_cookie).to_not eq new_cookie
47
+ end
48
+ end
49
+
50
+ end
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+
3
+ describe RedditKit::Client::Apps, :vcr do
4
+
5
+ describe "#create_app" do
6
+ before do
7
+ stub_empty_post_request('api/updateapp')
8
+ end
9
+
10
+ it "requests the correct resource" do
11
+ authenticated_client.create_app 'Test app', :description => 'Some test app'
12
+ expect(a_post('api/updateapp')).to have_been_made
13
+ end
14
+ end
15
+
16
+ describe "#delete_app" do
17
+ before do
18
+ stub_empty_post_request('api/deleteapp')
19
+ end
20
+
21
+ it "requests the correct resource" do
22
+ authenticated_client.delete_app 'fake-identifier'
23
+ expect(a_post('api/deleteapp')).to have_been_made
24
+ end
25
+ end
26
+
27
+ describe "#revoke_app" do
28
+ before do
29
+ stub_empty_post_request('api/revokeapp')
30
+ end
31
+ it "requests the correct resource" do
32
+ authenticated_client.revoke_app 'fake-identifier'
33
+ expect(a_post('api/revokeapp')).to have_been_made
34
+ end
35
+ end
36
+
37
+ describe "#add_developer" do
38
+ before do
39
+ stub_empty_post_request('api/adddeveloper')
40
+ end
41
+ it "requests the correct resource" do
42
+ authenticated_client.add_developer 'fake-user', 'fake-identifier'
43
+ expect(a_post('api/adddeveloper')).to have_been_made
44
+ end
45
+ end
46
+
47
+ describe "#remove_developer" do
48
+ before do
49
+ stub_empty_post_request('api/removedeveloper')
50
+ end
51
+
52
+ it "requests the correct resource" do
53
+ authenticated_client.remove_developer 'fake-user', 'fake-identifier'
54
+ expect(a_post('api/removedeveloper')).to have_been_made
55
+ end
56
+ end
57
+
58
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe RedditKit::Client::Captcha, :vcr do
4
+
5
+ describe "#needs_captcha?" do
6
+ it "checks if the current account needs a CAPTCHA" do
7
+ authenticated_client.needs_captcha?
8
+ expect(a_get('api/needs_captcha.json')).to have_been_made
9
+ end
10
+ end
11
+
12
+ describe "#new_captcha_identifier" do
13
+ it "returns a new CAPTCHA identifier" do
14
+ identifier = RedditKit.new_captcha_identifier
15
+
16
+ expect(a_post('api/new_captcha')).to have_been_made
17
+ expect(identifier).to be_kind_of String
18
+ end
19
+ end
20
+
21
+ describe "#captcha_url" do
22
+ it "returns a CAPTCHA url from an identifier" do
23
+ identifier = RedditKit.new_captcha_identifier
24
+ captcha_url = RedditKit.captcha_url identifier
25
+
26
+ expect(captcha_url).to eq "http://reddit.com/captcha/#{identifier}.png"
27
+ end
28
+ end
29
+
30
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ describe RedditKit::Client::Comments, :vcr do
4
+
5
+ describe "#comments" do
6
+ context "with a link identifier" do
7
+ it "returns comments on a link" do
8
+ comments = RedditKit.comments '1n002d'
9
+ expect(comments).to_not be_nil
10
+ end
11
+ end
12
+
13
+ context "with a RedditKit::Link" do
14
+ it "returns comments on a link" do
15
+ link = RedditKit.link test_link_full_name
16
+ comments = RedditKit.comments link
17
+ expect(comments).to_not be_nil
18
+ end
19
+ end
20
+ end
21
+
22
+ describe "#comment" do
23
+ it "requests the correct resource" do
24
+ comment = RedditKit.comment test_comment_full_name
25
+ expect(comment).to_not be_nil
26
+ end
27
+ end
28
+
29
+ describe "#submit_comment" do
30
+ it "requests the correct resource" do
31
+ comment = authenticated_client.submit_comment test_link_full_name, 'Comment submission test'
32
+
33
+ expect(a_post('api/comment')).to have_been_made
34
+ expect(comment.text).to eq 'Comment submission test'
35
+
36
+ authenticated_client.delete comment
37
+ end
38
+ end
39
+
40
+ end
@@ -0,0 +1,92 @@
1
+ require 'spec_helper'
2
+
3
+ describe RedditKit::Client::Flair, :vcr do
4
+
5
+ describe "#flair_list" do
6
+ it "returns the list of flair" do
7
+ authenticated_client.flair_list redditkit_subreddit
8
+
9
+ path = subreddit_url redditkit_subreddit, 'api/flairlist.json'
10
+ expect(a_request(:get, path)).to have_been_made
11
+ end
12
+ end
13
+
14
+ describe "#create_flair_template" do
15
+ it "creates a flair template" do
16
+ authenticated_client.create_flair_template redditkit_subreddit, :user, :text => 'Test', :css_class => 'some-class', :user_editable => false
17
+ expect(a_post('api/flairtemplate')).to have_been_made
18
+ end
19
+
20
+ it "raises InvalidClassName" do
21
+ options = { :text => 'Invalid', :css_class => 'some_class!', :user_editable => false }
22
+ expect { authenticated_client.create_flair_template(redditkit_subreddit, :user, options) }.to raise_error RedditKit::InvalidClassName
23
+ end
24
+
25
+ it "raises TooManyClassNames" do
26
+ options = { :text => 'Invalid', :css_class => 'one two three four five six seven eight nine ten eleven', :user_editable => false }
27
+ expect { authenticated_client.create_flair_template(redditkit_subreddit, :user, options) }.to raise_error RedditKit::TooManyClassNames
28
+ end
29
+ end
30
+
31
+ describe "#delete_flair_template" do
32
+ before do
33
+ stub_empty_post_request 'api/deleteflairtemplate'
34
+ end
35
+
36
+ it "deletes a flair template" do
37
+ authenticated_client.delete_flair_template redditkit_subreddit, '12345'
38
+ expect(a_post('api/deleteflairtemplate')).to have_been_made
39
+ end
40
+ end
41
+
42
+ describe "#toggle_flair" do
43
+ it "requests the correct resource" do
44
+ authenticated_client.toggle_flair redditkit_subreddit, true
45
+ expect(a_post('api/setflairenabled')).to have_been_made
46
+ end
47
+ end
48
+
49
+ describe "#set_flair" do
50
+ it "requests the correct resource" do
51
+ authenticated_client.set_flair :subreddit => 'RedditKitTesting', :text => 'Test flair', :css_class => 'testclass', :link => test_link_full_name
52
+ expect(a_post('api/flair')).to have_been_made
53
+ end
54
+ end
55
+
56
+ describe "#set_flair_with_csv" do
57
+ it "requests the correct resource" do
58
+ authenticated_client.set_flair_with_csv redditkit_subreddit, 'samsymons,Test CSV,csvclass'
59
+ expect(a_post('api/flaircsv')).to have_been_made
60
+ end
61
+ end
62
+
63
+ describe "#delete_user_flair" do
64
+ it "requests the correct resource" do
65
+ authenticated_client.delete_user_flair redditkit_subreddit, 'samsymons'
66
+ end
67
+ end
68
+
69
+ describe "#clear_flair_templates" do
70
+ it "clears flair templates" do
71
+ authenticated_client.clear_flair_templates :subreddit => redditkit_subreddit, :type => :user
72
+ expect(a_request(:post, reddit_url('api/clearflairtemplates'))).to have_been_made
73
+ end
74
+ end
75
+
76
+ describe "#apply_flair_template" do
77
+ it "clears flair templates" do
78
+ authenticated_client.apply_flair_template :subreddit => redditkit_subreddit, :template_id => '12345', :link => test_link_full_name
79
+ expect(a_request(:post, reddit_url('api/selectflair'))).to have_been_made
80
+ end
81
+ end
82
+
83
+ describe "#set_flair_options" do
84
+ it "sets flair options" do
85
+ parameters = { flair_enabled: 'true', flair_position: 'right', link_flair_position: 'right', flair_self_assign_enabled: 'true', link_flair_self_assign_enabled: 'true' }
86
+ authenticated_client.set_flair_options redditkit_subreddit, parameters
87
+
88
+ expect(a_request(:post, reddit_url('api/flairconfig'))).to have_been_made
89
+ end
90
+ end
91
+
92
+ end
@@ -0,0 +1,103 @@
1
+ require 'spec_helper'
2
+
3
+ describe RedditKit::Client::Links, :vcr do
4
+
5
+ describe "#front_page" do
6
+ it "requests the correct resource" do
7
+ RedditKit.front_page
8
+ expect(a_get('hot.json')).to have_been_made
9
+ end
10
+
11
+ it "requests the correct category" do
12
+ RedditKit.front_page :category => :rising
13
+ expect(a_get('rising.json')).to have_been_made
14
+ end
15
+ end
16
+
17
+ describe "#links" do
18
+ it "requests front page links if no subreddit is present" do
19
+ RedditKit.links nil
20
+ expect(a_get('hot.json')).to have_been_made
21
+ end
22
+
23
+ it "requests the correct subreddit and category" do
24
+ RedditKit.links 'programming', :category => :hot
25
+ expect(a_get('r/programming/hot.json')).to have_been_made
26
+ end
27
+
28
+ it "requests links with the correct time frame" do
29
+ RedditKit.links 'programming', :category => :top, :time => :year
30
+ expect(a_get('r/programming/top.json?t=year')).to have_been_made
31
+ end
32
+
33
+ it "requests a certain number of links" do
34
+ links = RedditKit.links 'programming', :limit => 10
35
+ expect(links.length).to eq 10
36
+ end
37
+
38
+ it "contains pagination information" do
39
+ links = RedditKit.links 'programming'
40
+
41
+ expect(links.after).to_not be_nil
42
+ expect(links.results).to_not be_empty
43
+ end
44
+ end
45
+
46
+ describe "#link" do
47
+ it "returns a link" do
48
+ link = RedditKit.link "t3_1n002d"
49
+ expect(link).to_not be_nil
50
+ end
51
+ end
52
+
53
+ describe "#links_with_domain" do
54
+ it "returns links with a specific domain" do
55
+ links = RedditKit.links_with_domain "github.com"
56
+ result = links.all? { |link| link.domain == 'github.com' }
57
+
58
+ expect(result).to be_true
59
+ end
60
+ end
61
+
62
+ describe "#submit" do
63
+ it "raises RedditKit::InvalidCaptcha if no CAPTCHA is filled out" do
64
+ expect { authenticated_client.submit 'Test', redditkit_subreddit, :text => 'Test post' }.to raise_error RedditKit::InvalidCaptcha
65
+ end
66
+ end
67
+
68
+ describe "#mark_nsfw" do
69
+ it "requests the correct resource" do
70
+ authenticated_client.mark_nsfw test_link_full_name
71
+ expect(a_post('api/marknsfw')).to have_been_made
72
+ end
73
+ end
74
+
75
+ describe "#unmark_nsfw" do
76
+ it "requests the correct resource" do
77
+ authenticated_client.unmark_nsfw test_link_full_name
78
+ expect(a_post('api/unmarknsfw')).to have_been_made
79
+ end
80
+ end
81
+
82
+ describe "#hide" do
83
+ it "requests the correct resource" do
84
+ authenticated_client.hide test_link_full_name
85
+ expect(a_post('api/hide')).to have_been_made
86
+ end
87
+ end
88
+
89
+ describe "#unhide" do
90
+ it "requests the correct resource" do
91
+ authenticated_client.unhide test_link_full_name
92
+ expect(a_post('api/unhide')).to have_been_made
93
+ end
94
+ end
95
+
96
+ describe "#random_link" do
97
+ it "returns a random link" do
98
+ link = RedditKit.random_link
99
+ expect(link).to_not be_nil
100
+ end
101
+ end
102
+
103
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ describe RedditKit::Client::Miscellaneous, :vcr do
4
+
5
+ describe "#edit" do
6
+ it "requests the correct resource" do
7
+ authenticated_client.edit 'fake-full-name', :text => 'New text'
8
+ expect(a_post('api/editusertext')).to have_been_made
9
+ end
10
+ end
11
+
12
+ describe "#delete" do
13
+ it "requests the correct resource" do
14
+ authenticated_client.delete 'fake-full-name'
15
+ expect(a_post('api/del')).to have_been_made
16
+ end
17
+ end
18
+
19
+ describe "#save" do
20
+ it "saves an object" do
21
+ authenticated_client.save test_link_full_name
22
+ expect(a_post('api/save')).to have_been_made
23
+ end
24
+ end
25
+
26
+ describe "#unsave" do
27
+ it "unsaves an object" do
28
+ authenticated_client.unsave test_link_full_name
29
+ expect(a_post('api/unsave')).to have_been_made
30
+ end
31
+ end
32
+
33
+ describe "#unsave" do
34
+ it "unsaves an object" do
35
+ authenticated_client.report 'fake-full-name'
36
+ expect(a_post('api/report')).to have_been_made
37
+ end
38
+ end
39
+
40
+ end