rosa-build/spec/models/build_list_spec.rb

238 lines
9.6 KiB
Ruby

# -*- encoding : utf-8 -*-
require 'spec_helper'
describe BuildList do
before { stub_symlink_methods }
context 'validates that repository contains project' do
it 'when repository contains project' do
bl = FactoryGirl.build(:build_list)
bl.valid?.should be_true
end
it 'when repository does not contain project' do
bl = FactoryGirl.build(:build_list)
bl.project.repositories = []
bl.valid?.should be_false
end
end
context "#notify_users" do
let!(:user) { FactoryGirl.create(:user) }
let!(:build_list) { FactoryGirl.create(:build_list,
:user => user,
:auto_publish => false) }
let!(:build_list_package) { FactoryGirl.create(:build_list_package,
:build_list => build_list,
:project => build_list.project) }
before(:all) { ActionMailer::Base.deliveries = [] }
before do
build_list.update_attributes({:commit_hash => build_list.project.repo.commits('master').last.id,
:status => BuildList::BUILD_STARTED}, :without_protection => true)
end
after { ActionMailer::Base.deliveries = [] }
shared_examples_for 'build list notifications by email' do
it "gets notification by email when status - Build complete" do
build_list.build_success
should have(1).item
end
it "gets notification by email when status - Build error" do
build_list.build_error
should have(1).item
end
it "gets notification by email when auto_publish and status - Build error" do
build_list.update_attributes(:auto_publish => true)
build_list.build_error
should have(1).item
end
it "gets notification by email when status - Failed publish" do
build_list.update_attributes({:status => BuildList::BUILD_PUBLISH}, :without_protection => true)
build_list.fail_publish
should have(1).item
end
it "gets notification by email when auto_publish and status - Failed publish" do
build_list.update_attributes({:auto_publish => true, :status => BuildList::BUILD_PUBLISH}, :without_protection => true)
build_list.fail_publish
should have(1).item
end
it "gets notification by email when status - Build published" do
build_list.update_attributes({:status => BuildList::BUILD_PUBLISH}, :without_protection => true)
build_list.published
should have(1).item
end
it "gets notification by email when auto_publish and status - Build published" do
build_list.update_attributes({:auto_publish => true, :status => BuildList::BUILD_PUBLISH}, :without_protection => true)
build_list.published
should have(1).item
end
it "doesn't get notification by email when auto_publish and status - Build complete" do
build_list.update_attributes(:auto_publish => true)
build_list.build_success
should have(:no).items
end
it "doesn't get notification by email when mass build" do
build_list.update_attributes({:mass_build_id => 1, :status => BuildList::BUILD_PUBLISH}, :without_protection => true)
build_list.published
should have(:no).items
end
it "doesn't get notification by email when notification by email has been disabled" do
notifier.update_attributes(:can_notify => false)
build_list.build_success
should have(:no).items
end
end
subject { ActionMailer::Base.deliveries }
context "user created build task" do
let!(:notifier) { user.notifier }
before do
notifier.update_attributes(:new_associated_build => false)
build_list.project.owner.notifier.update_attributes(:can_notify => false)
end
it_should_behave_like 'build list notifications by email'
it "doesn't get notification by email when 'build list' notifications has been disabled" do
notifier.update_attributes(:new_build => false)
build_list.build_success
should have(:no).items
end
it "doesn't get notification by email when 'build list' notifications - enabled, email notifications - disabled" do
notifier.update_attributes(:can_notify => false, :new_build => true)
build_list.build_success
should have(:no).items
end
end
context "build task has been created and associated user" do
let!(:notifier) { build_list.project.owner.notifier }
before do
notifier.update_attributes(:new_build => false)
user.notifier.update_attributes(:can_notify => false)
end
it_should_behave_like 'build list notifications by email'
it "doesn't get notification by email when 'associated build list' notifications has been disabled" do
notifier.update_attributes(:new_associated_build => false)
build_list.build_success
should have(:no).items
end
it "doesn't get notification by email when 'associated build list' notifications - enabled, email notifications - disabled" do
notifier.update_attributes(:can_notify => false, :new_associated_build => true)
build_list.build_success
should have(:no).items
end
end
it "doesn't get 2 notification by email when user associated to project and created task" do
project = FactoryGirl.create(:project_with_commit, :owner => user)
bl = FactoryGirl.create(:build_list_with_attaching_project,
:user => user,
:auto_publish => true,
:project => project
)
FactoryGirl.create(:build_list_package, :build_list => bl, :project => bl.project)
bl.update_attributes({:commit_hash => bl.project.repo.commits('master').last.id,
:status => BuildList::BUILD_PUBLISH}, :without_protection => true)
bl.published
should have(1).item
end
end # notify_users
context '#has_new_packages?' do
let!(:build_list) { FactoryGirl.create( :build_list,
:status => BuildList::SUCCESS,
:auto_publish => true) }
let!(:build_list_package) { FactoryGirl.create( :build_list_package,
:build_list => build_list,
:version => '3.1.12',
:release => 6,
:platform => build_list.save_to_platform,
:project => build_list.project) }
let!(:published_build_list) { FactoryGirl.create( :build_list,
:project => build_list.project,
:status => BuildList::BUILD_PUBLISHED,
:save_to_platform => build_list.save_to_platform,
:arch => build_list.arch) }
let!(:published_build_list_package) { FactoryGirl.create( :build_list_package,
:build_list => published_build_list,
:platform => published_build_list.save_to_platform,
:actual => true,
:version => '3.1.12',
:release => 6,
:project => published_build_list.project) }
it 'ensures that return false if version of packages are same and platform is released' do
build_list.save_to_platform.update_attributes(:released => true)
build_list.has_new_packages?.should be_false
end
it 'ensures that return true if version of packages are same and platform is not released' do
build_list.has_new_packages?.should be_true
end
context 'ensures that return false if version of published package >' do
it 'published: 3.1.13, new: 3.1.12' do
published_build_list_package.update_attributes(:version => '3.1.13')
build_list.has_new_packages?.should be_false
end
it 'published: 3.1.12, new: 3.0.999' do
build_list_package.update_attributes(:version => '3.0.999')
build_list.has_new_packages?.should be_false
end
it 'published: 3.0.0, new: 3.0.rc1' do
published_build_list_package.update_attributes(:version => '3.0.0')
build_list_package.update_attributes(:version => '3.0.rc1')
build_list.has_new_packages?.should be_false
end
end
context 'ensures that return true if version of published package <' do
it 'published: 3.1.11, new: 3.1.12' do
published_build_list_package.update_attributes(:version => '3.1.11')
build_list.has_new_packages?.should be_true
end
it 'published: 3.0.999, new: 3.1.12' do
published_build_list_package.update_attributes(:version => '3.0.999')
build_list.has_new_packages?.should be_true
end
it 'published: 3.0.rc1, new: 3.0.0' do
published_build_list_package.update_attributes(:version => '3.0.rc1')
build_list_package.update_attributes(:version => '3.0.0')
build_list.has_new_packages?.should be_true
end
end
it 'ensures that return true if release of published package <' do
published_build_list_package.update_attributes(:release => 5)
build_list.has_new_packages?.should be_true
end
end
end