BigW Consortium Gitlab

branches_spec.rb 4.95 KB
Newer Older
1 2 3
require 'spec_helper'
require 'mime/types'

4
describe API::API, api: true  do
5 6 7 8 9 10 11
  include ApiHelpers

  let(:user) { create(:user) }
  let(:user2) { create(:user) }
  let!(:project) { create(:project, creator_id: user.id) }
  let!(:master) { create(:users_project, user: user, project: project, project_access: UsersProject::MASTER) }
  let!(:guest) { create(:users_project, user: user2, project: project, project_access: UsersProject::GUEST) }
12 13
  let!(:branch_name) { 'feature' }
  let!(:branch_sha) { '0b4bc9a49b562e85de7cc9e834518ea6828729b9' }
14 15 16 17 18 19 20 21 22 23 24 25

  describe "GET /projects/:id/repository/branches" do
    it "should return an array of project branches" do
      get api("/projects/#{project.id}/repository/branches", user)
      response.status.should == 200
      json_response.should be_an Array
      json_response.first['name'].should == project.repo.heads.sort_by(&:name).first.name
    end
  end

  describe "GET /projects/:id/repository/branches/:branch" do
    it "should return the branch information for a single branch" do
26
      get api("/projects/#{project.id}/repository/branches/#{branch_name}", user)
27 28
      response.status.should == 200

29 30
      json_response['name'].should == branch_name
      json_response['commit']['id'].should == branch_sha
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
      json_response['protected'].should == false
    end

    it "should return a 403 error if guest" do
      get api("/projects/#{project.id}/repository/branches", user2)
      response.status.should == 403
    end

    it "should return a 404 error if branch is not available" do
      get api("/projects/#{project.id}/repository/branches/unknown", user)
      response.status.should == 404
    end
  end

  describe "PUT /projects/:id/repository/branches/:branch/protect" do
    it "should protect a single branch" do
47
      put api("/projects/#{project.id}/repository/branches/#{branch_name}/protect", user)
48 49
      response.status.should == 200

50 51
      json_response['name'].should == branch_name
      json_response['commit']['id'].should == branch_sha
52 53 54 55 56 57 58 59 60
      json_response['protected'].should == true
    end

    it "should return a 404 error if branch not found" do
      put api("/projects/#{project.id}/repository/branches/unknown/protect", user)
      response.status.should == 404
    end

    it "should return a 403 error if guest" do
61
      put api("/projects/#{project.id}/repository/branches/#{branch_name}/protect", user2)
62 63 64 65
      response.status.should == 403
    end

    it "should return success when protect branch again" do
66 67
      put api("/projects/#{project.id}/repository/branches/#{branch_name}/protect", user)
      put api("/projects/#{project.id}/repository/branches/#{branch_name}/protect", user)
68 69 70 71 72 73
      response.status.should == 200
    end
  end

  describe "PUT /projects/:id/repository/branches/:branch/unprotect" do
    it "should unprotect a single branch" do
74
      put api("/projects/#{project.id}/repository/branches/#{branch_name}/unprotect", user)
75 76
      response.status.should == 200

77 78
      json_response['name'].should == branch_name
      json_response['commit']['id'].should == branch_sha
79 80 81 82 83 84 85 86 87
      json_response['protected'].should == false
    end

    it "should return success when unprotect branch" do
      put api("/projects/#{project.id}/repository/branches/unknown/unprotect", user)
      response.status.should == 404
    end

    it "should return success when unprotect branch again" do
88 89
      put api("/projects/#{project.id}/repository/branches/#{branch_name}/unprotect", user)
      put api("/projects/#{project.id}/repository/branches/#{branch_name}/unprotect", user)
90 91 92 93
      response.status.should == 200
    end
  end

94 95 96
  describe "POST /projects/:id/repository/branches" do
    it "should create a new branch" do
      post api("/projects/#{project.id}/repository/branches", user),
97 98
        branch_name: branch_name,
        ref: branch_sha
99 100 101

      response.status.should == 201

102 103
      json_response['name'].should == branch_name
      json_response['commit']['id'].should == branch_sha
104 105 106 107
    end

    it "should deny for user without push access" do
      post api("/projects/#{project.id}/repository/branches", user2),
108 109
        branch_name: branch_name,
        ref: branch_sha
110 111 112 113

      response.status.should == 403
    end
  end
114 115 116 117 118

  describe "DELETE /projects/:id/repository/branches/:branch" do
    before { Repository.any_instance.stub(rm_branch: true) }

    it "should remove branch" do
119
      delete api("/projects/#{project.id}/repository/branches/#{branch_name}", user)
120 121 122 123
      response.status.should == 200
    end

    it "should remove protected branch" do
124 125
      project.protected_branches.create(name: branch_name)
      delete api("/projects/#{project.id}/repository/branches/#{branch_name}", user)
126 127 128 129 130 131 132 133 134 135
      response.status.should == 405
      json_response['message'].should == 'Protected branch cant be removed'
    end

    it "should not remove HEAD branch" do
      delete api("/projects/#{project.id}/repository/branches/master", user)
      response.status.should == 405
      json_response['message'].should == 'Cannot remove HEAD branch'
    end
  end
136
end