Merge pull request #380 from warpc/263-product_build_list_refactoring
[Refs #263] Refactoring ProductBuildList. Add tests
This commit is contained in:
commit
916cee3bb3
|
@ -16,17 +16,20 @@ class ProductBuildList < ActiveRecord::Base
|
|||
|
||||
belongs_to :product
|
||||
|
||||
validates :product, :status, :presence => true
|
||||
validates :product_id, :status, :presence => true
|
||||
validates :status, :inclusion => { :in => [BUILD_STARTED, BUILD_COMPLETED, BUILD_FAILED] }
|
||||
|
||||
attr_accessor :base_url
|
||||
attr_accessible :status, :notified_at, :base_url
|
||||
attr_readonly :product_id
|
||||
|
||||
|
||||
scope :default_order, order('notified_at DESC')
|
||||
scope :for_status, lambda {|status| where(:status => status) }
|
||||
scope :for_user, lambda { |user| where(:user_id => user.id) }
|
||||
scope :scoped_to_product_name, lambda {|product_name| joins(:product).where('products.name LIKE ?', "%#{product_name}%")}
|
||||
scope :recent, order("#{table_name}.updated_at DESC")
|
||||
|
||||
attr_accessor :base_url
|
||||
|
||||
after_create :xml_rpc_create
|
||||
after_destroy :xml_delete_iso_container
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
%table.tablesorter{:cellpadding => "0", :cellspacing => "0"}
|
||||
%thead
|
||||
%tr
|
||||
-#%th.lpadding16= t("activerecord.attributes.product_build_list.bs_id")
|
||||
%th.lpadding16= t("activerecord.attributes.product_build_list.id")
|
||||
%th.lpadding16= t("activerecord.attributes.product_build_list.status")
|
||||
%th.lpadding16= t("activerecord.attributes.product_build_list.container_path")
|
||||
|
|
|
@ -1,23 +1,64 @@
|
|||
# -*- encoding : utf-8 -*-
|
||||
require 'spec_helper'
|
||||
|
||||
shared_examples_for 'admin' do
|
||||
|
||||
it "should be able to create ProductBuildList" do
|
||||
expect {
|
||||
post :create, valid_attributes
|
||||
}.to change(ProductBuildList, :count).by(1)
|
||||
response.should redirect_to([@product.platform, @product])
|
||||
end
|
||||
|
||||
it "should be able to destroy ProductBuildList" do
|
||||
expect {
|
||||
delete :destroy, valid_attributes_for_destroy
|
||||
}.to change(ProductBuildList, :count).by(-1)
|
||||
response.should redirect_to([@pbl.product.platform, @pbl.product])
|
||||
end
|
||||
|
||||
it 'should be able to view ProductBuildLists' do
|
||||
get :index
|
||||
response.should render_template(:index)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
describe ProductBuildListsController do
|
||||
before(:each) do
|
||||
stub_rsync_methods
|
||||
end
|
||||
|
||||
context 'crud' do
|
||||
def valid_attributes
|
||||
{:product_id => product.id, :platform_id => product.platform_id}
|
||||
|
||||
before(:each) do
|
||||
@product = FactoryGirl.create(:product)
|
||||
@pbl = FactoryGirl.create(:product_build_list, :product => @product)
|
||||
end
|
||||
|
||||
let(:product) { FactoryGirl.create(:product) }
|
||||
def valid_attributes
|
||||
{:product_id => @product.id, :platform_id => @product.platform_id}
|
||||
end
|
||||
|
||||
def valid_attributes_for_destroy
|
||||
{:id => @pbl.id, :product_id => @pbl.product.id, :platform_id => @pbl.product.platform.id }
|
||||
end
|
||||
|
||||
context 'for guest' do
|
||||
it 'should not be able to perform create action' do
|
||||
it 'should not be able to create ProductBuildList' do
|
||||
post :create, valid_attributes
|
||||
response.should redirect_to(new_user_session_path)
|
||||
end
|
||||
|
||||
it 'should not be able to destroy ProductBuildList' do
|
||||
delete :destroy, valid_attributes_for_destroy
|
||||
response.should redirect_to(new_user_session_path)
|
||||
end
|
||||
|
||||
it 'should not be able to view ProductBuildLists' do
|
||||
get :index
|
||||
response.should redirect_to(new_user_session_path)
|
||||
end
|
||||
end
|
||||
|
||||
context 'for user' do
|
||||
|
@ -27,38 +68,53 @@ describe ProductBuildListsController do
|
|||
post :create, valid_attributes
|
||||
response.should redirect_to(forbidden_url)
|
||||
end
|
||||
|
||||
it 'should not be able to perform create action' do
|
||||
delete :destroy, valid_attributes_for_destroy
|
||||
response.should redirect_to(forbidden_url)
|
||||
end
|
||||
|
||||
it 'should be able to view ProductBuildLists' do
|
||||
get :index
|
||||
response.should render_template(:index)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
context 'for admin' do
|
||||
before(:each) { set_session_for FactoryGirl.create(:admin) }
|
||||
|
||||
it "creates a new ProductBuildList" do
|
||||
expect {
|
||||
post :create, valid_attributes
|
||||
}.to change(ProductBuildList, :count).by(1)
|
||||
context 'for platform admin' do
|
||||
before(:each) do
|
||||
@user = FactoryGirl.create(:user)
|
||||
set_session_for(@user)
|
||||
@pbl.product.platform.relations.create!(:object_type => 'User', :object_id => @user.id, :role => 'admin')
|
||||
end
|
||||
|
||||
it "redirects to the product" do
|
||||
post :create, valid_attributes
|
||||
response.should redirect_to([product.platform, product])
|
||||
end
|
||||
it_should_behave_like 'admin'
|
||||
|
||||
end
|
||||
|
||||
context 'for global admin' do
|
||||
before(:each) { set_session_for FactoryGirl.create(:admin) }
|
||||
|
||||
it_should_behave_like 'admin'
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
context 'callbacks' do
|
||||
let(:product_build_list) { FactoryGirl.create(:product_build_list) }
|
||||
|
||||
let(:pbl) { FactoryGirl.create(:product_build_list) }
|
||||
|
||||
before(:each) do
|
||||
mock(controller).authenticate_product_builder! {true}
|
||||
end
|
||||
|
||||
def do_get
|
||||
get :status_build, :id => product_build_list.id, :status => ProductBuildList::BUILD_FAILED
|
||||
product_build_list.reload
|
||||
get :status_build, :id => pbl.id, :status => ProductBuildList::BUILD_FAILED
|
||||
pbl.reload
|
||||
end
|
||||
|
||||
it do
|
||||
expect { do_get }.to change(product_build_list, :status).to(ProductBuildList::BUILD_FAILED)
|
||||
end
|
||||
|
||||
it do
|
||||
do_get
|
||||
it "should update ProductBuildList status" do
|
||||
expect { do_get }.to change(pbl, :status).to(ProductBuildList::BUILD_FAILED)
|
||||
response.should be_success
|
||||
response.body.should be_blank
|
||||
end
|
||||
|
|
|
@ -2,5 +2,26 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe ProductBuildList do
|
||||
pending "add some examples to (or delete) #{__FILE__}"
|
||||
end
|
||||
before(:all) do
|
||||
stub_rsync_methods
|
||||
end
|
||||
|
||||
it { should belong_to(:product) }
|
||||
|
||||
it { should validate_presence_of(:product_id)}
|
||||
it { should validate_presence_of(:status)}
|
||||
|
||||
ProductBuildList::STATUSES.each do |value|
|
||||
it {should allow_value(value).for(:status)}
|
||||
end
|
||||
|
||||
it {should_not allow_value(555).for(:status)}
|
||||
|
||||
it { should have_readonly_attribute(:product_id) }
|
||||
it { should_not allow_mass_assignment_of(:product_id) }
|
||||
|
||||
it { should allow_mass_assignment_of(:status) }
|
||||
it { should allow_mass_assignment_of(:notified_at) }
|
||||
it { should allow_mass_assignment_of(:base_url) }
|
||||
|
||||
end
|
Loading…
Reference in New Issue