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,92 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RedditKit::Client::Users, :vcr do
|
4
|
+
|
5
|
+
describe "#user" do
|
6
|
+
it "requests the correct resource" do
|
7
|
+
authenticated_client.user
|
8
|
+
expect(a_request(:get, "#{ RedditKit.api_endpoint }api/me.json")).to have_been_made
|
9
|
+
end
|
10
|
+
|
11
|
+
it "returns a specified user" do
|
12
|
+
user = authenticated_client.user 'amberlynns'
|
13
|
+
expect(user.name).to eq 'amberlynns'
|
14
|
+
end
|
15
|
+
|
16
|
+
it "returns the authenticated user" do
|
17
|
+
user = authenticated_client.user
|
18
|
+
expect(user.name).to eq redditkit_username
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "#my_content" do
|
23
|
+
it "returns the user's content" do
|
24
|
+
content = authenticated_client.my_content :category => :overview
|
25
|
+
expect(content).to_not be_nil
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "#user_content" do
|
30
|
+
it "returns the user's content" do
|
31
|
+
content = RedditKit.user_content redditkit_username, :category => :overview
|
32
|
+
expect(content).to_not be_nil
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "#friends" do
|
37
|
+
it "returns the user's friends" do
|
38
|
+
friends = authenticated_client.friends
|
39
|
+
expect(friends).to_not be_nil
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "#friend" do
|
44
|
+
before do
|
45
|
+
stub_empty_post_request 'api/friend'
|
46
|
+
end
|
47
|
+
|
48
|
+
it "requests the correct resource" do
|
49
|
+
authenticated_client.friend 'username'
|
50
|
+
expect(a_post('api/friend')).to have_been_made
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "#unfriend" do
|
55
|
+
before do
|
56
|
+
stub_empty_post_request 'api/unfriend'
|
57
|
+
end
|
58
|
+
|
59
|
+
it "requests the correct resource" do
|
60
|
+
authenticated_client.unfriend 'username'
|
61
|
+
expect(a_post('api/unfriend')).to have_been_made
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "#username_available?" do
|
66
|
+
it "returns false for an unavailable username" do
|
67
|
+
client = RedditKit::Client.new
|
68
|
+
available = client.username_available? 'samsymons'
|
69
|
+
|
70
|
+
expect(available).to_not be_true
|
71
|
+
end
|
72
|
+
|
73
|
+
it "returns true for an available username" do
|
74
|
+
client = RedditKit::Client.new
|
75
|
+
available = client.username_available? 'available_user'
|
76
|
+
|
77
|
+
expect(available).to be_true
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe "#register" do
|
82
|
+
before do
|
83
|
+
stub_empty_post_request 'api/register'
|
84
|
+
end
|
85
|
+
|
86
|
+
it "requests the correct resource" do
|
87
|
+
RedditKit.register 'username', 'password'
|
88
|
+
expect(a_post('api/register')).to have_been_made
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RedditKit::Client::Voting do
|
4
|
+
|
5
|
+
describe "#upvote", :vcr do
|
6
|
+
context "with a comment full name passed" do
|
7
|
+
it "upvotes the comment" do
|
8
|
+
authenticated_client.upvote test_comment_full_name
|
9
|
+
expect(test_comment.upvoted?).to be_true
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
context "with a link full name passed" do
|
14
|
+
it "upvotes the link" do
|
15
|
+
authenticated_client.upvote test_link_full_name
|
16
|
+
expect(test_link.upvoted?).to be_true
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context "with a comment passed" do
|
21
|
+
it "upvotes the comment" do
|
22
|
+
authenticated_client.upvote test_comment
|
23
|
+
expect(test_comment.upvoted?).to be_true
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context "with a link passed" do
|
28
|
+
it "upvotes the link" do
|
29
|
+
authenticated_client.upvote test_link
|
30
|
+
expect(test_link.upvoted?).to be_true
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "#downvote", :vcr do
|
36
|
+
context "with a comment full name passed" do
|
37
|
+
it "downvotes the comment" do
|
38
|
+
authenticated_client.downvote test_comment_full_name
|
39
|
+
expect(test_comment.downvoted?).to be_true
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context "with a link full name passed" do
|
44
|
+
it "downvotes the link" do
|
45
|
+
authenticated_client.downvote test_link_full_name
|
46
|
+
expect(test_link.downvoted?).to be_true
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context "with a comment passed" do
|
51
|
+
it "downvotes the comment" do
|
52
|
+
authenticated_client.downvote test_comment
|
53
|
+
expect(test_comment.downvoted?).to be_true
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context "with a link passed" do
|
58
|
+
it "downvotes the link" do
|
59
|
+
authenticated_client.downvote test_link
|
60
|
+
expect(test_link.downvoted?).to be_true
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "#withdraw_vote", :vcr do
|
66
|
+
context "with a comment full name passed" do
|
67
|
+
it "withdraws the vote on the comment" do
|
68
|
+
authenticated_client.withdraw_vote test_comment_full_name
|
69
|
+
expect(test_comment.upvoted?).to_not be_true
|
70
|
+
expect(test_comment.downvoted?).to_not be_true
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context "with a link full name passed" do
|
75
|
+
it "withdraws the vote on the link" do
|
76
|
+
authenticated_client.withdraw_vote test_link_full_name
|
77
|
+
expect(test_link.upvoted?).to_not be_true
|
78
|
+
expect(test_link.downvoted?).to_not be_true
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context "with a comment passed" do
|
83
|
+
it "withdraws the vote on the comment" do
|
84
|
+
authenticated_client.withdraw_vote test_comment
|
85
|
+
expect(test_comment.upvoted?).to_not be_true
|
86
|
+
expect(test_comment.downvoted?).to_not be_true
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context "with a link passed" do
|
91
|
+
it "withdraws the vote on the link" do
|
92
|
+
authenticated_client.withdraw_vote test_link
|
93
|
+
expect(test_link.upvoted?).to_not be_true
|
94
|
+
expect(test_link.downvoted?).to_not be_true
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RedditKit::Client::Wiki, :vcr do
|
4
|
+
|
5
|
+
describe "#add_wiki_editor" do
|
6
|
+
it "requests the correct resource" do
|
7
|
+
authenticated_client.add_wiki_editor redditkit_subreddit, 'samsymons', 'some page'
|
8
|
+
expect(a_post("r/#{redditkit_subreddit}/api/wiki/alloweditor/add")).to have_been_made
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "#remove_wiki_editor" do
|
13
|
+
it "requests the correct resource" do
|
14
|
+
authenticated_client.remove_wiki_editor redditkit_subreddit, 'samsymons', 'some page'
|
15
|
+
expect(a_post("r/#{redditkit_subreddit}/api/wiki/alloweditor/del")).to have_been_made
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#edit_wiki_page" do
|
20
|
+
it "requests the correct resource" do
|
21
|
+
authenticated_client.edit_wiki_page :subreddit => redditkit_subreddit, :page => 'fake-page', :revision => '12345'
|
22
|
+
expect(a_post("r/#{redditkit_subreddit}/api/wiki/edit")).to have_been_made
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "#hide_wiki_revision" do
|
27
|
+
it "requests the correct resource" do
|
28
|
+
authenticated_client.hide_wiki_revision :subreddit => redditkit_subreddit, :page => 'fake-page', :revision => '12345'
|
29
|
+
expect(a_post("r/#{redditkit_subreddit}/api/wiki/hide")).to have_been_made
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "#revert_to_revision" do
|
34
|
+
it "requests the correct resource" do
|
35
|
+
authenticated_client.revert_to_revision :subreddit => redditkit_subreddit, :page => 'fake-page', :revision => '12345'
|
36
|
+
expect(a_post("r/#{redditkit_subreddit}/api/wiki/revert")).to have_been_made
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RedditKit::Client, :vcr do
|
4
|
+
|
5
|
+
it "can retrieve default options" do
|
6
|
+
expect(RedditKit.api_endpoint).to eq 'http://www.reddit.com/'
|
7
|
+
expect(RedditKit.user_agent).to eq "RedditKit.rb #{RedditKit::Version}"
|
8
|
+
end
|
9
|
+
|
10
|
+
it "can configure options" do
|
11
|
+
client = RedditKit::Client.new
|
12
|
+
client.api_endpoint = "http://github.com/"
|
13
|
+
|
14
|
+
expect(client.api_endpoint).to eq "http://github.com/"
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should have a modhash and cookie after signing in" do
|
18
|
+
expect(authenticated_client.modhash).to_not be_nil
|
19
|
+
expect(authenticated_client.cookie).to_not be_nil
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should raise an error with invalid credentials" do
|
23
|
+
client = RedditKit::Client.new
|
24
|
+
expect { client.sign_in "samsymons", "hunter2" }.to raise_error RedditKit::InvalidCredentials
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should tell us whether it is signed in", :authenticated do
|
28
|
+
client = authenticated_client
|
29
|
+
|
30
|
+
expect(client.signed_in?).to be_true
|
31
|
+
client.sign_out
|
32
|
+
expect(client.signed_in?).to_not be_true
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should be able to sign out", :authenticated do
|
36
|
+
client = authenticated_client
|
37
|
+
|
38
|
+
expect(client.modhash).to_not be_nil
|
39
|
+
expect(client.cookie).to_not be_nil
|
40
|
+
|
41
|
+
client.sign_out
|
42
|
+
|
43
|
+
expect(client.modhash).to be_nil
|
44
|
+
expect(client.cookie).to be_nil
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RedditKit::Comment, :vcr do
|
4
|
+
|
5
|
+
it "should return replies" do
|
6
|
+
comments = RedditKit.comments '1n002d'
|
7
|
+
comment = comments.first
|
8
|
+
|
9
|
+
expect(comment.replies?).to be_true
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should be deleted if both author and comment attributes are set to '[deleted]'" do
|
13
|
+
attributes = { :data => { :author => '[deleted]', :body => '[deleted]' } }
|
14
|
+
deleted_comment = RedditKit::Comment.new attributes
|
15
|
+
|
16
|
+
expect(deleted_comment.deleted?).to be_true
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should not be deleted if neither author and comment attributes are set to '[deleted]'" do
|
20
|
+
comments = RedditKit.comments '1n002d'
|
21
|
+
comment = comments.first
|
22
|
+
|
23
|
+
expect(comment.deleted?).to_not be_true
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RedditKit::Creatable do
|
4
|
+
|
5
|
+
class CreatableClass
|
6
|
+
def initialize
|
7
|
+
@time = Time.new(2000)
|
8
|
+
@attributes = { :created_utc => @time.to_i }
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
before :all do
|
13
|
+
@creatable = CreatableClass.new
|
14
|
+
@creatable.extend RedditKit::Creatable
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "#created_at" do
|
18
|
+
it "returns the time the object was created at" do
|
19
|
+
created_at = @creatable.created_at
|
20
|
+
expect(created_at.year).to eq 2000
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RedditKit::Error do
|
4
|
+
|
5
|
+
describe "#from_status_code_and_body" do
|
6
|
+
|
7
|
+
it "returns no error for a valid body" do
|
8
|
+
error = RedditKit::Error.from_status_code_and_body(200, {})
|
9
|
+
expect(error).to be_nil
|
10
|
+
end
|
11
|
+
|
12
|
+
it "returns RedditKit::AuthenticationRequired for the USER_REQUIRED error" do
|
13
|
+
body = { :jquery => "USER_REQUIRED" }
|
14
|
+
error = RedditKit::Error.from_status_code_and_body(200, body)
|
15
|
+
expect(error).to eq RedditKit::AuthenticationRequired
|
16
|
+
end
|
17
|
+
|
18
|
+
it "returns RedditKit::AuthenticationRequired for the RATELIMIT error" do
|
19
|
+
body = { :jquery => "RATELIMIT" }
|
20
|
+
error = RedditKit::Error.from_status_code_and_body(200, body)
|
21
|
+
expect(error).to eq RedditKit::RateLimited
|
22
|
+
end
|
23
|
+
|
24
|
+
it "returns RedditKit::Archived for the TOO_OLD error" do
|
25
|
+
body = { :jquery => "TOO_OLD" }
|
26
|
+
error = RedditKit::Error.from_status_code_and_body(200, body)
|
27
|
+
expect(error).to eq RedditKit::Archived
|
28
|
+
end
|
29
|
+
|
30
|
+
it "returns RedditKit::PermissionDenied for status code 403" do
|
31
|
+
body = { :jquery => "ERROR" }
|
32
|
+
error = RedditKit::Error.from_status_code_and_body(403, body)
|
33
|
+
expect(error).to eq RedditKit::PermissionDenied
|
34
|
+
end
|
35
|
+
|
36
|
+
it "returns RedditKit::Conflict for status code 409" do
|
37
|
+
body = { :jquery => "ERROR" }
|
38
|
+
error = RedditKit::Error.from_status_code_and_body(409, body)
|
39
|
+
expect(error).to eq RedditKit::Conflict
|
40
|
+
end
|
41
|
+
|
42
|
+
it "returns RedditKit::InternalServerError for status code 500" do
|
43
|
+
body = { :jquery => "ERROR" }
|
44
|
+
error = RedditKit::Error.from_status_code_and_body(500, body)
|
45
|
+
expect(error).to eq RedditKit::InternalServerError
|
46
|
+
end
|
47
|
+
|
48
|
+
it "returns RedditKit::BadGateway for status code 502" do
|
49
|
+
body = { :jquery => "ERROR" }
|
50
|
+
error = RedditKit::Error.from_status_code_and_body(502, body)
|
51
|
+
expect(error).to eq RedditKit::BadGateway
|
52
|
+
end
|
53
|
+
|
54
|
+
it "returns RedditKit::ServiceUnavailable for status code 503" do
|
55
|
+
body = { :jquery => "ERROR" }
|
56
|
+
error = RedditKit::Error.from_status_code_and_body(503, body)
|
57
|
+
expect(error).to eq RedditKit::ServiceUnavailable
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RedditKit::Link do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
attributes = { :data => { :id => '12345', :url => 'http://example.com/test.png', :permalink => 'permalink', :created_utc => Time.now.to_i } }
|
7
|
+
@link = RedditKit::Link.new attributes
|
8
|
+
|
9
|
+
old_link_attributes = { :data => { :id => '12345', :url => 'http://example.com/test.png', :created_utc => Time.new(2000, 1, 1).to_i } }
|
10
|
+
@old_link = RedditKit::Link.new old_link_attributes
|
11
|
+
end
|
12
|
+
|
13
|
+
it "does not show the score for new links" do
|
14
|
+
expect(@link.showing_link_score?).to be_false
|
15
|
+
end
|
16
|
+
|
17
|
+
it "shows the score for old links" do
|
18
|
+
expect(@old_link.showing_link_score?).to be_true
|
19
|
+
end
|
20
|
+
|
21
|
+
it "determines whether the link has an image extension" do
|
22
|
+
expect(@link.image_link?).to be_true
|
23
|
+
end
|
24
|
+
|
25
|
+
it "returns the link's permalink" do
|
26
|
+
expect(@link.permalink).to eq 'http://reddit.com/permalink'
|
27
|
+
end
|
28
|
+
|
29
|
+
it "returns the link's short URL" do
|
30
|
+
expect(@link.short_link).to eq 'http://redd.it/12345'
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RedditKit::Multireddit do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
subreddits = []
|
7
|
+
subreddits << { :name => 'test1' }
|
8
|
+
subreddits << { :name => 'test2' }
|
9
|
+
subreddits << { :name => 'test3' }
|
10
|
+
|
11
|
+
attributes = { :data => { :id => '12345', :path => '/user/username/m/test', :subreddits => subreddits } }
|
12
|
+
@multireddit = RedditKit::Multireddit.new attributes
|
13
|
+
end
|
14
|
+
|
15
|
+
it "returns the multireddit's subreddits" do
|
16
|
+
subreddits = @multireddit.subreddits
|
17
|
+
result = subreddits.all? { |subreddit| subreddit.is_a? String }
|
18
|
+
|
19
|
+
expect(subreddits.length).to eq 3
|
20
|
+
expect(result).to be_true
|
21
|
+
end
|
22
|
+
|
23
|
+
it "returns the username of the multireddit's owner" do
|
24
|
+
expect(@multireddit.username).to eq 'username'
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|