BigW Consortium Gitlab

namespace_spec.rb 3.43 KB
Newer Older
Dmitriy Zaporozhets committed
1 2 3 4
# == Schema Information
#
# Table name: namespaces
#
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)
Dmitriy Zaporozhets committed
14 15
#

16 17
require 'spec_helper'

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

21 22 23 24 25 26
  it { is_expected.to have_many :projects }
  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.to validate_presence_of :owner }
27 28 29 30 31

  describe "Mass assignment" do
  end

  describe "Respond to" do
32 33
    it { is_expected.to respond_to(:human_name) }
    it { is_expected.to respond_to(:to_param) }
34
  end
35 36

  describe :to_param do
37
    it { expect(namespace.to_param).to eq(namespace.path) }
38 39 40
  end

  describe :human_name do
41
    it { expect(namespace.human_name).to eq(namespace.owner_name) }
42 43
  end

44
  describe '.search' do
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
    let(:namespace) { create(:namespace) }

    it 'returns namespaces with a matching name' do
      expect(described_class.search(namespace.name)).to eq([namespace])
    end

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

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

    it 'returns namespaces with a matching path' do
      expect(described_class.search(namespace.path)).to eq([namespace])
61 62
    end

63 64 65 66 67 68 69
    it 'returns namespaces with a partially matching path' do
      expect(described_class.search(namespace.path[0..2])).to eq([namespace])
    end

    it 'returns namespaces with a matching path regardless of the casing' do
      expect(described_class.search(namespace.path.upcase)).to eq([namespace])
    end
70 71 72 73 74
  end

  describe :move_dir do
    before do
      @namespace = create :namespace
75
      allow(@namespace).to receive(:path_changed?).and_return(true)
76 77
    end

Johannes Schleifenbaum committed
78
    it "should raise error when directory exists" do
79
      expect { @namespace.move_dir }.to raise_error("namespace directory cannot be moved")
80 81 82 83
    end

    it "should move dir if path changed" do
      new_path = @namespace.path + "_new"
84 85
      allow(@namespace).to receive(:path_was).and_return(@namespace.path)
      allow(@namespace).to receive(:path).and_return(new_path)
86
      expect(@namespace.move_dir).to be_truthy
87 88 89 90 91
    end
  end

  describe :rm_dir do
    it "should remove dir" do
92
      expect(namespace.rm_dir).to be_truthy
93 94
    end
  end
95 96 97 98 99 100 101 102 103 104

  describe :find_by_path_or_name do
    before do
      @namespace = create(:namespace, name: 'WoW', path: 'woW')
    end

    it { expect(Namespace.find_by_path_or_name('wow')).to eq(@namespace) }
    it { expect(Namespace.find_by_path_or_name('WOW')).to eq(@namespace) }
    it { expect(Namespace.find_by_path_or_name('unknown')).to eq(nil) }
  end
105 106 107 108 109 110 111 112 113 114

  describe ".clean_path" do

    let!(:user)       { create(:user, username: "johngitlab-etc") }
    let!(:namespace)  { create(:namespace, path: "JohnGitLab-etc1") }

    it "cleans the path and makes sure it's available" do
      expect(Namespace.clean_path("-john+gitlab-ETC%.git@gmail.com")).to eq("johngitlab-ETC2")
    end
  end
115
end