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.
- checksums.yaml +7 -0
- data/LICENSE.md +22 -0
- data/README.md +155 -0
- data/Rakefile +8 -0
- data/lib/redditkit.rb +26 -0
- data/lib/redditkit/base.rb +60 -0
- data/lib/redditkit/client.rb +142 -0
- data/lib/redditkit/client/account.rb +73 -0
- data/lib/redditkit/client/apps.rb +63 -0
- data/lib/redditkit/client/captcha.rb +36 -0
- data/lib/redditkit/client/comments.rb +54 -0
- data/lib/redditkit/client/flair.rb +148 -0
- data/lib/redditkit/client/links.rb +134 -0
- data/lib/redditkit/client/miscellaneous.rb +50 -0
- data/lib/redditkit/client/moderation.rb +179 -0
- data/lib/redditkit/client/multireddits.rb +207 -0
- data/lib/redditkit/client/private_messages.rb +74 -0
- data/lib/redditkit/client/search.rb +25 -0
- data/lib/redditkit/client/subreddits.rb +120 -0
- data/lib/redditkit/client/users.rb +109 -0
- data/lib/redditkit/client/utilities.rb +137 -0
- data/lib/redditkit/client/voting.rb +41 -0
- data/lib/redditkit/client/wiki.rb +83 -0
- data/lib/redditkit/comment.rb +54 -0
- data/lib/redditkit/creatable.rb +17 -0
- data/lib/redditkit/error.rb +111 -0
- data/lib/redditkit/link.rb +140 -0
- data/lib/redditkit/moderator_action.rb +19 -0
- data/lib/redditkit/multireddit.rb +32 -0
- data/lib/redditkit/multireddit_description.rb +14 -0
- data/lib/redditkit/paginated_response.rb +22 -0
- data/lib/redditkit/private_message.rb +27 -0
- data/lib/redditkit/response/parse_json.rb +29 -0
- data/lib/redditkit/response/raise_error.rb +21 -0
- data/lib/redditkit/subreddit.rb +86 -0
- data/lib/redditkit/thing.rb +20 -0
- data/lib/redditkit/user.rb +30 -0
- data/lib/redditkit/version.rb +19 -0
- data/lib/redditkit/votable.rb +37 -0
- data/redditkit.gemspec +25 -0
- data/spec/cassettes/RedditKit_Client/should_raise_an_error_with_invalid_credentials.yml +39 -0
- data/spec/cassettes/RedditKit_Client_Account/_sign_in/signs_the_user_in.yml +132 -0
- data/spec/cassettes/RedditKit_Client_Account/_update_session/updates_the_current_session.yml +133 -0
- data/spec/cassettes/RedditKit_Client_Captcha/_captcha_url/returns_a_CAPTCHA_url_from_an_identifier.yml +38 -0
- data/spec/cassettes/RedditKit_Client_Captcha/_needs_captcha_/checks_if_the_current_account_needs_a_CAPTCHA.yml +44 -0
- data/spec/cassettes/RedditKit_Client_Captcha/_new_captcha_identifier/returns_a_new_CAPTCHA_identifier.yml +38 -0
- data/spec/cassettes/RedditKit_Client_Comments/_comment/requests_the_correct_resource.yml +47 -0
- data/spec/cassettes/RedditKit_Client_Comments/_comments/with_a_RedditKit_Link/returns_comments_on_a_link.yml +140 -0
- data/spec/cassettes/RedditKit_Client_Comments/_comments/with_a_link_identifier/returns_comments_on_a_link.yml +89 -0
- data/spec/cassettes/RedditKit_Client_Comments/_submit_comment/requests_the_correct_resource.yml +313 -0
- data/spec/cassettes/RedditKit_Client_Flair/_apply_flair_template/clears_flair_templates.yml +52 -0
- data/spec/cassettes/RedditKit_Client_Flair/_clear_flair_templates/clears_flair_templates.yml +49 -0
- data/spec/cassettes/RedditKit_Client_Flair/_create_flair_template/creates_a_flair_template.yml +46 -0
- data/spec/cassettes/RedditKit_Client_Flair/_create_flair_template/raises_InvalidClassName.yml +46 -0
- data/spec/cassettes/RedditKit_Client_Flair/_create_flair_template/raises_TooManyClassNames.yml +47 -0
- data/spec/cassettes/RedditKit_Client_Flair/_delete_user_flair/requests_the_correct_resource.yml +60 -0
- data/spec/cassettes/RedditKit_Client_Flair/_flair_list/returns_the_list_of_flair.yml +44 -0
- data/spec/cassettes/RedditKit_Client_Flair/_set_flair/requests_the_correct_resource.yml +49 -0
- data/spec/cassettes/RedditKit_Client_Flair/_set_flair_options/sets_flair_options.yml +49 -0
- data/spec/cassettes/RedditKit_Client_Flair/_set_flair_with_csv/requests_the_correct_resource.yml +51 -0
- data/spec/cassettes/RedditKit_Client_Flair/_toggle_flair/requests_the_correct_resource.yml +49 -0
- data/spec/cassettes/RedditKit_Client_Links/_front_page/requests_the_correct_category.yml +498 -0
- data/spec/cassettes/RedditKit_Client_Links/_front_page/requests_the_correct_resource.yml +603 -0
- data/spec/cassettes/RedditKit_Client_Links/_hide/requests_the_correct_resource.yml +46 -0
- data/spec/cassettes/RedditKit_Client_Links/_link/returns_a_link.yml +55 -0
- data/spec/cassettes/RedditKit_Client_Links/_links/contains_pagination_information.yml +402 -0
- data/spec/cassettes/RedditKit_Client_Links/_links/requests_a_certain_number_of_links.yml +186 -0
- data/spec/cassettes/RedditKit_Client_Links/_links/requests_front_page_links_if_no_subreddit_is_present.yml +603 -0
- data/spec/cassettes/RedditKit_Client_Links/_links/requests_links_with_the_correct_time_frame.yml +375 -0
- data/spec/cassettes/RedditKit_Client_Links/_links/requests_the_correct_subreddit_and_category.yml +402 -0
- data/spec/cassettes/RedditKit_Client_Links/_links_with_domain/returns_links_with_a_specific_domain.yml +99 -0
- data/spec/cassettes/RedditKit_Client_Links/_mark_nsfw/requests_the_correct_resource.yml +46 -0
- data/spec/cassettes/RedditKit_Client_Links/_random_link/returns_a_random_link.yml +91 -0
- data/spec/cassettes/RedditKit_Client_Links/_submit/raises_RedditKit_InvalidCaptcha_if_no_CAPTCHA_is_filled_out.yml +54 -0
- data/spec/cassettes/RedditKit_Client_Links/_unhide/requests_the_correct_resource.yml +46 -0
- data/spec/cassettes/RedditKit_Client_Links/_unmark_nsfw/requests_the_correct_resource.yml +46 -0
- data/spec/cassettes/RedditKit_Client_Miscellaneous/_delete/requests_the_correct_resource.yml +46 -0
- data/spec/cassettes/RedditKit_Client_Miscellaneous/_edit/requests_the_correct_resource.yml +52 -0
- data/spec/cassettes/RedditKit_Client_Miscellaneous/_save/saves_an_object.yml +46 -0
- data/spec/cassettes/RedditKit_Client_Miscellaneous/_unsave/unsaves_an_object.yml +89 -0
- data/spec/cassettes/RedditKit_Client_Moderation/_accept_moderator_invitation/requests_the_correct_resource.yml +53 -0
- data/spec/cassettes/RedditKit_Client_Moderation/_ban/requests_the_correct_resource.yml +103 -0
- data/spec/cassettes/RedditKit_Client_Moderation/_contributors_to_subreddit/requests_the_correct_resource.yml +47 -0
- data/spec/cassettes/RedditKit_Client_Moderation/_ignore_reports/requests_the_correct_resource.yml +46 -0
- data/spec/cassettes/RedditKit_Client_Moderation/_moderation_log/returns_RedditKit_ModeratorAction_objects.yml +153 -0
- data/spec/cassettes/RedditKit_Client_Moderation/_moderators_of_subreddit/requests_the_correct_resource.yml +48 -0
- data/spec/cassettes/RedditKit_Client_Moderation/_reset_subreddit_header/requests_the_correct_resource.yml +55 -0
- data/spec/cassettes/RedditKit_Client_Moderation/_set_contest_mode/requests_the_correct_resource.yml +46 -0
- data/spec/cassettes/RedditKit_Client_Moderation/_set_sticky_post/requests_the_correct_resource.yml +46 -0
- data/spec/cassettes/RedditKit_Client_Moderation/_unban/requests_the_correct_resource.yml +54 -0
- data/spec/cassettes/RedditKit_Client_Moderation/_unignore_reports/requests_the_correct_resource.yml +46 -0
- data/spec/cassettes/RedditKit_Client_Multireddits/_add_subreddit_to_multireddit/adds_a_subreddit_to_a_multireddit.yml +177 -0
- data/spec/cassettes/RedditKit_Client_Multireddits/_create_multireddit/creates_a_multireddit.yml +137 -0
- data/spec/cassettes/RedditKit_Client_Multireddits/_create_multireddit/raises_RedditKit_Conflict_when_using_an_existing_name.yml +133 -0
- data/spec/cassettes/RedditKit_Client_Multireddits/_delete_multireddit/deletes_a_multireddit.yml +134 -0
- data/spec/cassettes/RedditKit_Client_Multireddits/_multireddit/with_a_path/returns_a_multireddit.yml +39 -0
- data/spec/cassettes/RedditKit_Client_Multireddits/_multireddit/without_a_path/returns_a_multireddit.yml +39 -0
- data/spec/cassettes/RedditKit_Client_Multireddits/_multireddit_description/with_a_multireddit/returns_a_multireddit_description.yml +81 -0
- data/spec/cassettes/RedditKit_Client_Multireddits/_multireddit_description/with_a_username_and_multireddit_name/returns_a_multireddit_description.yml +45 -0
- data/spec/cassettes/RedditKit_Client_Multireddits/_my_multireddits/return_s_the_user_s_multireddits.yml +47 -0
- data/spec/cassettes/RedditKit_Client_Multireddits/_remove_subreddit_from_multireddit/removes_a_subreddit_from_a_multireddit.yml +175 -0
- data/spec/cassettes/RedditKit_Client_Multireddits/_rename_multireddit/renames_a_multireddit.yml +134 -0
- data/spec/cassettes/RedditKit_Client_Multireddits/_set_multireddit_description/returns_a_multireddit_description.yml +48 -0
- data/spec/cassettes/RedditKit_Client_Multireddits/_update_multireddit/updates_a_multireddit.yml +184 -0
- data/spec/cassettes/RedditKit_Client_PrivateMessages/_block_author_of_message/requests_the_correct_resource.yml +46 -0
- data/spec/cassettes/RedditKit_Client_PrivateMessages/_mark_as_read/requests_the_correct_resource.yml +51 -0
- data/spec/cassettes/RedditKit_Client_PrivateMessages/_mark_as_unread/requests_the_correct_resource.yml +51 -0
- data/spec/cassettes/RedditKit_Client_PrivateMessages/_messages/requests_the_correct_resource.yml +187 -0
- data/spec/cassettes/RedditKit_Client_PrivateMessages/_unblock/requests_the_correct_resource.yml +46 -0
- data/spec/cassettes/RedditKit_Client_Search/_search/restricts_searches_to_a_specific_subreddit.yml +878 -0
- data/spec/cassettes/RedditKit_Client_Search/_search/returns_a_specific_number_of_results.yml +130 -0
- data/spec/cassettes/RedditKit_Client_Search/_search/returns_search_results.yml +844 -0
- data/spec/cassettes/RedditKit_Client_Subreddits/_random_subreddit/returns_a_random_subreddit.yml +181 -0
- data/spec/cassettes/RedditKit_Client_Subreddits/_recommended_subreddits/returns_subreddit_names.yml +37 -0
- data/spec/cassettes/RedditKit_Client_Subreddits/_search_subreddits_by_name/returns_subreddit_names.yml +875 -0
- data/spec/cassettes/RedditKit_Client_Subreddits/_subreddit/returns_a_specified_subreddit.yml +100 -0
- data/spec/cassettes/RedditKit_Client_Subreddits/_subreddits/returns_a_specified_number_of_subreddits.yml +505 -0
- data/spec/cassettes/RedditKit_Client_Subreddits/_subreddits/returns_subreddits_from_a_specific_category.yml +510 -0
- data/spec/cassettes/RedditKit_Client_Subreddits/_subreddits_by_topic/returns_subreddit_names.yml +41 -0
- data/spec/cassettes/RedditKit_Client_Subreddits/_subscribe/requests_the_correct_resource.yml +46 -0
- data/spec/cassettes/RedditKit_Client_Subreddits/_subscribed_subreddits/returns_a_specified_number_of_subreddits.yml +415 -0
- data/spec/cassettes/RedditKit_Client_Subreddits/_subscribed_subreddits/returns_subreddits_from_a_specific_category.yml +58 -0
- data/spec/cassettes/RedditKit_Client_Subreddits/_subscribed_subreddits/returns_the_user_s_subscribed_subreddits.yml +3469 -0
- data/spec/cassettes/RedditKit_Client_Subreddits/_unsubscribe/requests_the_correct_resource.yml +46 -0
- data/spec/cassettes/RedditKit_Client_Users/_friends/returns_the_user_s_friends.yml +48 -0
- data/spec/cassettes/RedditKit_Client_Users/_my_content/returns_the_user_s_content.yml +60 -0
- data/spec/cassettes/RedditKit_Client_Users/_user/requests_the_correct_resource.yml +48 -0
- data/spec/cassettes/RedditKit_Client_Users/_user/returns_a_specified_user.yml +48 -0
- data/spec/cassettes/RedditKit_Client_Users/_user/returns_the_authenticated_user.yml +48 -0
- data/spec/cassettes/RedditKit_Client_Users/_user_content/returns_the_user_s_content.yml +41 -0
- data/spec/cassettes/RedditKit_Client_Users/_username_available_/returns_false_for_an_unavailable_username.yml +36 -0
- data/spec/cassettes/RedditKit_Client_Users/_username_available_/returns_true_for_an_available_username.yml +36 -0
- data/spec/cassettes/RedditKit_Client_Voting/_downvote/with_a_comment_full_name_passed/downvotes_the_comment.yml +100 -0
- data/spec/cassettes/RedditKit_Client_Voting/_downvote/with_a_comment_passed/downvotes_the_comment.yml +154 -0
- data/spec/cassettes/RedditKit_Client_Voting/_downvote/with_a_link_full_name_passed/downvotes_the_link.yml +106 -0
- data/spec/cassettes/RedditKit_Client_Voting/_downvote/with_a_link_passed/downvotes_the_link.yml +166 -0
- data/spec/cassettes/RedditKit_Client_Voting/_upvote/with_a_comment_full_name_passed/upvotes_the_comment.yml +100 -0
- data/spec/cassettes/RedditKit_Client_Voting/_upvote/with_a_comment_passed/upvotes_the_comment.yml +154 -0
- data/spec/cassettes/RedditKit_Client_Voting/_upvote/with_a_link_full_name_passed/upvotes_the_link.yml +106 -0
- data/spec/cassettes/RedditKit_Client_Voting/_upvote/with_a_link_passed/upvotes_the_link.yml +166 -0
- data/spec/cassettes/RedditKit_Client_Voting/_withdraw_vote/with_a_comment_full_name_passed/withdraws_the_vote_on_the_comment.yml +154 -0
- data/spec/cassettes/RedditKit_Client_Voting/_withdraw_vote/with_a_comment_passed/withdraws_the_vote_on_the_comment.yml +208 -0
- data/spec/cassettes/RedditKit_Client_Voting/_withdraw_vote/with_a_link_full_name_passed/withdraws_the_vote_on_the_link.yml +166 -0
- data/spec/cassettes/RedditKit_Client_Voting/_withdraw_vote/with_a_link_passed/withdraws_the_vote_on_the_link.yml +226 -0
- data/spec/cassettes/RedditKit_Client_Wiki/_add_wiki_editor/requests_the_correct_resource.yml +46 -0
- data/spec/cassettes/RedditKit_Client_Wiki/_edit_wiki_page/requests_the_correct_resource.yml +48 -0
- data/spec/cassettes/RedditKit_Client_Wiki/_hide_wiki_revision/requests_the_correct_resource.yml +46 -0
- data/spec/cassettes/RedditKit_Client_Wiki/_remove_wiki_editor/requests_the_correct_resource.yml +46 -0
- data/spec/cassettes/RedditKit_Client_Wiki/_revert_to_revision/requests_the_correct_resource.yml +46 -0
- data/spec/cassettes/RedditKit_Comment/should_not_be_deleted_if_neither_author_and_comment_attributes_are_set_to_deleted_.yml +90 -0
- data/spec/cassettes/RedditKit_Comment/should_return_replies.yml +90 -0
- data/spec/cassettes/authenticated_client.yml +87 -0
- data/spec/redditkit/base_spec.rb +45 -0
- data/spec/redditkit/client/account_spec.rb +50 -0
- data/spec/redditkit/client/apps_spec.rb +58 -0
- data/spec/redditkit/client/captcha_spec.rb +30 -0
- data/spec/redditkit/client/comments_spec.rb +40 -0
- data/spec/redditkit/client/flair_spec.rb +92 -0
- data/spec/redditkit/client/links_spec.rb +103 -0
- data/spec/redditkit/client/miscellaneous_spec.rb +40 -0
- data/spec/redditkit/client/moderation_spec.rb +141 -0
- data/spec/redditkit/client/multireddits_spec.rb +158 -0
- data/spec/redditkit/client/private_messages_spec.rb +51 -0
- data/spec/redditkit/client/search_spec.rb +25 -0
- data/spec/redditkit/client/subreddits_spec.rb +83 -0
- data/spec/redditkit/client/users_spec.rb +92 -0
- data/spec/redditkit/client/voting_spec.rb +99 -0
- data/spec/redditkit/client/wiki_spec.rb +40 -0
- data/spec/redditkit/client_spec.rb +46 -0
- data/spec/redditkit/comment_spec.rb +26 -0
- data/spec/redditkit/creatable_spec.rb +24 -0
- data/spec/redditkit/error_spec.rb +61 -0
- data/spec/redditkit/link_spec.rb +33 -0
- data/spec/redditkit/multireddit_spec.rb +27 -0
- data/spec/redditkit/paginated_response_spec.rb +23 -0
- data/spec/redditkit/thing_spec.rb +18 -0
- data/spec/redditkit/votable_spec.rb +52 -0
- data/spec/redditkit_spec.rb +21 -0
- data/spec/spec_helper.rb +124 -0
- 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
|