BigW Consortium Gitlab

users_project_spec.rb 3.03 KB
Newer Older
Dmitriy Zaporozhets committed
1 2 3 4
# == Schema Information
#
# Table name: users_projects
#
5 6 7 8 9 10
#  id             :integer          not null, primary key
#  user_id        :integer          not null
#  project_id     :integer          not null
#  created_at     :datetime         not null
#  updated_at     :datetime         not null
#  project_access :integer          default(0), not null
Dmitriy Zaporozhets committed
11 12
#

gitlabhq committed
13 14 15 16 17 18 19 20
require 'spec_helper'

describe UsersProject do
  describe "Associations" do
    it { should belong_to(:project) }
    it { should belong_to(:user) }
  end

21 22 23 24
  describe "Mass assignment" do
    it { should_not allow_mass_assignment_of(:project_id) }
  end

gitlabhq committed
25
  describe "Validation" do
26 27
    let!(:users_project) { create(:users_project) }

Andrey Kumanyaev committed
28
    it { should validate_presence_of(:user) }
29
    it { should validate_uniqueness_of(:user_id).scoped_to(:project_id).with_message(/already exists/) }
30

Andrey Kumanyaev committed
31
    it { should validate_presence_of(:project) }
32
    it { should ensure_inclusion_of(:project_access).in_array(UsersProject.access_roles.values) }
gitlabhq committed
33 34
  end

Nihad Abbasov committed
35
  describe "Delegate methods" do
gitlabhq committed
36 37 38
    it { should respond_to(:user_name) }
    it { should respond_to(:user_email) }
  end
39 40 41 42 43 44 45 46 47 48 49 50

  describe :import_team do
    before do
      @abilities = Six.new
      @abilities << Ability

      @project_1 = create :project
      @project_2 = create :project

      @user_1 = create :user
      @user_2 = create :user

51 52
      @project_1.team << [ @user_1, :developer ]
      @project_2.team << [ @user_2, :reporter ]
53

54
      @status = @project_2.team.import(@project_1)
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
    end

    it { @status.should be_true }

    describe 'project 2 should get user 1 as developer. user_2 should not be changed' do
      it { @project_2.users.should include(@user_1) }
      it { @project_2.users.should include(@user_2) }

      it { @abilities.allowed?(@user_1, :write_project, @project_2).should be_true }
      it { @abilities.allowed?(@user_2, :read_project, @project_2).should be_true }
    end

    describe 'project 1 should not be changed' do
      it { @project_1.users.should include(@user_1) }
      it { @project_1.users.should_not include(@user_2) }
    end
  end
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103

  describe :add_users_into_projects do
    before do
      @project_1 = create :project
      @project_2 = create :project

      @user_1 = create :user
      @user_2 = create :user

      UsersProject.add_users_into_projects(
        [@project_1.id, @project_2.id],
        [@user_1.id, @user_2.id],
        UsersProject::MASTER
      )
    end

    it { @project_1.users.should include(@user_1) }
    it { @project_1.users.should include(@user_2) }


    it { @project_2.users.should include(@user_1) }
    it { @project_2.users.should include(@user_2) }
  end

  describe :truncate_teams do
    before do
      @project_1 = create :project
      @project_2 = create :project

      @user_1 = create :user
      @user_2 = create :user

104 105
      @project_1.team << [ @user_1, :developer]
      @project_2.team << [ @user_2, :reporter]
106 107 108 109 110 111 112

      UsersProject.truncate_teams([@project_1.id, @project_2.id])
    end

    it { @project_1.users.should be_empty }
    it { @project_2.users.should be_empty }
  end
gitlabhq committed
113
end