BigW Consortium Gitlab

group_spec.rb 4.14 KB
Newer Older
1 2
# == Schema Information
#
Dmitriy Zaporozhets committed
3
# Table name: namespaces
4
#
Dmitriy Zaporozhets committed
5 6 7
#  id          :integer          not null, primary key
#  name        :string(255)      not null
#  path        :string(255)      not null
Dmitriy Zaporozhets committed
8
#  owner_id    :integer
Dmitriy Zaporozhets committed
9 10
#  created_at  :datetime
#  updated_at  :datetime
Dmitriy Zaporozhets committed
11 12
#  type        :string(255)
#  description :string(255)      default(""), not null
Dmitriy Zaporozhets committed
13
#  avatar      :string(255)
14 15 16 17
#

require 'spec_helper'

Douwe Maan committed
18
describe Group, models: true do
19 20
  let!(:group) { create(:group) }

21
  describe 'associations' do
22 23
    it { is_expected.to have_many :projects }
    it { is_expected.to have_many :group_members }
24 25
  end

26 27 28 29 30 31 32 33 34 35 36 37 38 39
  describe 'modules' do
    subject { described_class }

    it { is_expected.to include_module(Referable) }
  end

  describe 'validations' do
    it { is_expected.to validate_presence_of :name }
    it { is_expected.to validate_uniqueness_of(:name) }
    it { is_expected.to validate_presence_of :path }
    it { is_expected.to validate_uniqueness_of(:path) }
    it { is_expected.not_to validate_presence_of :owner }
  end

40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
  describe '.visible_to_user' do
    let!(:group) { create(:group) }
    let!(:user)  { create(:user) }

    subject { described_class.visible_to_user(user) }

    describe 'when the user has access to a group' do
      before do
        group.add_user(user, Gitlab::Access::MASTER)
      end

      it { is_expected.to eq([group]) }
    end

    describe 'when the user does not have access to any groups' do
      it { is_expected.to eq([]) }
    end
  end

59
  describe 'scopes' do
60 61
    let!(:private_group)  { create(:group, :private)  }
    let!(:internal_group) { create(:group, :internal) }
62 63

    describe 'public_only' do
64
      subject { described_class.public_only.to_a }
65

Douwe Maan committed
66
      it{ is_expected.to eq([group]) }
67 68 69
    end

    describe 'public_and_internal_only' do
Douwe Maan committed
70
      subject { described_class.public_and_internal_only.to_a }
71

Douwe Maan committed
72
      it{ is_expected.to match_array([group, internal_group]) }
73 74 75
    end
  end

76 77 78 79 80
  describe '#to_reference' do
    it 'returns a String reference to the object' do
      expect(group.to_reference).to eq "@#{group.name}"
    end
  end
81 82

  describe :users do
83
    it { expect(group.users).to eq(group.owners) }
84 85 86
  end

  describe :human_name do
87
    it { expect(group.human_name).to eq(group.name) }
88
  end
89 90 91

  describe :add_users do
    let(:user) { create(:user) }
92
    before { group.add_user(user, GroupMember::MASTER) }
93

94
    it { expect(group.group_members.masters.map(&:user)).to include(user) }
95
  end
96 97 98

  describe :add_users do
    let(:user) { create(:user) }
99
    before { group.add_users([user.id], GroupMember::GUEST) }
100 101

    it "should update the group permission" do
102
      expect(group.group_members.guests.map(&:user)).to include(user)
103
      group.add_users([user.id], GroupMember::DEVELOPER)
104 105
      expect(group.group_members.developers.map(&:user)).to include(user)
      expect(group.group_members.guests.map(&:user)).not_to include(user)
106 107
    end
  end
Steven Thonus committed
108 109 110

  describe :avatar_type do
    let(:user) { create(:user) }
111
    before { group.add_user(user, GroupMember::MASTER) }
Steven Thonus committed
112 113 114

    it "should be true if avatar is image" do
      group.update_attribute(:avatar, 'uploads/avatar.png')
115
      expect(group.avatar_type).to be_truthy
Steven Thonus committed
116 117 118 119
    end

    it "should be false if avatar is html page" do
      group.update_attribute(:avatar, 'uploads/avatar.html')
120
      expect(group.avatar_type).to eq(["only images allowed"])
Steven Thonus committed
121 122
    end
  end
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148

  describe '.search' do
    it 'returns groups with a matching name' do
      expect(described_class.search(group.name)).to eq([group])
    end

    it 'returns groups with a partially matching name' do
      expect(described_class.search(group.name[0..2])).to eq([group])
    end

    it 'returns groups with a matching name regardless of the casing' do
      expect(described_class.search(group.name.upcase)).to eq([group])
    end

    it 'returns groups with a matching path' do
      expect(described_class.search(group.path)).to eq([group])
    end

    it 'returns groups with a partially matching path' do
      expect(described_class.search(group.path[0..2])).to eq([group])
    end

    it 'returns groups with a matching path regardless of the casing' do
      expect(described_class.search(group.path.upcase)).to eq([group])
    end
  end
149
end