require 'spec_helper' describe Gitlab::Client do describe ".users" do before do stub_get("/users", "users") @users = Gitlab.users end it "should get the correct resource" do expect(a_get("/users")).to have_been_made end it "should return an array of users" do expect(@users).to be_an Array expect(@users.first.email).to eq("john@example.com") end end describe ".user" do context "with user ID passed" do before do stub_get("/users/1", "user") @user = Gitlab.user(1) end it "should get the correct resource" do expect(a_get("/users/1")).to have_been_made end it "should return information about a user" do expect(@user.email).to eq("john@example.com") end end context "without user ID passed" do before do stub_get("/user", "user") @user = Gitlab.user end it "should get the correct resource" do expect(a_get("/user")).to have_been_made end it "should return information about an authorized user" do expect(@user.email).to eq("john@example.com") end end end describe ".create_user" do context "when successful request" do before do stub_post("/users", "user") @user = Gitlab.create_user("email", "pass") end it "should get the correct resource" do body = {:email => "email", :password => "pass", :name => "email"} expect(a_post("/users").with(:body => body)).to have_been_made end it "should return information about a created user" do expect(@user.email).to eq("john@example.com") end end context "when bad request" do it "should throw an exception" do stub_post("/users", "error_already_exists", 409) expect { Gitlab.create_user("email", "pass") }.to raise_error(Gitlab::Error::Conflict, "Server responded with code 409, message: 409 Already exists. Request URI: #{Gitlab.endpoint}/users") end end end describe ".edit_user" do before do @options = { :name => "Roberto" } stub_put("/users/1", "user").with(:body => @options) @user = Gitlab.edit_user(1, @options) end it "should get the correct resource" do expect(a_put("/users/1").with(:body => @options)).to have_been_made end end describe ".session" do after do Gitlab.endpoint = 'https://api.example.com' Gitlab.private_token = 'secret' end before do stub_request(:post, "#{Gitlab.endpoint}/session"). to_return(:body => load_fixture('session'), :status => 200) @session = Gitlab.session("email", "pass") end context "when endpoint is not set" do it "should raise Error::MissingCredentials" do Gitlab.endpoint = nil expect { Gitlab.session("email", "pass") }.to raise_error(Gitlab::Error::MissingCredentials, 'Please set an endpoint to API') end end context "when private_token is not set" do it "should not raise Error::MissingCredentials" do Gitlab.private_token = nil expect { Gitlab.session("email", "pass") }.to_not raise_error end end context "when endpoint is set" do it "should get the correct resource" do expect(a_request(:post, "#{Gitlab.endpoint}/session")).to have_been_made end it "should return information about a created session" do expect(@session.email).to eq("john@example.com") expect(@session.private_token).to eq("qEsq1pt6HJPaNciie3MG") end end end describe ".ssh_keys" do before do stub_get("/user/keys", "keys") @keys = Gitlab.ssh_keys end it "should get the correct resource" do expect(a_get("/user/keys")).to have_been_made end it "should return an array of SSH keys" do expect(@keys).to be_an Array expect(@keys.first.title).to eq("narkoz@helium") end end describe ".ssh_key" do before do stub_get("/user/keys/1", "key") @key = Gitlab.ssh_key(1) end it "should get the correct resource" do expect(a_get("/user/keys/1")).to have_been_made end it "should return information about an SSH key" do expect(@key.title).to eq("narkoz@helium") end end describe ".create_ssh_key" do before do stub_post("/user/keys", "key") @key = Gitlab.create_ssh_key("title", "body") end it "should get the correct resource" do body = {:title => "title", :key => "body"} expect(a_post("/user/keys").with(:body => body)).to have_been_made end it "should return information about a created SSH key" do expect(@key.title).to eq("narkoz@helium") end end describe ".delete_ssh_key" do before do stub_delete("/user/keys/1", "key") @key = Gitlab.delete_ssh_key(1) end it "should get the correct resource" do expect(a_delete("/user/keys/1")).to have_been_made end it "should return information about a deleted SSH key" do expect(@key.title).to eq("narkoz@helium") end end end