diff --git a/app/models/product.rb b/app/models/product.rb index f499d53..fb6bcbc 100644 --- a/app/models/product.rb +++ b/app/models/product.rb @@ -49,4 +49,8 @@ class Product < ActiveRecord::Base save! end + def url + enterprise.generate_url(:controller => 'catalog', :action => 'show', :id => id) + end + end diff --git a/app/models/products_block.rb b/app/models/products_block.rb new file mode 100644 index 0000000..e498e08 --- /dev/null +++ b/app/models/products_block.rb @@ -0,0 +1,15 @@ +class ProductsBlock < Block + + include ActionView::Helpers::TagHelper + include ActionView::Helpers::UrlHelper + include ActionController::UrlWriter + + def content + block_title(_('Products')) + + content_tag( + 'ul', + owner.products.map {|product| content_tag('li', link_to(product.name, product.url), :class => 'product', :style => 'background-image:url(%s)' % ( product.image ? product.image.public_filename(:minor) : '/images/icons-app/product-default-pic-minor.png' ) )} + ) + end + +end diff --git a/test/unit/product_test.rb b/test/unit/product_test.rb index a6f5de6..163cb65 100644 --- a/test/unit/product_test.rb +++ b/test/unit/product_test.rb @@ -108,4 +108,18 @@ class ProductTest < Test::Unit::TestCase assert_not_includes prods, prod2 end + should 'provide url' do + product = Product.new + + result = mock + + enterprise = Enterprise.new + enterprise.expects(:generate_url).with(:controller => 'catalog', :action => 'show', :id => 999).returns(result) + + product.expects(:id).returns(999) + product.expects(:enterprise).returns(enterprise) + + assert_same result, product.url + end + end diff --git a/test/unit/products_block_test.rb b/test/unit/products_block_test.rb new file mode 100644 index 0000000..ac56bce --- /dev/null +++ b/test/unit/products_block_test.rb @@ -0,0 +1,32 @@ +require File.dirname(__FILE__) + '/../test_helper' + +class ProductsBlockTest < ActiveSupport::TestCase + + def setup + @block = ProductsBlock.new + end + attr_reader :block + + should 'be inherit from block' do + assert_kind_of Block, block + end + + should "list owner's products" do + + enterprise = Enterprise.create!(:name => 'testenterprise', :identifier => 'testenterprise') + enterprise.products.create!(:name => 'product one') + enterprise.products.create!(:name => 'product two') + + block.stubs(:owner).returns(enterprise) + + + content = block.content + + assert_tag_in_string content, :content => 'Products' + + assert_tag_in_string content, :tag => 'li', :attributes => { :class => 'product' }, :descendant => { :tag => 'a', :content => /product one/ } + assert_tag_in_string content, :tag => 'li', :attributes => { :class => 'product' }, :descendant => { :tag => 'a', :content => /product two/ } + + end + +end -- libgit2 0.21.2