project_spec.rb 5.2 KB
Newer Older
G
gitlabhq 已提交
1 2 3 4 5 6
require 'spec_helper'

describe Project do
  describe "Associations" do
    it { should have_many(:users) }
    it { should have_many(:users_projects) }
G
gitlabhq 已提交
7 8 9
    it { should have_many(:issues) }
    it { should have_many(:notes) }
    it { should have_many(:snippets) }
G
gitlabhq 已提交
10 11 12 13 14
  end

  describe "Validation" do
    it { should validate_presence_of(:name) }
    it { should validate_presence_of(:path) }
G
gitlabhq 已提交
15
    it { should validate_presence_of(:code) }
G
gitlabhq 已提交
16 17 18 19 20
  end

  describe "Respond to" do
    it { should respond_to(:readers) }
    it { should respond_to(:writers) }
21
    it { should respond_to(:repository_writers) }
G
gitlabhq 已提交
22 23 24
    it { should respond_to(:admins) }
    it { should respond_to(:add_access) }
    it { should respond_to(:reset_access) }
25 26
    it { should respond_to(:update_repository) }
    it { should respond_to(:destroy_repository) }
G
gitlabhq 已提交
27 28 29 30 31 32 33 34 35 36 37
    it { should respond_to(:public?) }
    it { should respond_to(:private?) }
    it { should respond_to(:url_to_repo) }
    it { should respond_to(:path_to_repo) }
    it { should respond_to(:valid_repo?) }
    it { should respond_to(:repo_exists?) }
    it { should respond_to(:repo) }
    it { should respond_to(:tags) }
    it { should respond_to(:commit) }
  end

38
  it "should not allow 'gitolite-admin' as repo name" do
G
gitlabhq 已提交
39
    should allow_value("blah").for(:path)
40
    should_not allow_value("gitolite-admin").for(:path)
G
gitlabhq 已提交
41 42
  end

N
Nihad Abbasov 已提交
43
  it "should return valid url to repo" do
G
gitlabhq 已提交
44 45 46 47
    project = Project.new(:path => "somewhere")
    project.url_to_repo.should == "git@localhost:somewhere.git"
  end

N
Nihad Abbasov 已提交
48
  it "should return path to repo" do
G
gitlabhq 已提交
49
    project = Project.new(:path => "somewhere")
G
gitlabhq 已提交
50
    project.path_to_repo.should == File.join(Rails.root, "tmp", "tests", "somewhere")
G
gitlabhq 已提交
51 52
  end

N
Nihad Abbasov 已提交
53 54
  describe :valid_repo? do
    it "should be valid repo" do
G
gitlabhq 已提交
55
      project = Factory :project
N
Nihad Abbasov 已提交
56
      project.valid_repo?.should be_true
G
gitlabhq 已提交
57 58 59 60 61 62 63 64
    end

    it "should be invalid repo" do
      project = Project.new(:name => "ok_name", :path => "/INVALID_PATH/", :code => "NEOK")
      project.valid_repo?.should be_false
    end
  end

N
Nihad Abbasov 已提交
65
  describe "updates" do
G
gitlabhq 已提交
66 67
    let(:project) { Factory :project }

N
Nihad Abbasov 已提交
68
    before do
G
gitlabhq 已提交
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
      @issue = Factory :issue,
        :project => project,
        :author => Factory(:user),
        :assignee => Factory(:user)

      @note = Factory :note,
        :project => project,
        :author => Factory(:user)

      @commit = project.fresh_commits(1).first
    end

    describe "return commit, note & issue" do
      it { project.updates(3).count.should == 3 }
      it { project.updates(3).last.id.should == @commit.id }
      it { project.updates(3).include?(@issue).should be_true }
      it { project.updates(3).include?(@note).should be_true }
    end
  end

N
Nihad Abbasov 已提交
89
  describe "last_activity" do
G
gitlabhq 已提交
90 91
    let(:project) { Factory :project }

N
Nihad Abbasov 已提交
92
    before do
G
gitlabhq 已提交
93 94 95 96 97 98 99 100 101
      @note = Factory :note,
        :project => project,
        :author => Factory(:user)
    end

    it { project.last_activity.should == @note }
    it { project.last_activity_date.to_s.should == @note.created_at.to_s }
  end

N
Nihad Abbasov 已提交
102
  describe "fresh commits" do
G
gitlabhq 已提交
103 104 105 106 107 108 109
    let(:project) { Factory :project }

    it { project.fresh_commits(3).count.should == 3 }
    it { project.fresh_commits.first.id.should == "2fb376f61875b58bceee0492e270e9c805294b1a" }
    it { project.fresh_commits.last.id.should == "0dac878dbfe0b9c6104a87d65fe999149a8d862c" }
  end

N
Nihad Abbasov 已提交
110
  describe "Git methods" do
G
gitlabhq 已提交
111 112
    let(:project) { Factory :project }

N
Nihad Abbasov 已提交
113 114
    describe :repo do
      it "should return valid repo" do
G
gitlabhq 已提交
115 116 117
        project.repo.should be_kind_of(Grit::Repo)
      end

N
Nihad Abbasov 已提交
118
      it "should return nil" do
G
gitlabhq 已提交
119 120 121
        lambda { Project.new(:path => "invalid").repo }.should raise_error(Grit::NoSuchPathError)
      end

N
Nihad Abbasov 已提交
122
      it "should return nil" do
G
gitlabhq 已提交
123 124 125 126
        lambda { Project.new.repo }.should raise_error(TypeError)
      end
    end

N
Nihad Abbasov 已提交
127 128
    describe :commit do
      it "should return first head commit if without params" do
G
gitlabhq 已提交
129 130 131
        project.commit.id.should == project.repo.commits.first.id
      end

N
Nihad Abbasov 已提交
132
      it "should return valid commit" do
G
gitlabhq 已提交
133 134 135
        project.commit(ValidCommit::ID).should be_valid_commit
      end

N
Nihad Abbasov 已提交
136
      it "should return nil" do
G
gitlabhq 已提交
137 138 139 140
        project.commit("+123_4532530XYZ").should be_nil
      end
    end

N
Nihad Abbasov 已提交
141 142
    describe :tree do
      before do
G
gitlabhq 已提交
143 144 145
        @commit = project.commit(ValidCommit::ID)
      end

N
Nihad Abbasov 已提交
146
      it "should raise error w/o arguments" do
G
gitlabhq 已提交
147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
        lambda { project.tree }.should raise_error
      end

      it "should return root tree for commit" do
        tree = project.tree(@commit)
        tree.contents.size.should == ValidCommit::FILES_COUNT
        tree.contents.map(&:name).should == ValidCommit::FILES
      end

      it "should return root tree for commit with correct path" do
        tree = project.tree(@commit, ValidCommit::C_FILE_PATH)
        tree.contents.map(&:name).should == ValidCommit::C_FILES
      end

      it "should return root tree for commit with incorrect path" do
        project.tree(@commit, "invalid_path").should be_nil
      end
    end
  end
end
# == Schema Information
#
# Table name: projects
#
#  id           :integer         not null, primary key
#  name         :string(255)
#  path         :string(255)
#  description  :text
#  created_at   :datetime
#  updated_at   :datetime
#  private_flag :boolean         default(TRUE), not null
#  code         :string(255)
V
Valera Sizov 已提交
179
#  owner_id     :integer
G
gitlabhq 已提交
180 181
#