require 'spec_helper'

describe Gitlab::Client do
  describe ".labels" do
    before do
      stub_get("/projects/3/labels", "labels")
      @labels = Gitlab.labels(3)
    end

    it "should get the correct resource" do
      expect(a_get("/projects/3/labels")).to have_been_made
    end

    it "should return a paginated response of project's labels" do
      expect(@labels).to be_a Gitlab::PaginatedResponse
      expect(@labels.first.name).to eq("Backlog")
    end
  end

  describe ".delete" do
    before do
      stub_delete("/projects/3/labels", "label")
      @label = Gitlab.delete_label(3, "Backlog")
    end

    it "should get the correct resource" do
      expect(a_delete("/projects/3/labels").
             with(body: { name: 'Backlog' })).to have_been_made
    end

    it "should return information about a deleted snippet" do
      expect(@label.name).to eq("Backlog")
    end
  end

  describe ".edit_label" do
    before do
      stub_put("/projects/3/labels", "label")
      @label = Gitlab.edit_label(3, "TODO", new_name: 'Backlog')
    end

    it "should get the correct resource" do
      expect(a_put("/projects/3/labels").
             with(body: { name: 'TODO', new_name: "Backlog" })).to have_been_made
    end

    it "should return information about an edited label" do
      expect(@label.name).to eq("Backlog")
    end
  end

  describe ".create_label" do
    before do
      stub_post("/projects/3/labels", "label")
      @label = Gitlab.create_label(3, 'Backlog', '#DD10AA')
    end

    it "should get the correct resource" do
      expect(a_post("/projects/3/labels").
             with(body: { name: 'Backlog', color: '#DD10AA' })).to have_been_made
    end

    it "should return information about a created label" do
      expect(@label.name).to eq('Backlog')
      expect(@label.color).to eq('#DD10AA')
    end
  end

  describe ".subscribe_to_label" do
    before do
      stub_post("/projects/3/labels/Backlog/subscribe", "label")
      @label = Gitlab.subscribe_to_label(3, 'Backlog')
    end

    it "should get the correct resource" do
      expect(a_post("/projects/3/labels/Backlog/subscribe")).to have_been_made
    end

    it "should return information about the label subscribed to" do
      expect(@label.name).to eq('Backlog')
      expect(@label.subscribed).to eq(true)
    end
  end

  describe ".unsubscribe_from_label" do
    before do
      stub_post("/projects/3/labels/Backlog/unsubscribe", "label_unsubscribe")
      @label = Gitlab.unsubscribe_from_label(3, 'Backlog')
    end

    it "should get the correct resource" do
      expect(a_post("/projects/3/labels/Backlog/unsubscribe")).to have_been_made
    end

    it "should return information about the label subscribed to" do
      expect(@label.name).to eq('Backlog')
      expect(@label.subscribed).to eq(false)
    end
  end
end
