require 'helper' describe Bearcat::Client::Users do before do @client = Bearcat::Client.new(prefix: "http://canvas.instructure.com", token: "test_token") end context 'GET' do it "returns all users for an account" do stub_get(@client, "/api/v1/accounts/1/users").to_return(json_response("account_users.json")) users = @client.list_users(1) users.count.should == 3 users.last['id'].should == 3 users.first['id'].should == 1 users.first['name'].should == 'test user 1' end it "returns a user in an account if a search term is provided" do stub_get(@client, "/api/v1/accounts/1/users?search_term=testusersisid1").to_return(json_response("account_user.json")) user = @client.list_users(1, {"search_term" => "testusersisid1"}) user.count.should == 1 user.first['name'].should == 'test user 1' user.first['sis_user_id'].should == 'testusersisid1' end it "returns the possible user avatar options" do stub_get(@client, "/api/v1/users/1/avatars").to_return(json_response("user_avatars.json")) user_avatars = @client.user_avatars(1) user_avatars.count.should == 2 user_avatars.first['type'].should == 'gravatar' end describe 'user custom data' do before (:each) do @query = {"ns" => "com.test.app"} end it "returns custom user data for a scope" do stub_get(@client, "/api/v1/users/1/custom_data/food").with(query: @query).to_return(json_response("custom_food_data.json")) custom_food_data = @client.load_custom_data("1", @query, "food") custom_food_data["data"].keys.count.should == 2 custom_food_data["data"]["least_favorite"].should == "water mellon" end it "returns all custom user data" do stub_get(@client, "/api/v1/users/1/custom_data").with(query: @query).to_return(json_response("custom_data.json")) custom_data = @client.load_custom_data("1", @query, "") custom_data["data"].keys.count.should == 2 custom_data["data"]["food"]["favorite"].should == "steak" end it "returns no data if no data found for scope" do stub_get(@client, "/api/v1/users/1/custom_data/bogus").with(query: @query).to_return(json_response("no_custom_data.json")) no_custom_data = @client.load_custom_data("1", @query, "bogus") no_custom_data["message"].should == "no data for scope" end end end context 'POST' do it "creates a user in an account" do pseudonym = "testuser@testing.test" name = "testuser" body = {"user" => {"name" => name}, "pseudonym" => {"unique_id" => pseudonym}} stub_post(@client, "/api/v1/accounts/1/users").with(body: body).to_return(json_response("add_user.json")) user = @client.add_user(1, body) user['login_id'].should == pseudonym user['name'].should == name end end context 'PUT' do it "creates custom user data" do body = {"ns" => "com.test.app", "data" => {"favorite" => "steak", "least_favorite" => "water mellon"}} stub_put(@client, "/api/v1/users/1/custom_data/food").with(body: body).to_return(json_response("add_custom_user_data.json")) custom_food_data = @client.store_custom_data("1", body, "food") custom_food_data["data"].keys.count.should == 1 custom_food_data["data"]["food"]["least_favorite"].should == "water mellon" end end context 'DELETE' do before (:each) do @query = {"ns" => "com.test.app"} end it "deletes custom user data for a scope" do stub_delete(@client, "/api/v1/users/1/custom_data/food/favorite").with(query: @query).to_return(json_response("delete_custom_data_scope.json")) custom_deleted_data = @client.delete_custom_data("1", @query, "food/favorite") custom_deleted_data["data"].should == "steak" end it "deletes all custom user data" do stub_delete(@client, "/api/v1/users/1/custom_data").with(query: @query).to_return(json_response("custom_data.json")) custom_deleted_data = @client.delete_custom_data("1", @query, "") custom_deleted_data["data"].keys.count.should == 2 custom_deleted_data["data"]["food"]["favorite"].should == "steak" end end end