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

require 'spec_helper'

Douwe Maan's avatar
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 }
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
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

Felipe Artur's avatar
Felipe Artur committed
59
  describe 'scopes' do
60
61
62
    let!(:private_group)  { create(:group, :private)  }
    let!(:internal_group) { create(:group, :internal) }
    let!(:public_group)   { create(:group, :public) }
Felipe Artur's avatar
Felipe Artur committed
63
64

    describe 'public_only' do
65
      subject { described_class.public_only.to_a }
Felipe Artur's avatar
Felipe Artur committed
66
67
68
69
70

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

    describe 'public_and_internal_only' do
71
      subject { described_class.public_and_internal_only.to_a }
Felipe Artur's avatar
Felipe Artur committed
72
73
74
75
76

      it{ is_expected.to eq([public_group, internal_group]) }
    end
  end

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

  describe :users do
84
    it { expect(group.users).to eq(group.owners) }
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
85
86
87
  end

  describe :human_name do
88
    it { expect(group.human_name).to eq(group.name) }
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
89
  end
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
90
91
92

  describe :add_users do
    let(:user) { create(:user) }
93
    before { group.add_user(user, GroupMember::MASTER) }
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
94

95
    it { expect(group.group_members.masters.map(&:user)).to include(user) }
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
96
  end
97
98
99

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

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

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

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

    it "should be false if avatar is html page" do
      group.update_attribute(:avatar, 'uploads/avatar.html')
121
      expect(group.avatar_type).to eq(["only images allowed"])
Steven Thonus's avatar
Steven Thonus committed
122
123
    end
  end
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
149

  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
150
end