Commit 97423a0b authored by Robert Speicher's avatar Robert Speicher

Add more coverage for model validations and associations

parent 2bdea865
...@@ -18,11 +18,15 @@ FactoryGirl.define do ...@@ -18,11 +18,15 @@ FactoryGirl.define do
Faker::Lorem.sentence Faker::Lorem.sentence
end end
sequence :name, aliases: [:file_name] do
Faker::Name.name
end
sequence(:url) { Faker::Internet.uri('http') } sequence(:url) { Faker::Internet.uri('http') }
factory :user, aliases: [:author, :assignee, :owner] do factory :user, aliases: [:author, :assignee, :owner] do
email { Faker::Internet.email } email { Faker::Internet.email }
name { Faker::Name.name } name
password "123456" password "123456"
password_confirmation "123456" password_confirmation "123456"
...@@ -116,6 +120,11 @@ FactoryGirl.define do ...@@ -116,6 +120,11 @@ FactoryGirl.define do
author author
title title
content content
file_name { Faker::Lorem.sentence } file_name
end
factory :protected_branch do
name
project
end end
end end
...@@ -3,6 +3,7 @@ require 'spec_helper' ...@@ -3,6 +3,7 @@ require 'spec_helper'
describe Event do describe Event do
describe "Associations" do describe "Associations" do
it { should belong_to(:project) } it { should belong_to(:project) }
it { should belong_to(:target) }
end end
describe "Respond to" do describe "Respond to" do
......
...@@ -2,21 +2,11 @@ require 'spec_helper' ...@@ -2,21 +2,11 @@ require 'spec_helper'
describe Issue do describe Issue do
describe "Associations" do describe "Associations" do
it { should belong_to(:project) }
it { should belong_to(:author) }
it { should belong_to(:assignee) }
it { should belong_to(:milestone) } it { should belong_to(:milestone) }
end end
describe "Validation" do describe "Validation" do
it { should validate_presence_of(:title) } it { should ensure_length_of(:description).is_within(0..2000) }
it { should validate_presence_of(:author_id) }
it { should validate_presence_of(:project_id) }
end
describe "Scope" do
it { Issue.should respond_to :closed }
it { Issue.should respond_to :opened }
end end
describe 'modules' do describe 'modules' do
......
...@@ -2,12 +2,15 @@ require 'spec_helper' ...@@ -2,12 +2,15 @@ require 'spec_helper'
describe Key do describe Key do
describe "Associations" do describe "Associations" do
it { should belong_to(:user) or belong_to(:project) } it { should belong_to(:user) }
it { should belong_to(:project) }
end end
describe "Validation" do describe "Validation" do
it { should validate_presence_of(:title) } it { should validate_presence_of(:title) }
it { should validate_presence_of(:key) } it { should validate_presence_of(:key) }
it { should ensure_length_of(:title).is_within(0..255) }
it { should ensure_length_of(:key).is_within(0..5000) }
end end
describe "Methods" do describe "Methods" do
......
require 'spec_helper' require 'spec_helper'
describe MergeRequest do describe MergeRequest do
describe "Associations" do
it { should belong_to(:project) }
it { should belong_to(:author) }
it { should belong_to(:assignee) }
end
describe "Validation" do describe "Validation" do
it { should validate_presence_of(:target_branch) } it { should validate_presence_of(:target_branch) }
it { should validate_presence_of(:source_branch) } it { should validate_presence_of(:source_branch) }
it { should validate_presence_of(:title) }
it { should validate_presence_of(:author_id) }
it { should validate_presence_of(:project_id) }
end
describe "Scope" do
it { MergeRequest.should respond_to :closed }
it { MergeRequest.should respond_to :opened }
end end
describe 'modules' do describe 'modules' do
......
...@@ -3,6 +3,8 @@ require 'spec_helper' ...@@ -3,6 +3,8 @@ require 'spec_helper'
describe Note do describe Note do
describe "Associations" do describe "Associations" do
it { should belong_to(:project) } it { should belong_to(:project) }
it { should belong_to(:noteable) }
it { should belong_to(:author).class_name('User') }
end end
describe "Validation" do describe "Validation" do
......
...@@ -2,23 +2,52 @@ require 'spec_helper' ...@@ -2,23 +2,52 @@ require 'spec_helper'
describe Project do describe Project do
describe "Associations" do describe "Associations" do
it { should belong_to(:owner).class_name('User') }
it { should have_many(:users) } it { should have_many(:users) }
it { should have_many(:protected_branches).dependent(:destroy) }
it { should have_many(:events).dependent(:destroy) } it { should have_many(:events).dependent(:destroy) }
it { should have_many(:wikis).dependent(:destroy) }
it { should have_many(:merge_requests).dependent(:destroy) } it { should have_many(:merge_requests).dependent(:destroy) }
it { should have_many(:users_projects).dependent(:destroy) }
it { should have_many(:issues).dependent(:destroy) } it { should have_many(:issues).dependent(:destroy) }
it { should have_many(:milestones).dependent(:destroy) }
it { should have_many(:users_projects).dependent(:destroy) }
it { should have_many(:notes).dependent(:destroy) } it { should have_many(:notes).dependent(:destroy) }
it { should have_many(:snippets).dependent(:destroy) } it { should have_many(:snippets).dependent(:destroy) }
it { should have_many(:hooks).dependent(:destroy) }
it { should have_many(:deploy_keys).dependent(:destroy) } it { should have_many(:deploy_keys).dependent(:destroy) }
it { should have_many(:hooks).dependent(:destroy) }
it { should have_many(:wikis).dependent(:destroy) }
it { should have_many(:protected_branches).dependent(:destroy) }
end end
describe "Validation" do describe "Validation" do
let!(:project) { create(:project) }
it { should validate_presence_of(:name) } it { should validate_presence_of(:name) }
it { should validate_uniqueness_of(:name) }
it { should ensure_length_of(:name).is_within(0..255) }
it { should validate_presence_of(:path) } it { should validate_presence_of(:path) }
it { should validate_uniqueness_of(:path) }
it { should ensure_length_of(:path).is_within(0..255) }
# TODO: Formats
it { should ensure_length_of(:description).is_within(0..2000) }
it { should validate_presence_of(:code) } it { should validate_presence_of(:code) }
it { should validate_uniqueness_of(:code) }
it { should ensure_length_of(:code).is_within(1..255) }
# TODO: Formats
it { should validate_presence_of(:owner) }
it "should not allow new projects beyond user limits" do
project.stub(:owner).and_return(double(can_create_project?: false, projects_limit: 1))
project.should_not be_valid
project.errors[:base].first.should match(/Your own projects limit is 1/)
end
it "should not allow 'gitolite-admin' as repo name" do
should allow_value("blah").for(:path)
should_not allow_value("gitolite-admin").for(:path)
end
end end
describe "Respond to" do describe "Respond to" do
...@@ -73,9 +102,11 @@ describe Project do ...@@ -73,9 +102,11 @@ describe Project do
it { should respond_to(:trigger_post_receive) } it { should respond_to(:trigger_post_receive) }
end end
it "should not allow 'gitolite-admin' as repo name" do describe 'modules' do
should allow_value("blah").for(:path) it { should include_module(Repository) }
should_not allow_value("gitolite-admin").for(:path) it { should include_module(PushObserver) }
it { should include_module(Authority) }
it { should include_module(Team) }
end end
it "should return valid url to repo" do it "should return valid url to repo" do
......
require 'spec_helper' require 'spec_helper'
describe ProtectedBranch do describe ProtectedBranch do
let(:project) { Factory(:project) }
describe 'Associations' do describe 'Associations' do
it { should belong_to(:project) } it { should belong_to(:project) }
end end
...@@ -13,26 +11,26 @@ describe ProtectedBranch do ...@@ -13,26 +11,26 @@ describe ProtectedBranch do
end end
describe 'Callbacks' do describe 'Callbacks' do
subject { ProtectedBranch.new(project: project, name: 'branch_name') } let(:branch) { build(:protected_branch) }
it 'call update_repository after save' do it 'call update_repository after save' do
subject.should_receive(:update_repository) branch.should_receive(:update_repository)
subject.save branch.save
end end
it 'call update_repository after destroy' do it 'call update_repository after destroy' do
subject.should_receive(:update_repository) branch.save
subject.destroy branch.should_receive(:update_repository)
branch.destroy
end end
end end
describe '#commit' do describe '#commit' do
subject { ProtectedBranch.new(project: project, name: 'cant_touch_this') } let(:branch) { create(:protected_branch) }
it 'commits itself to its project' do it 'commits itself to its project' do
project.should_receive(:commit).with('cant_touch_this') branch.project.should_receive(:commit).with(branch.name)
branch.commit
subject.commit
end end
end end
end end
...@@ -3,14 +3,21 @@ require 'spec_helper' ...@@ -3,14 +3,21 @@ require 'spec_helper'
describe Snippet do describe Snippet do
describe "Associations" do describe "Associations" do
it { should belong_to(:project) } it { should belong_to(:project) }
it { should belong_to(:author) } it { should belong_to(:author).class_name('User') }
it { should have_many(:notes).dependent(:destroy) }
end end
describe "Validation" do describe "Validation" do
it { should validate_presence_of(:title) }
it { should validate_presence_of(:author_id) } it { should validate_presence_of(:author_id) }
it { should validate_presence_of(:project_id) } it { should validate_presence_of(:project_id) }
it { should validate_presence_of(:title) }
it { should ensure_length_of(:title).is_within(0..255) }
it { should validate_presence_of(:file_name) } it { should validate_presence_of(:file_name) }
it { should ensure_length_of(:title).is_within(0..255) }
it { should validate_presence_of(:content) } it { should validate_presence_of(:content) }
it { should ensure_length_of(:content).is_within(0..10_000) }
end end
end end
...@@ -2,13 +2,26 @@ require 'spec_helper' ...@@ -2,13 +2,26 @@ require 'spec_helper'
describe User do describe User do
describe "Associations" do describe "Associations" do
it { should have_many(:projects) }
it { should have_many(:users_projects).dependent(:destroy) } it { should have_many(:users_projects).dependent(:destroy) }
it { should have_many(:projects) }
it { should have_many(:my_own_projects).class_name('Project') }
it { should have_many(:keys).dependent(:destroy) }
it { should have_many(:events).class_name('Event').dependent(:destroy) }
it { should have_many(:recent_events).class_name('Event') }
it { should have_many(:issues).dependent(:destroy) } it { should have_many(:issues).dependent(:destroy) }
it { should have_many(:notes).dependent(:destroy) }
it { should have_many(:assigned_issues).dependent(:destroy) } it { should have_many(:assigned_issues).dependent(:destroy) }
it { should have_many(:merge_requests).dependent(:destroy) } it { should have_many(:merge_requests).dependent(:destroy) }
it { should have_many(:assigned_merge_requests).dependent(:destroy) } it { should have_many(:assigned_merge_requests).dependent(:destroy) }
it { should have_many(:notes).dependent(:destroy) } end
describe 'validations' do
it { should validate_presence_of(:projects_limit) }
it { should validate_numericality_of(:projects_limit) }
it { should allow_value(0).for(:projects_limit) }
it { should_not allow_value(-1).for(:projects_limit) }
it { should ensure_length_of(:bio).is_within(0..255) }
end end
describe "Respond to" do describe "Respond to" do
......
...@@ -7,7 +7,11 @@ describe UsersProject do ...@@ -7,7 +7,11 @@ describe UsersProject do
end end
describe "Validation" do describe "Validation" do
let!(:users_project) { create(:users_project) }
it { should validate_presence_of(:user_id) } it { should validate_presence_of(:user_id) }
it { should validate_uniqueness_of(:user_id).scoped_to(:project_id) }
it { should validate_presence_of(:project_id) } it { should validate_presence_of(:project_id) }
end end
......
...@@ -4,10 +4,12 @@ describe Wiki do ...@@ -4,10 +4,12 @@ describe Wiki do
describe "Associations" do describe "Associations" do
it { should belong_to(:project) } it { should belong_to(:project) }
it { should belong_to(:user) } it { should belong_to(:user) }
it { should have_many(:notes).dependent(:destroy) }
end end
describe "Validation" do describe "Validation" do
it { should validate_presence_of(:title) } it { should validate_presence_of(:title) }
it { should ensure_length_of(:title).is_within(1..250) }
it { should validate_presence_of(:content) } it { should validate_presence_of(:content) }
it { should validate_presence_of(:user_id) } it { should validate_presence_of(:user_id) }
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment