issues_spec.rb 3.46 KB
Newer Older
Nihad Abbasov's avatar
Nihad Abbasov committed
1 2
require 'spec_helper'

Jeroen van Baarsen's avatar
Jeroen van Baarsen committed
3
describe API::API, api: true  do
4
  include ApiHelpers
5
  let(:user) { create(:user) }
6
  let!(:project) { create(:project, namespace: user.namespace ) }
7
  let!(:issue) { create(:issue, author: user, assignee: user, project: project) }
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
8
  before { project.team << [user, :reporter] }
Nihad Abbasov's avatar
Nihad Abbasov committed
9 10

  describe "GET /issues" do
11 12 13 14 15
    context "when unauthenticated" do
      it "should return authentication error" do
        get api("/issues")
        response.status.should == 401
      end
Nihad Abbasov's avatar
Nihad Abbasov committed
16 17
    end

18
    context "when authenticated" do
Nihad Abbasov's avatar
Nihad Abbasov committed
19
      it "should return an array of issues" do
Robert Speicher's avatar
Robert Speicher committed
20
        get api("/issues", user)
Nihad Abbasov's avatar
Nihad Abbasov committed
21 22 23 24
        response.status.should == 200
        json_response.should be_an Array
        json_response.first['title'].should == issue.title
      end
25 26 27 28 29 30

      it "should add pagination headers" do
        get api("/issues?per_page=3", user)
        response.headers['Link'].should ==
          '<http://www.example.com/api/v3/issues?page=1&per_page=3>; rel="first", <http://www.example.com/api/v3/issues?page=1&per_page=3>; rel="last"'
      end
Nihad Abbasov's avatar
Nihad Abbasov committed
31 32 33 34 35
    end
  end

  describe "GET /projects/:id/issues" do
    it "should return project issues" do
36
      get api("/projects/#{project.id}/issues", user)
Nihad Abbasov's avatar
Nihad Abbasov committed
37 38 39 40 41 42 43 44
      response.status.should == 200
      json_response.should be_an Array
      json_response.first['title'].should == issue.title
    end
  end

  describe "GET /projects/:id/issues/:issue_id" do
    it "should return a project issue by id" do
45
      get api("/projects/#{project.id}/issues/#{issue.id}", user)
Nihad Abbasov's avatar
Nihad Abbasov committed
46 47
      response.status.should == 200
      json_response['title'].should == issue.title
48
      json_response['iid'].should == issue.iid
Nihad Abbasov's avatar
Nihad Abbasov committed
49
    end
50 51 52 53 54

    it "should return 404 if issue id not found" do
      get api("/projects/#{project.id}/issues/54321", user)
      response.status.should == 404
    end
Nihad Abbasov's avatar
Nihad Abbasov committed
55 56 57 58
  end

  describe "POST /projects/:id/issues" do
    it "should create a new project issue" do
59
      post api("/projects/#{project.id}/issues", user),
60
        title: 'new issue', labels: 'label, label2'
Nihad Abbasov's avatar
Nihad Abbasov committed
61 62 63 64 65
      response.status.should == 201
      json_response['title'].should == 'new issue'
      json_response['description'].should be_nil
      json_response['labels'].should == ['label', 'label2']
    end
66 67 68 69 70

    it "should return a 400 bad request if title not given" do
      post api("/projects/#{project.id}/issues", user), labels: 'label, label2'
      response.status.should == 400
    end
Nihad Abbasov's avatar
Nihad Abbasov committed
71 72
  end

Andrew8xx8's avatar
Andrew8xx8 committed
73
  describe "PUT /projects/:id/issues/:issue_id to update only title" do
Nihad Abbasov's avatar
Nihad Abbasov committed
74
    it "should update a project issue" do
75
      put api("/projects/#{project.id}/issues/#{issue.id}", user),
Andrew8xx8's avatar
Andrew8xx8 committed
76
        title: 'updated title'
Nihad Abbasov's avatar
Nihad Abbasov committed
77
      response.status.should == 200
Andrew8xx8's avatar
Andrew8xx8 committed
78

Nihad Abbasov's avatar
Nihad Abbasov committed
79
      json_response['title'].should == 'updated title'
Andrew8xx8's avatar
Andrew8xx8 committed
80
    end
81 82 83 84 85 86

    it "should return 404 error if issue id not found" do
      put api("/projects/#{project.id}/issues/44444", user),
        title: 'updated title'
      response.status.should == 404
    end
Andrew8xx8's avatar
Andrew8xx8 committed
87 88 89 90 91 92 93 94
  end

  describe "PUT /projects/:id/issues/:issue_id to update state and label" do
    it "should update a project issue" do
      put api("/projects/#{project.id}/issues/#{issue.id}", user),
        labels: 'label2', state_event: "close"
      response.status.should == 200

Nihad Abbasov's avatar
Nihad Abbasov committed
95
      json_response['labels'].should == ['label2']
Andrew8xx8's avatar
Andrew8xx8 committed
96
      json_response['state'].should eq "closed"
Nihad Abbasov's avatar
Nihad Abbasov committed
97 98 99 100 101
    end
  end

  describe "DELETE /projects/:id/issues/:issue_id" do
    it "should delete a project issue" do
102
      delete api("/projects/#{project.id}/issues/#{issue.id}", user)
103
      response.status.should == 405
Nihad Abbasov's avatar
Nihad Abbasov committed
104 105 106
    end
  end
end