require 'helper' describe Twitter::REST::API::Users do before do @client = Twitter::REST::Client.new(:consumer_key => "CK", :consumer_secret => "CS", :access_token => "AT", :access_token_secret => "AS") end describe "#settings" do before do stub_get("/1.1/account/settings.json").to_return(:body => fixture("settings.json"), :headers => {:content_type => "application/json; charset=utf-8"}) stub_post("/1.1/account/settings.json").with(:body => {:trend_location_woeid => "23424803"}).to_return(:body => fixture("settings.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource on GET" do @client.settings expect(a_get("/1.1/account/settings.json")).to have_been_made end it "returns settings" do settings = @client.settings expect(settings).to be_a Twitter::Settings expect(settings.language).to eq("en") end it "requests the correct resource on POST" do @client.settings(:trend_location_woeid => "23424803") expect(a_post("/1.1/account/settings.json").with(:body => {:trend_location_woeid => "23424803"})).to have_been_made end it "returns settings" do settings = @client.settings(:trend_location_woeid => "23424803") expect(settings).to be_a Twitter::Settings expect(settings.language).to eq("en") end end describe "#verify_credentials" do before do stub_get("/1.1/account/verify_credentials.json").to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.verify_credentials expect(a_get("/1.1/account/verify_credentials.json")).to have_been_made end it "returns the requesting user" do user = @client.verify_credentials expect(user).to be_a Twitter::User expect(user.id).to eq(7505382) end end describe "#update_delivery_device" do before do stub_post("/1.1/account/update_delivery_device.json").with(:body => {:device => "sms"}).to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.update_delivery_device("sms") expect(a_post("/1.1/account/update_delivery_device.json").with(:body => {:device => "sms"})).to have_been_made end it "returns a user" do user = @client.update_delivery_device("sms") expect(user).to be_a Twitter::User expect(user.id).to eq(7505382) end end describe "#update_profile" do before do stub_post("/1.1/account/update_profile.json").with(:body => {:url => "http://github.com/sferik/"}).to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.update_profile(:url => "http://github.com/sferik/") expect(a_post("/1.1/account/update_profile.json").with(:body => {:url => "http://github.com/sferik/"})).to have_been_made end it "returns a user" do user = @client.update_profile(:url => "http://github.com/sferik/") expect(user).to be_a Twitter::User expect(user.id).to eq(7505382) end end describe "#update_profile_background_image" do before do stub_post("/1.1/account/update_profile_background_image.json").to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.update_profile_background_image(fixture("we_concept_bg2.png")) expect(a_post("/1.1/account/update_profile_background_image.json")).to have_been_made end it "returns a user" do user = @client.update_profile_background_image(fixture("we_concept_bg2.png")) expect(user).to be_a Twitter::User expect(user.id).to eq(7505382) end end describe "#update_profile_colors" do before do stub_post("/1.1/account/update_profile_colors.json").with(:body => {:profile_background_color => "000000"}).to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.update_profile_colors(:profile_background_color => "000000") expect(a_post("/1.1/account/update_profile_colors.json").with(:body => {:profile_background_color => "000000"})).to have_been_made end it "returns a user" do user = @client.update_profile_colors(:profile_background_color => "000000") expect(user).to be_a Twitter::User expect(user.id).to eq(7505382) end end describe "#update_profile_image" do before do stub_post("/1.1/account/update_profile_image.json").to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.update_profile_image(fixture("me.jpeg")) expect(a_post("/1.1/account/update_profile_image.json")).to have_been_made end it "returns a user" do user = @client.update_profile_image(fixture("me.jpeg")) expect(user).to be_a Twitter::User expect(user.id).to eq(7505382) end end describe "#suggestions" do context "with a category slug passed" do before do stub_get("/1.1/users/suggestions/art-design.json").to_return(:body => fixture("category.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.suggestions("art-design") expect(a_get("/1.1/users/suggestions/art-design.json")).to have_been_made end it "returns the users in a given category of the Twitter suggested user list" do suggestion = @client.suggestions("art-design") expect(suggestion).to be_a Twitter::Suggestion expect(suggestion.name).to eq("Art & Design") expect(suggestion.users).to be_an Array expect(suggestion.users.first).to be_a Twitter::User end end context "without arguments passed" do before do stub_get("/1.1/users/suggestions.json").to_return(:body => fixture("suggestions.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.suggestions expect(a_get("/1.1/users/suggestions.json")).to have_been_made end it "returns the list of suggested user categories" do suggestions = @client.suggestions expect(suggestions).to be_an Array expect(suggestions.first).to be_a Twitter::Suggestion expect(suggestions.first.name).to eq("Art & Design") end end end describe "#suggest_users" do before do stub_get("/1.1/users/suggestions/art-design/members.json").to_return(:body => fixture("members.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.suggest_users("art-design") expect(a_get("/1.1/users/suggestions/art-design/members.json")).to have_been_made end it "returns users in a given category of the Twitter suggested user list and return their most recent status if they are not a protected user" do suggest_users = @client.suggest_users("art-design") expect(suggest_users).to be_an Array expect(suggest_users.first).to be_a Twitter::User expect(suggest_users.first.id).to eq(13) end end describe "#blocking" do before do stub_get("/1.1/blocks/list.json").with(:query => {:cursor => "-1"}).to_return(:body => fixture("users_list.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.blocking expect(a_get("/1.1/blocks/list.json").with(:query => {:cursor => "-1"})).to have_been_made end it "returns an array of user objects that the authenticating user is blocking" do blocking = @client.blocking expect(blocking).to be_a Twitter::Cursor expect(blocking.first).to be_a Twitter::User expect(blocking.first.id).to eq(7505382) end context "with each" do before do stub_get("/1.1/blocks/list.json").with(:query => {:cursor => "1322801608223717003"}).to_return(:body => fixture("users_list2.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.blocking.each{} expect(a_get("/1.1/blocks/list.json").with(:query => {:cursor => "-1"})).to have_been_made expect(a_get("/1.1/blocks/list.json").with(:query => {:cursor => "1322801608223717003"})).to have_been_made end end end describe "#blocked_ids" do before do stub_get("/1.1/blocks/ids.json").with(:query => {:cursor => "-1"}).to_return(:body => fixture("ids_list.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.blocked_ids expect(a_get("/1.1/blocks/ids.json").with(:query => {:cursor => "-1"})).to have_been_made end it "returns an array of numeric user IDs the authenticating user is blocking" do blocked_ids = @client.blocked_ids expect(blocked_ids).to be_a Twitter::Cursor expect(blocked_ids.first).to eq(20009713) end context "with each" do before do stub_get("/1.1/blocks/ids.json").with(:query => {:cursor => "1305102810874389703"}).to_return(:body => fixture("ids_list2.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.blocked_ids.each{} expect(a_get("/1.1/blocks/ids.json").with(:query => {:cursor => "-1"})).to have_been_made expect(a_get("/1.1/blocks/ids.json").with(:query => {:cursor => "1305102810874389703"})).to have_been_made end end end describe "#block?" do context "with a screen name passed" do before do stub_get("/1.1/blocks/ids.json").with(:query => {:cursor => "-1"}).to_return(:body => fixture("ids_list.json"), :headers => {:content_type => "application/json; charset=utf-8"}) stub_get("/1.1/blocks/ids.json").with(:query => {:cursor => "1305102810874389703"}).to_return(:body => fixture("ids_list2.json"), :headers => {:content_type => "application/json; charset=utf-8"}) stub_get("/1.1/users/show.json").with(:query => {:screen_name => "pengwynn"}).to_return(:body => fixture("pengwynn.json"), :headers => {:content_type => "application/json; charset=utf-8"}) stub_get("/1.1/users/show.json").with(:query => {:screen_name => "sferik"}).to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.block?("sferik") expect(a_get("/1.1/blocks/ids.json").with(:query => {:cursor => "-1"})).to have_been_made expect(a_get("/1.1/blocks/ids.json").with(:query => {:cursor => "1305102810874389703"})).to have_been_made expect(a_get("/1.1/users/show.json").with(:query => {:screen_name => "sferik"})).to have_been_made end it "returns true if block exists" do block = @client.block?("pengwynn") expect(block).to be true end it "returns false if block does not exist" do block = @client.block?("sferik") expect(block).to be false end end context "with a user ID passed" do before do stub_get("/1.1/blocks/ids.json").with(:query => {:cursor => "-1"}).to_return(:body => fixture("ids_list.json"), :headers => {:content_type => "application/json; charset=utf-8"}) stub_get("/1.1/blocks/ids.json").with(:query => {:cursor => "1305102810874389703"}).to_return(:body => fixture("ids_list2.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resources" do @client.block?(7505382) expect(a_get("/1.1/blocks/ids.json").with(:query => {:cursor => "-1"})).to have_been_made expect(a_get("/1.1/blocks/ids.json").with(:query => {:cursor => "1305102810874389703"})).to have_been_made end end context "with a user object passed" do before do stub_get("/1.1/blocks/ids.json").with(:query => {:cursor => "-1"}).to_return(:body => fixture("ids_list.json"), :headers => {:content_type => "application/json; charset=utf-8"}) stub_get("/1.1/blocks/ids.json").with(:query => {:cursor => "1305102810874389703"}).to_return(:body => fixture("ids_list2.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resources" do user = Twitter::User.new(:id => "7505382") @client.block?(user) expect(a_get("/1.1/blocks/ids.json").with(:query => {:cursor => "-1"})).to have_been_made expect(a_get("/1.1/blocks/ids.json").with(:query => {:cursor => "1305102810874389703"})).to have_been_made end end end describe "#block" do before do stub_post("/1.1/blocks/create.json").with(:body => {:screen_name => "sferik"}).to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.block("sferik") expect(a_post("/1.1/blocks/create.json")).to have_been_made end it "returns an array of blocked users" do users = @client.block("sferik") expect(users).to be_an Array expect(users.first).to be_a Twitter::User expect(users.first.id).to eq(7505382) end end describe "#unblock" do before do stub_post("/1.1/blocks/destroy.json").with(:body => {:screen_name => "sferik"}).to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.unblock("sferik") expect(a_post("/1.1/blocks/destroy.json").with(:body => {:screen_name => "sferik"})).to have_been_made end it "returns an array of un-blocked users" do users = @client.unblock("sferik") expect(users).to be_an Array expect(users.first).to be_a Twitter::User expect(users.first.id).to eq(7505382) end end describe "#users" do context "using a post request" do context "with screen names passed" do before do stub_post("/1.1/users/lookup.json").with(:body => {:screen_name => "sferik,pengwynn"}).to_return(:body => fixture("users.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.users("sferik", "pengwynn") expect(a_post("/1.1/users/lookup.json").with(:body => {:screen_name => "sferik,pengwynn"})).to have_been_made end it "returns up to 100 users worth of extended information" do users = @client.users("sferik", "pengwynn") expect(users).to be_an Array expect(users.first).to be_a Twitter::User expect(users.first.id).to eq(7505382) end context "with URI objects passed" do it "requests the correct resource" do sferik = URI.parse("https://twitter.com/sferik") pengwynn = URI.parse("https://twitter.com/pengwynn") @client.users(sferik, pengwynn) expect(a_post("/1.1/users/lookup.json").with(:body => {:screen_name => "sferik,pengwynn"})).to have_been_made end end context "with URI strings passed" do it "requests the correct resource" do @client.users("https://twitter.com/sferik", "https://twitter.com/pengwynn") expect(a_post("/1.1/users/lookup.json").with(:body => {:screen_name => "sferik,pengwynn"})).to have_been_made end end end context "with numeric screen names passed" do before do stub_post("/1.1/users/lookup.json").with(:body => {:screen_name => "0,311"}).to_return(:body => fixture("users.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.users("0", "311") expect(a_post("/1.1/users/lookup.json").with(:body => {:screen_name => "0,311"})).to have_been_made end end context "with user IDs passed" do before do stub_post("/1.1/users/lookup.json").with(:body => {:user_id => "7505382,14100886"}).to_return(:body => fixture("users.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.users(7505382, 14100886) expect(a_post("/1.1/users/lookup.json").with(:body => {:user_id => "7505382,14100886"})).to have_been_made end end context "with both screen names and user IDs passed" do before do stub_post("/1.1/users/lookup.json").with(:body => {:screen_name => "sferik", :user_id => "14100886"}).to_return(:body => fixture("users.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.users("sferik", 14100886) expect(a_post("/1.1/users/lookup.json").with(:body => {:screen_name => "sferik", :user_id => "14100886"})).to have_been_made end end context "with user objects passed" do before do stub_post("/1.1/users/lookup.json").with(:body => {:user_id => "7505382,14100886"}).to_return(:body => fixture("users.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do user1 = Twitter::User.new(:id => "7505382") user2 = Twitter::User.new(:id => "14100886") @client.users(user1, user2) expect(a_post("/1.1/users/lookup.json").with(:body => {:user_id => "7505382,14100886"})).to have_been_made end end end context "using a get request" do context "with screen names passed" do before do stub_get("/1.1/users/lookup.json").with(:query => {:screen_name => "sferik,pengwynn"}).to_return(:body => fixture("users.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.users("sferik", "pengwynn", :method => :get) expect(a_get("/1.1/users/lookup.json").with(:query => {:screen_name => "sferik,pengwynn"})).to have_been_made end it "returns up to 100 users worth of extended information" do users = @client.users("sferik", "pengwynn", :method => :get) expect(users).to be_an Array expect(users.first).to be_a Twitter::User expect(users.first.id).to eq(7505382) end context "with URI objects passed" do it "requests the correct resource" do sferik = URI.parse("https://twitter.com/sferik") pengwynn = URI.parse("https://twitter.com/pengwynn") @client.users(sferik, pengwynn, :method => :get) expect(a_get("/1.1/users/lookup.json").with(:query => {:screen_name => "sferik,pengwynn"})).to have_been_made end end context "with URI objects passed" do it "requests the correct resource" do @client.users("https://twitter.com/sferik", "https://twitter.com/pengwynn", :method => :get) expect(a_get("/1.1/users/lookup.json").with(:query => {:screen_name => "sferik,pengwynn"})).to have_been_made end end end context "with numeric screen names passed" do before do stub_get("/1.1/users/lookup.json").with(:query => {:screen_name => "0,311"}).to_return(:body => fixture("users.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.users("0", "311", :method => :get) expect(a_get("/1.1/users/lookup.json").with(:query => {:screen_name => "0,311"})).to have_been_made end end context "with user IDs passed" do before do stub_get("/1.1/users/lookup.json").with(:query => {:user_id => "7505382,14100886"}).to_return(:body => fixture("users.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.users(7505382, 14100886, :method => :get) expect(a_get("/1.1/users/lookup.json").with(:query => {:user_id => "7505382,14100886"})).to have_been_made end end context "with both screen names and user IDs passed" do before do stub_get("/1.1/users/lookup.json").with(:query => {:screen_name => "sferik", :user_id => "14100886"}).to_return(:body => fixture("users.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.users("sferik", 14100886, :method => :get) expect(a_get("/1.1/users/lookup.json").with(:query => {:screen_name => "sferik", :user_id => "14100886"})).to have_been_made end end context "with user objects passed" do before do stub_get("/1.1/users/lookup.json").with(:query => {:user_id => "7505382,14100886"}).to_return(:body => fixture("users.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do user1 = Twitter::User.new(:id => "7505382") user2 = Twitter::User.new(:id => "14100886") @client.users(user1, user2, :method => :get) expect(a_get("/1.1/users/lookup.json").with(:query => {:user_id => "7505382,14100886"})).to have_been_made end end end end describe "#user" do context "with a screen name passed" do before do stub_get("/1.1/users/show.json").with(:query => {:screen_name => "sferik"}).to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.user("sferik") expect(a_get("/1.1/users/show.json").with(:query => {:screen_name => "sferik"})).to have_been_made end it "returns extended information of a given user" do user = @client.user("sferik") expect(user).to be_a Twitter::User expect(user.id).to eq(7505382) end end context "with a screen name including '@' passed" do before do stub_get("/1.1/users/show.json").with(:query => {:screen_name => "@sferik"}).to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.user("@sferik") expect(a_get("/1.1/users/show.json").with(:query => {:screen_name => "@sferik"})).to have_been_made end end context "with a numeric screen name passed" do before do stub_get("/1.1/users/show.json").with(:query => {:screen_name => "0"}).to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.user("0") expect(a_get("/1.1/users/show.json").with(:query => {:screen_name => "0"})).to have_been_made end end context "with a user ID passed" do before do stub_get("/1.1/users/show.json").with(:query => {:user_id => "7505382"}).to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.user(7505382) expect(a_get("/1.1/users/show.json").with(:query => {:user_id => "7505382"})).to have_been_made end end context "with a user object passed" do before do stub_get("/1.1/users/show.json").with(:query => {:user_id => "7505382"}).to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do user = Twitter::User.new(:id => 7505382) @client.user(user) expect(a_get("/1.1/users/show.json").with(:query => {:user_id => "7505382"})).to have_been_made end end end context "without a screen name or user ID passed" do context "without options passed" do before do stub_get("/1.1/account/verify_credentials.json").to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.user expect(a_get("/1.1/account/verify_credentials.json")).to have_been_made end end context "with options passed" do before do stub_get("/1.1/account/verify_credentials.json").with(:query => {:skip_status => "true"}).to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.user(:skip_status => true) expect(a_get("/1.1/account/verify_credentials.json").with(:query => {:skip_status => "true"})).to have_been_made end end end describe "#user?" do before do stub_get("/1.1/users/show.json").with(:query => {:screen_name => "sferik"}).to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"}) stub_get("/1.1/users/show.json").with(:query => {:screen_name => "pengwynn"}).to_return(:body => fixture("not_found.json"), :status => 404, :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.user?("sferik") expect(a_get("/1.1/users/show.json").with(:query => {:screen_name => "sferik"})).to have_been_made end it "returns true if user exists" do user = @client.user?("sferik") expect(user).to be true end it "returns false if user does not exist" do user = @client.user?("pengwynn") expect(user).to be false end end describe "#user_search" do before do stub_get("/1.1/users/search.json").with(:query => {:q => "Erik Michaels-Ober"}).to_return(:body => fixture("user_search.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.user_search("Erik Michaels-Ober") expect(a_get("/1.1/users/search.json").with(:query => {:q => "Erik Michaels-Ober"})).to have_been_made end it "returns an array of user search results" do user_search = @client.user_search("Erik Michaels-Ober") expect(user_search).to be_an Array expect(user_search.first).to be_a Twitter::User expect(user_search.first.id).to eq(7505382) end end describe "#contributees" do context "with a screen name passed" do before do stub_get("/1.1/users/contributees.json").with(:query => {:screen_name => "sferik"}).to_return(:body => fixture("contributees.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.contributees("sferik") expect(a_get("/1.1/users/contributees.json").with(:query => {:screen_name => "sferik"})).to have_been_made end it "returns a user's contributees" do contributees = @client.contributees("sferik") expect(contributees).to be_an Array expect(contributees.first).to be_a Twitter::User expect(contributees.first.name).to eq("Twitter API") end end context "with a user ID passed" do before do stub_get("/1.1/users/contributees.json").with(:query => {:user_id => "7505382"}).to_return(:body => fixture("contributees.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.contributees(7505382) expect(a_get("/1.1/users/contributees.json").with(:query => {:user_id => "7505382"})).to have_been_made end end context "without arguments passed" do before do stub_get("/1.1/account/verify_credentials.json").to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"}) stub_get("/1.1/users/contributees.json").with(:query => {:screen_name => "sferik"}).to_return(:body => fixture("contributees.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.contributees expect(a_get("/1.1/users/contributees.json").with(:query => {:screen_name => "sferik"})).to have_been_made end it "returns a user's contributees" do contributees = @client.contributees expect(contributees).to be_an Array expect(contributees.first).to be_a Twitter::User expect(contributees.first.name).to eq("Twitter API") end end end describe "#contributors" do context "with a screen name passed" do before do stub_get("/1.1/users/contributors.json").with(:query => {:screen_name => "sferik"}).to_return(:body => fixture("members.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.contributors("sferik") expect(a_get("/1.1/users/contributors.json").with(:query => {:screen_name => "sferik"})).to have_been_made end it "returns a user's contributors" do contributors = @client.contributors("sferik") expect(contributors).to be_an Array expect(contributors.first).to be_a Twitter::User expect(contributors.first.id).to eq(13) end end context "with a user ID passed" do before do stub_get("/1.1/users/contributors.json").with(:query => {:user_id => "7505382"}).to_return(:body => fixture("members.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.contributors(7505382) expect(a_get("/1.1/users/contributors.json").with(:query => {:user_id => "7505382"})).to have_been_made end end context "without arguments passed" do before do stub_get("/1.1/account/verify_credentials.json").to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"}) stub_get("/1.1/users/contributors.json").with(:query => {:screen_name => "sferik"}).to_return(:body => fixture("members.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.contributors expect(a_get("/1.1/users/contributors.json").with(:query => {:screen_name => "sferik"})).to have_been_made end it "returns a user's contributors" do contributors = @client.contributors expect(contributors).to be_an Array expect(contributors.first).to be_a Twitter::User expect(contributors.first.id).to eq(13) end end end describe "#remove_profile_banner" do before do stub_post("/1.1/account/remove_profile_banner.json").to_return(:body => fixture("empty.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.remove_profile_banner expect(a_post("/1.1/account/remove_profile_banner.json")).to have_been_made end it "returns a user" do user = @client.remove_profile_banner expect(user).to be_nil end end describe "#update_profile_banner" do before do stub_post("/1.1/account/update_profile_banner.json").to_return(:body => fixture("empty.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.update_profile_banner(fixture("me.jpeg")) expect(a_post("/1.1/account/update_profile_banner.json")).to have_been_made end it "returns a user" do user = @client.update_profile_banner(fixture("me.jpeg")) expect(user).to be_nil end end describe "#profile_banner" do context "with a screen_name passed" do before do stub_get("/1.1/users/profile_banner.json").with(:query => {:screen_name => "sferik"}).to_return(:body => fixture("profile_banner.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.profile_banner("sferik") expect(a_get("/1.1/users/profile_banner.json").with(:query => {:screen_name => "sferik"})).to have_been_made end it "returns a user's profile banner" do banner = @client.profile_banner("sferik") expect(banner).to be_a Twitter::ProfileBanner expect(banner.sizes).to be_a Hash expect(banner.sizes[:mobile].height).to eq(160) end end context "with a user ID passed" do before do stub_get("/1.1/users/profile_banner.json").with(:query => {:user_id => "7505382"}).to_return(:body => fixture("profile_banner.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.profile_banner(7505382) expect(a_get("/1.1/users/profile_banner.json").with(:query => {:user_id => "7505382"})).to have_been_made end end context "without arguments passed" do before do stub_get("/1.1/account/verify_credentials.json").to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"}) stub_get("/1.1/users/profile_banner.json").with(:query => {:screen_name => "sferik"}).to_return(:body => fixture("profile_banner.json"), :headers => {:content_type => "application/json; charset=utf-8"}) end it "requests the correct resource" do @client.profile_banner expect(a_get("/1.1/account/verify_credentials.json")).to have_been_made expect(a_get("/1.1/users/profile_banner.json").with(:query => {:screen_name => "sferik"})).to have_been_made end it "returns an array of numeric IDs for every user following the specified user" do banner = @client.profile_banner expect(banner).to be_a Twitter::ProfileBanner expect(banner.sizes).to be_a Hash expect(banner.sizes[:mobile].height).to eq(160) end end end end