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 a paginated response of users" do
expect(@users).to be_a Gitlab::PaginatedResponse
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 do
Gitlab.create_user("email", "pass")
end.to raise_error(Gitlab::Error::Conflict, "Server responded with code 409, message: 409 Already exists. Request URI: #{Gitlab.endpoint}/users")
end
end
end
describe ".create_user_with_userame" do
context "when successful request" do
before do
stub_post("/users", "user")
@user = Gitlab.create_user("email", "pass", "username")
end
it "should get the correct resource" do
body = { email: "email", password: "pass", username: "username" }
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 do
Gitlab.create_user("email", "pass", "username")
end.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 ".delete_user" do
before do
stub_delete("/users/1", "user")
@user = Gitlab.delete_user(1)
end
it "should get the correct resource" do
expect(a_delete("/users/1")).to have_been_made
end
it "should return information about a deleted user" do
expect(@user.email).to eq("john@example.com")
end
end
describe ".block_user" do
before do
stub_post("/users/1/block", "user_block_unblock")
@result = Gitlab.block_user(1)
end
it "should get the correct resource" do
expect(a_post("/users/1/block")).to have_been_made
end
it "should return boolean" do
expect(@result).to eq(true)
end
end
describe ".unblock_user" do
before do
stub_post("/users/1/unblock", "user_block_unblock")
@result = Gitlab.unblock_user(1)
end
it "should get the correct resource" do
expect(a_post("/users/1/unblock")).to have_been_made
end
it "should return boolean" do
expect(@result).to eq(true)
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 do
Gitlab.session("email", "pass")
end.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
context "with user ID passed" do
before do
stub_get("/users/1/keys", "keys")
@keys = Gitlab.ssh_keys({ user_id: 1 })
end
it "should get the correct resource" do
expect(a_get("/users/1/keys")).to have_been_made
end
it "should return a paginated response of SSH keys" do
expect(@keys).to be_a Gitlab::PaginatedResponse
expect(@keys.first.title).to eq("narkoz@helium")
end
end
context "without user ID passed" 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 a paginated response of SSH keys" do
expect(@keys).to be_a Gitlab::PaginatedResponse
expect(@keys.first.title).to eq("narkoz@helium")
end
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
describe ".emails" do
describe "without user ID" do
before do
stub_get("/user/emails", "user_emails")
@emails = Gitlab.emails
end
it "should get the correct resource" do
expect(a_get("/user/emails")).to have_been_made
end
it "should return a information about a emails of user" do
email = @emails.first
expect(email.id).to eq 1
expect(email.email).to eq("email@example.com")
end
end
describe "with user ID" do
before do
stub_get("/users/2/emails", "user_emails")
@emails = Gitlab.emails(2)
end
it "should get the correct resource" do
expect(a_get("/users/2/emails")).to have_been_made
end
it "should return a information about a emails of user" do
email = @emails.first
expect(email.id).to eq 1
expect(email.email).to eq("email@example.com")
end
end
end
describe ".email" do
before do
stub_get("/user/emails/2", "user_email")
@email = Gitlab.email(2)
end
it "should get the correct resource" do
expect(a_get("/user/emails/2")).to have_been_made
end
it "should return a information about a email of user" do
expect(@email.id).to eq 1
expect(@email.email).to eq("email@example.com")
end
end
describe ".add_email" do
describe "without user ID" do
before do
stub_post("/user/emails", "user_email")
@email = Gitlab.add_email("email@example.com")
end
it "should get the correct resource" do
body = { email: "email@example.com" }
expect(a_post("/user/emails").with(body: body)).to have_been_made
end
it "should return information about a new email" do
expect(@email.id).to eq(1)
expect(@email.email).to eq("email@example.com")
end
end
describe "with user ID" do
before do
stub_post("/users/2/emails", "user_email")
@email = Gitlab.add_email("email@example.com", 2)
end
it "should get the correct resource" do
body = { email: "email@example.com" }
expect(a_post("/users/2/emails").with(body: body)).to have_been_made
end
it "should return information about a new email" do
expect(@email.id).to eq(1)
expect(@email.email).to eq("email@example.com")
end
end
end
describe ".delete_email" do
describe "without user ID" do
before do
stub_delete("/user/emails/1", "user_email")
@email = Gitlab.delete_email(1)
end
it "should get the correct resource" do
expect(a_delete("/user/emails/1")).to have_been_made
end
it "should return information about a deleted email" do
expect(@email).to be_truthy
end
end
describe "with user ID" do
before do
stub_delete("/users/2/emails/1", "user_email")
@email = Gitlab.delete_email(1, 2)
end
it "should get the correct resource" do
expect(a_delete("/users/2/emails/1")).to have_been_made
end
it "should return information about a deleted email" do
expect(@email).to be_truthy
end
end
end
describe ".user_search" do
before do
stub_get("/users?search=User", "user_search")
@users = Gitlab.user_search('User')
end
it "should get the correct resource" do
expect(a_get("/users?search=User")).to have_been_made
end
it "should return an array of users found" do
expect(@users.first.id).to eq(1)
expect(@users.last.id).to eq(2)
end
end
end