project_team_spec.rb 2.43 KB
Newer Older
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
1 2
require "spec_helper"

3
describe ProjectTeam do
4 5 6 7
  let(:master) { create(:user) }
  let(:reporter) { create(:user) }
  let(:guest) { create(:user) }
  let(:nonmember) { create(:user) }
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
8

9 10
  context 'personal project' do
    let(:project) { create(:empty_project) }
11

12 13 14 15 16
    before do
      project.team << [master, :master]
      project.team << [reporter, :reporter]
      project.team << [guest, :guest]
    end
17

18 19 20 21 22 23 24 25 26 27 28 29
    describe 'members collection' do
      it { project.team.masters.should include(master) }
      it { project.team.masters.should_not include(guest) }
      it { project.team.masters.should_not include(reporter) }
      it { project.team.masters.should_not include(nonmember) }
    end

    describe 'access methods' do
      it { project.team.master?(master).should be_true }
      it { project.team.master?(guest).should be_false }
      it { project.team.master?(reporter).should be_false }
      it { project.team.master?(nonmember).should be_false }
30 31
      it { project.team.member?(nonmember).should be_false }
      it { project.team.member?(guest).should be_true }
32
    end
33 34
  end

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
  context 'group project' do
    let(:group) { create(:group) }
    let(:project) { create(:empty_project, group: group) }

    before do
      group.add_user(master, Gitlab::Access::MASTER)
      group.add_user(reporter, Gitlab::Access::REPORTER)
      group.add_user(guest, Gitlab::Access::GUEST)

      # If user is a group and a project member - GitLab uses highest permission
      # So we add group guest as master and add group master as guest
      # to this project to test highest access
      project.team << [guest, :master]
      project.team << [master, :guest]
    end

    describe 'members collection' do
      it { project.team.reporters.should include(reporter) }
      it { project.team.masters.should include(master) }
      it { project.team.masters.should include(guest) }
      it { project.team.masters.should_not include(reporter) }
      it { project.team.masters.should_not include(nonmember) }
    end

    describe 'access methods' do
      it { project.team.reporter?(reporter).should be_true }
      it { project.team.master?(master).should be_true }
      it { project.team.master?(guest).should be_true }
      it { project.team.master?(reporter).should be_false }
      it { project.team.master?(nonmember).should be_false }
65 66
      it { project.team.member?(nonmember).should be_false }
      it { project.team.member?(guest).should be_true }
67
    end
68 69 70
  end
end