Skip to content
Snippets Groups Projects
Commit 97423a0b authored by Robert Speicher's avatar Robert Speicher
Browse files

Add more coverage for model validations and associations

parent 2bdea865
No related branches found
No related tags found
1 merge request!1333Increased model spec coverage
Loading
Loading
@@ -18,11 +18,15 @@ FactoryGirl.define do
Faker::Lorem.sentence
end
 
sequence :name, aliases: [:file_name] do
Faker::Name.name
end
sequence(:url) { Faker::Internet.uri('http') }
 
factory :user, aliases: [:author, :assignee, :owner] do
email { Faker::Internet.email }
name { Faker::Name.name }
name
password "123456"
password_confirmation "123456"
 
Loading
Loading
@@ -116,6 +120,11 @@ FactoryGirl.define do
author
title
content
file_name { Faker::Lorem.sentence }
file_name
end
factory :protected_branch do
name
project
end
end
Loading
Loading
@@ -3,6 +3,7 @@ require 'spec_helper'
describe Event do
describe "Associations" do
it { should belong_to(:project) }
it { should belong_to(:target) }
end
 
describe "Respond to" do
Loading
Loading
Loading
Loading
@@ -2,21 +2,11 @@ require 'spec_helper'
 
describe Issue do
describe "Associations" do
it { should belong_to(:project) }
it { should belong_to(:author) }
it { should belong_to(:assignee) }
it { should belong_to(:milestone) }
end
 
describe "Validation" do
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 { Issue.should respond_to :closed }
it { Issue.should respond_to :opened }
it { should ensure_length_of(:description).is_within(0..2000) }
end
 
describe 'modules' do
Loading
Loading
Loading
Loading
@@ -2,12 +2,15 @@ require 'spec_helper'
 
describe Key do
describe "Associations" do
it { should belong_to(:user) or belong_to(:project) }
it { should belong_to(:user) }
it { should belong_to(:project) }
end
 
describe "Validation" do
it { should validate_presence_of(:title) }
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
 
describe "Methods" do
Loading
Loading
require 'spec_helper'
 
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
it { should validate_presence_of(:target_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
 
describe 'modules' do
Loading
Loading
Loading
Loading
@@ -3,6 +3,8 @@ require 'spec_helper'
describe Note do
describe "Associations" do
it { should belong_to(:project) }
it { should belong_to(:noteable) }
it { should belong_to(:author).class_name('User') }
end
 
describe "Validation" do
Loading
Loading
Loading
Loading
@@ -2,23 +2,52 @@ require 'spec_helper'
 
describe Project do
describe "Associations" do
it { should belong_to(:owner).class_name('User') }
it { should have_many(:users) }
it { should have_many(:protected_branches).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(:users_projects).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(:snippets).dependent(:destroy) }
it { should have_many(:hooks).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
 
describe "Validation" do
let!(:project) { create(:project) }
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_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_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
 
describe "Respond to" do
Loading
Loading
@@ -73,9 +102,11 @@ describe Project do
it { should respond_to(:trigger_post_receive) }
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)
describe 'modules' do
it { should include_module(Repository) }
it { should include_module(PushObserver) }
it { should include_module(Authority) }
it { should include_module(Team) }
end
 
it "should return valid url to repo" do
Loading
Loading
require 'spec_helper'
 
describe ProtectedBranch do
let(:project) { Factory(:project) }
describe 'Associations' do
it { should belong_to(:project) }
end
Loading
Loading
@@ -13,26 +11,26 @@ describe ProtectedBranch do
end
 
describe 'Callbacks' do
subject { ProtectedBranch.new(project: project, name: 'branch_name') }
let(:branch) { build(:protected_branch) }
 
it 'call update_repository after save' do
subject.should_receive(:update_repository)
subject.save
branch.should_receive(:update_repository)
branch.save
end
 
it 'call update_repository after destroy' do
subject.should_receive(:update_repository)
subject.destroy
branch.save
branch.should_receive(:update_repository)
branch.destroy
end
end
 
describe '#commit' do
subject { ProtectedBranch.new(project: project, name: 'cant_touch_this') }
let(:branch) { create(:protected_branch) }
 
it 'commits itself to its project' do
project.should_receive(:commit).with('cant_touch_this')
subject.commit
branch.project.should_receive(:commit).with(branch.name)
branch.commit
end
end
end
Loading
Loading
@@ -3,14 +3,21 @@ require 'spec_helper'
describe Snippet do
describe "Associations" do
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
 
describe "Validation" do
it { should validate_presence_of(:title) }
it { should validate_presence_of(:author_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 ensure_length_of(:title).is_within(0..255) }
it { should validate_presence_of(:content) }
it { should ensure_length_of(:content).is_within(0..10_000) }
end
end
Loading
Loading
@@ -2,13 +2,26 @@ require 'spec_helper'
 
describe User do
describe "Associations" do
it { should have_many(:projects) }
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(:notes).dependent(:destroy) }
it { should have_many(:assigned_issues).dependent(:destroy) }
it { should have_many(: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
 
describe "Respond to" do
Loading
Loading
Loading
Loading
@@ -7,7 +7,11 @@ describe UsersProject do
end
 
describe "Validation" do
let!(:users_project) { create(:users_project) }
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) }
end
 
Loading
Loading
Loading
Loading
@@ -4,10 +4,12 @@ describe Wiki do
describe "Associations" do
it { should belong_to(:project) }
it { should belong_to(:user) }
it { should have_many(:notes).dependent(:destroy) }
end
 
describe "Validation" do
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(:user_id) }
end
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment