BigW Consortium Gitlab

labels_spec.rb 6.47 KB
Newer Older
Robert Schilling committed
1 2
require 'spec_helper'

3
describe API::V3::Labels do
Robert Schilling committed
4
  let(:user) { create(:user) }
5
  let(:project) { create(:project, creator_id: user.id, namespace: user.namespace) }
Robert Schilling committed
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
  let!(:label1) { create(:label, title: 'label1', project: project) }
  let!(:priority_label) { create(:label, title: 'bug', project: project, priority: 3) }

  before do
    project.team << [user, :master]
  end

  describe 'GET /projects/:id/labels' do
    it 'returns all available labels to the project' do
      group = create(:group)
      group_label = create(:group_label, title: 'feature', group: group)
      project.update(group: group)
      create(:labeled_issue, project: project, labels: [group_label], author: user)
      create(:labeled_issue, project: project, labels: [label1], author: user, state: :closed)
      create(:labeled_merge_request, labels: [priority_label], author: user, source_project: project )

Douwe Maan committed
22
      expected_keys = %w(
Douwe Maan committed
23 24 25 26
        id name color description
        open_issues_count closed_issues_count open_merge_requests_count
        subscribed priority
      )
Robert Schilling committed
27 28 29

      get v3_api("/projects/#{project.id}/labels", user)

30
      expect(response).to have_gitlab_http_status(200)
Robert Schilling committed
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
      expect(json_response).to be_an Array
      expect(json_response.size).to eq(3)
      expect(json_response.first.keys).to match_array expected_keys
      expect(json_response.map { |l| l['name'] }).to match_array([group_label.name, priority_label.name, label1.name])

      label1_response = json_response.find { |l| l['name'] == label1.title }
      group_label_response = json_response.find { |l| l['name'] == group_label.title }
      priority_label_response = json_response.find { |l| l['name'] == priority_label.title }

      expect(label1_response['open_issues_count']).to eq(0)
      expect(label1_response['closed_issues_count']).to eq(1)
      expect(label1_response['open_merge_requests_count']).to eq(0)
      expect(label1_response['name']).to eq(label1.name)
      expect(label1_response['color']).to be_present
      expect(label1_response['description']).to be_nil
      expect(label1_response['priority']).to be_nil
      expect(label1_response['subscribed']).to be_falsey

      expect(group_label_response['open_issues_count']).to eq(1)
      expect(group_label_response['closed_issues_count']).to eq(0)
      expect(group_label_response['open_merge_requests_count']).to eq(0)
      expect(group_label_response['name']).to eq(group_label.name)
      expect(group_label_response['color']).to be_present
      expect(group_label_response['description']).to be_nil
      expect(group_label_response['priority']).to be_nil
      expect(group_label_response['subscribed']).to be_falsey

      expect(priority_label_response['open_issues_count']).to eq(0)
      expect(priority_label_response['closed_issues_count']).to eq(0)
      expect(priority_label_response['open_merge_requests_count']).to eq(1)
      expect(priority_label_response['name']).to eq(priority_label.name)
      expect(priority_label_response['color']).to be_present
      expect(priority_label_response['description']).to be_nil
      expect(priority_label_response['priority']).to eq(3)
      expect(priority_label_response['subscribed']).to be_falsey
    end
  end
68 69 70 71 72 73

  describe "POST /projects/:id/labels/:label_id/subscription" do
    context "when label_id is a label title" do
      it "subscribes to the label" do
        post v3_api("/projects/#{project.id}/labels/#{label1.title}/subscription", user)

74
        expect(response).to have_gitlab_http_status(201)
75 76 77 78 79 80 81 82 83
        expect(json_response["name"]).to eq(label1.title)
        expect(json_response["subscribed"]).to be_truthy
      end
    end

    context "when label_id is a label ID" do
      it "subscribes to the label" do
        post v3_api("/projects/#{project.id}/labels/#{label1.id}/subscription", user)

84
        expect(response).to have_gitlab_http_status(201)
85 86 87 88 89 90 91 92 93 94 95
        expect(json_response["name"]).to eq(label1.title)
        expect(json_response["subscribed"]).to be_truthy
      end
    end

    context "when user is already subscribed to label" do
      before { label1.subscribe(user, project) }

      it "returns 304" do
        post v3_api("/projects/#{project.id}/labels/#{label1.id}/subscription", user)

96
        expect(response).to have_gitlab_http_status(304)
97 98 99 100 101 102 103
      end
    end

    context "when label ID is not found" do
      it "returns 404 error" do
        post v3_api("/projects/#{project.id}/labels/1234/subscription", user)

104
        expect(response).to have_gitlab_http_status(404)
105 106 107 108 109 110 111 112 113 114 115
      end
    end
  end

  describe "DELETE /projects/:id/labels/:label_id/subscription" do
    before { label1.subscribe(user, project) }

    context "when label_id is a label title" do
      it "unsubscribes from the label" do
        delete v3_api("/projects/#{project.id}/labels/#{label1.title}/subscription", user)

116
        expect(response).to have_gitlab_http_status(200)
117 118 119 120 121 122 123 124 125
        expect(json_response["name"]).to eq(label1.title)
        expect(json_response["subscribed"]).to be_falsey
      end
    end

    context "when label_id is a label ID" do
      it "unsubscribes from the label" do
        delete v3_api("/projects/#{project.id}/labels/#{label1.id}/subscription", user)

126
        expect(response).to have_gitlab_http_status(200)
127 128 129 130 131 132 133 134 135 136 137
        expect(json_response["name"]).to eq(label1.title)
        expect(json_response["subscribed"]).to be_falsey
      end
    end

    context "when user is already unsubscribed from label" do
      before { label1.unsubscribe(user, project) }

      it "returns 304" do
        delete v3_api("/projects/#{project.id}/labels/#{label1.id}/subscription", user)

138
        expect(response).to have_gitlab_http_status(304)
139 140 141 142 143 144 145
      end
    end

    context "when label ID is not found" do
      it "returns 404 error" do
        delete v3_api("/projects/#{project.id}/labels/1234/subscription", user)

146
        expect(response).to have_gitlab_http_status(404)
147 148 149
      end
    end
  end
Robert Schilling committed
150 151 152 153 154

  describe 'DELETE /projects/:id/labels' do
    it 'returns 200 for existing label' do
      delete v3_api("/projects/#{project.id}/labels", user), name: 'label1'

155
      expect(response).to have_gitlab_http_status(200)
Robert Schilling committed
156 157 158 159
    end

    it 'returns 404 for non existing label' do
      delete v3_api("/projects/#{project.id}/labels", user), name: 'label2'
160
      expect(response).to have_gitlab_http_status(404)
Robert Schilling committed
161 162 163 164 165
      expect(json_response['message']).to eq('404 Label Not Found')
    end

    it 'returns 400 for wrong parameters' do
      delete v3_api("/projects/#{project.id}/labels", user)
166
      expect(response).to have_gitlab_http_status(400)
Robert Schilling committed
167 168
    end
  end
Robert Schilling committed
169
end