Commit 1195da20b6313966ce016b3d48d24c0c7acbb012
1 parent
de79cb02
Exists in
master
and in
28 other branches
ActionItem440: displaying list of products
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@2036 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
11 changed files
with
103 additions
and
28 deletions
Show diff stats
app/controllers/public/catalog_controller.rb
| ... | ... | @@ -12,7 +12,9 @@ class CatalogController < ApplicationController |
| 12 | 12 | |
| 13 | 13 | protected |
| 14 | 14 | def check_enterprise |
| 15 | - @profile.kind_of? Enterprise | |
| 15 | + unless @profile.kind_of? Enterprise | |
| 16 | + redirect_to :controller => 'profile', :profile => profile.identifier, :action => 'index' | |
| 17 | + end | |
| 16 | 18 | end |
| 17 | 19 | |
| 18 | 20 | end | ... | ... |
app/views/blocks/profile_info.rhtml
| ... | ... | @@ -6,6 +6,7 @@ |
| 6 | 6 | <li><%= _('Since %{year}/%{month}') % { :year => block.owner.created_at.year, :month => block.owner.created_at.month } %></li> |
| 7 | 7 | <li><%= link_to _('Homepage'), block.owner.url %></li> |
| 8 | 8 | <li><%= link_to _('View profile'), block.owner.public_profile_url %></li> |
| 9 | + <li><%= link_to(_('Products/Services'), :controller => 'catalog', :profile => block.owner.identifier) if block.owner.enterprise? %></li> | |
| 9 | 10 | <% if !user.nil? and user.has_permission?('edit_profile', profile) %> |
| 10 | 11 | <li><%= link_to _('Control panel'), :controller => 'profile_editor' %></li> |
| 11 | 12 | <% end %> | ... | ... |
app/views/catalog/index.rhtml
| 1 | -<h2> <%= _('Catalog') %> </h2> | |
| 1 | +<h1> <%= _('%s:Products/Services') % @profile.name %> </h1> | |
| 2 | 2 | |
| 3 | -<ul> | |
| 3 | +<table align='center'> | |
| 4 | + <tr> | |
| 5 | + <th colspan="2"><%= _('Product/Service') %></th> | |
| 6 | + <th><%= _('Price') %></th> | |
| 7 | + </tr> | |
| 4 | 8 | <% @products.each do |p| %> |
| 5 | - <li> | |
| 6 | - <%= link_to p.name, :action => 'show', :id => p %> <br/> | |
| 7 | - <%= image_tag p.image.public_filename if p.image %> <br/> | |
| 8 | - <%= p.price %> <br/><br/> | |
| 9 | - </li> | |
| 9 | + <tr> | |
| 10 | + <td> <%= image_tag p.image.public_filename if p.image %> </td> | |
| 11 | + <td> <%= link_to p.name, :action => 'show', :id => p %> </td> | |
| 12 | + <td> <%= p.price || content_tag('em', _('not informed')) %> </th> | |
| 13 | + </tr> | |
| 10 | 14 | <% end %> |
| 11 | -</ul> | |
| 15 | +</table> | ... | ... |
app/views/catalog/show.rhtml
| 1 | -<h2> <%= @product.name %> </h2> | |
| 1 | +<h1> <%= @product.name %> </h1> | |
| 2 | 2 | |
| 3 | -<%= image_tag @product.image.public_filename if @product.image %> <br/> | |
| 4 | -<%= @product.price %> <br/> | |
| 5 | -<%= @product.description %> <br/> | |
| 3 | +<table> | |
| 4 | + <tr> | |
| 5 | + <td> | |
| 6 | + <%= image_tag @product.image.public_filename, :style => 'float: left;' if @product.image %> | |
| 7 | + </td> | |
| 8 | + <td> | |
| 9 | + <%= @product.description %> | |
| 10 | + </td> | |
| 11 | + </tr> | |
| 12 | + <tr> | |
| 13 | + <td colspan="2"> | |
| 14 | + <ul> | |
| 15 | + <li> | |
| 16 | + <strong><%= _('Price:') %></strong><%= @product.price || _('not informed') %> | |
| 17 | + </li> | |
| 18 | + <li> | |
| 19 | + <%= _('Category: %s ') % link_to_category(@product.product_category) %> <br/> | |
| 20 | + </li> | |
| 21 | + </ul> | |
| 22 | + </td> | |
| 23 | + </tr> | |
| 24 | +</table> | |
| 6 | 25 | |
| 7 | 26 | |
| 8 | -<%= _('Category: %s ') % link_to_category(@product.product_category) %> <br/> | |
| 27 | + | |
| 28 | +<% button_bar do %> | |
| 29 | + <%= button :back, _('View products/services listing'), :action => 'index', :id => nil %> | |
| 30 | +<% end %> | ... | ... |
app/views/profile/index.rhtml
| ... | ... | @@ -25,6 +25,9 @@ |
| 25 | 25 | <% if profile.kind_of? Organization %> |
| 26 | 26 | <li><%= link_to _('Members'), :action => 'members' %></li> |
| 27 | 27 | <% end %> |
| 28 | + <% if profile.kind_of? Enterprise %> | |
| 29 | + <li><%= link_to _('Products/Services'), :controller => 'catalog', :action => 'index' %></li> | |
| 30 | + <% end %> | |
| 28 | 31 | |
| 29 | 32 | <li> |
| 30 | 33 | <%= _('Tags:') %> | ... | ... |
config/routes.rb
| ... | ... | @@ -41,6 +41,10 @@ ActionController::Routing::Routes.draw do |map| |
| 41 | 41 | # public profile information |
| 42 | 42 | map.profile 'profile/:profile/:action/:id', :controller => 'profile', :action => 'index', :id => /.*/, :profile => /[a-z][a-z0-9._-]*/ |
| 43 | 43 | |
| 44 | + # catalog | |
| 45 | + map.catalog 'catalog/:profile', :controller => 'catalog', :action => 'index' | |
| 46 | + map.product 'catalog/:profile/:id', :controller => 'catalog', :action => 'show' | |
| 47 | + | |
| 44 | 48 | ###################################################### |
| 45 | 49 | ## Controllers that are profile-specific (for profile admins ) |
| 46 | 50 | ###################################################### |
| ... | ... | @@ -69,10 +73,7 @@ ActionController::Routing::Routes.draw do |map| |
| 69 | 73 | ## Test controllers. |
| 70 | 74 | ## FIXME: this should not be needed |
| 71 | 75 | ###################################################### |
| 72 | - map.connect 'test/:controller/:action/:id' , :controller => /.*test.*/ | |
| 73 | - | |
| 74 | - map.connect ':profile/catalog/:action/:id', :controller => 'catalog' | |
| 75 | - | |
| 76 | + map.connect 'test/:controller/:action/:id' , :controller => /.*test.*/ | |
| 76 | 77 | |
| 77 | 78 | # *content viewing* |
| 78 | 79 | # XXX this route must come last so other routes have priority over it. | ... | ... |
script/anhetegua
| ... | ... | @@ -147,13 +147,6 @@ colivre = new_validator(ba, "Colivre", 'colivre', Enterprise) |
| 147 | 147 | # Role for own things |
| 148 | 148 | owner_role = Profile::Roles.admin |
| 149 | 149 | |
| 150 | -# root user of the system, admin_role for him, the assignment of the role for him and the ownership of the system homepage | |
| 151 | -root = User.create!(:login => 'root', :email => 'root@noosfero.org', :password => 'root', :password_confirmation => 'root').person | |
| 152 | -admin_role = Environment::Roles.admin | |
| 153 | - | |
| 154 | -RoleAssignment.create!(:accessor => root, :role => admin_role, :resource => Environment.default) | |
| 155 | -RoleAssignment.create!(:accessor => root, :role => owner_role, :resource => Environment.default) | |
| 156 | - | |
| 157 | 150 | # Sample user and sample enterprise owned by him |
| 158 | 151 | ze = User.create!(:login => 'ze', :email => 'ze@localhost.localdomain', :password => 'test', :password_confirmation => 'test').person |
| 159 | 152 | empa = Enterprise.create!(:name => 'Cooperativa A', :identifier => 'coop_a') | ... | ... |
test/functional/catalog_controller_test.rb
| ... | ... | @@ -9,6 +9,8 @@ class CatalogControllerTest < Test::Unit::TestCase |
| 9 | 9 | @controller = CatalogController.new |
| 10 | 10 | @request = ActionController::TestRequest.new |
| 11 | 11 | @response = ActionController::TestResponse.new |
| 12 | + | |
| 13 | + @enterprise = Enterprise.create!(:name => 'My enterprise', :identifier => 'testent') | |
| 12 | 14 | end |
| 13 | 15 | |
| 14 | 16 | def test_local_files_reference |
| ... | ... | @@ -19,18 +21,48 @@ class CatalogControllerTest < Test::Unit::TestCase |
| 19 | 21 | def test_valid_xhtml |
| 20 | 22 | assert_valid_xhtml |
| 21 | 23 | end |
| 24 | + | |
| 25 | + should 'not display for non-enterprises' do | |
| 26 | + u = create_user('testinguser').person | |
| 27 | + get :index, :profile => 'testinguser' | |
| 28 | + assert_redirected_to :controller => "profile", :profile => 'testinguser' | |
| 29 | + end | |
| 30 | + | |
| 31 | + should 'display for enterprises' do | |
| 32 | + get :index, :profile => 'testent' | |
| 33 | + assert_response :success | |
| 34 | + end | |
| 22 | 35 | |
| 23 | 36 | should 'list products of enterprise' do |
| 24 | 37 | ent = Enterprise.create!(:identifier => 'test_enterprise1', :name => 'Test enteprise1') |
| 25 | 38 | get :index, :profile => ent.identifier |
| 26 | - assert_tag :tag => 'h2', :content => /Catalog/ | |
| 39 | + assert_kind_of Array, assigns(:products) | |
| 27 | 40 | end |
| 28 | 41 | |
| 29 | 42 | should 'show product of enterprise' do |
| 30 | 43 | ent = Enterprise.create!(:identifier => 'test_enterprise1', :name => 'Test enteprise1') |
| 31 | 44 | prod = ent.products.create!(:name => 'Product test') |
| 32 | 45 | get :show, :id => prod.id, :profile => ent.identifier |
| 33 | - assert_tag :tag => 'h2', :content => /#{prod.name}/ | |
| 46 | + assert_tag :tag => 'h1', :content => /#{prod.name}/ | |
| 47 | + end | |
| 48 | + | |
| 49 | + should 'link back to index from product show' do | |
| 50 | + ent = Enterprise.create!(:identifier => 'test_enterprise1', :name => 'Test enteprise1') | |
| 51 | + prod = ent.products.create!(:name => 'Product test') | |
| 52 | + get :show, :id => prod.id, :profile => ent.identifier | |
| 53 | + assert_tag({ | |
| 54 | + :tag => 'div', | |
| 55 | + :attributes => { | |
| 56 | + :class => /main-block/ | |
| 57 | + }, | |
| 58 | + :descendant => { | |
| 59 | + :tag => 'a', | |
| 60 | + :attributes => { | |
| 61 | + :href => '/catalog/test_enterprise1' | |
| 62 | + } | |
| 63 | + } | |
| 64 | + }) | |
| 65 | + | |
| 34 | 66 | end |
| 35 | 67 | |
| 36 | 68 | end | ... | ... |
test/functional/profile_controller_test.rb
| ... | ... | @@ -220,4 +220,16 @@ class ProfileControllerTest < Test::Unit::TestCase |
| 220 | 220 | assert_tag :tag => 'div', :attributes => { :id => 'profile-disabled' }, :content => Environment.default.message_for_disabled_enterprise |
| 221 | 221 | end |
| 222 | 222 | |
| 223 | + should 'display "Products" link for enterprise' do | |
| 224 | + ent = Enterprise.create!(:name => 'my test enterprise', :identifier => 'my-test-enterprise', :enabled => false) | |
| 225 | + | |
| 226 | + get :index, :profile => 'my-test-enterprise' | |
| 227 | + assert_tag :tag => 'a', :attributes => { :href => '/catalog/my-test-enterprise'}, :content => /Products\/Services/ | |
| 228 | + end | |
| 229 | + | |
| 230 | + should 'not display "Products" link for people' do | |
| 231 | + get :index, :profile => 'ze' | |
| 232 | + assert_no_tag :tag => 'a', :attributes => { :href => '/catalog/my-test-enterprise'}, :content => /Products\/Services/ | |
| 233 | + end | |
| 234 | + | |
| 223 | 235 | end | ... | ... |
test/integration/routing_test.rb
| ... | ... | @@ -139,4 +139,9 @@ class RoutingTest < ActionController::IntegrationTest |
| 139 | 139 | assert_routing('/ze_with_underscore', :controller => 'content_viewer', :action => 'view_page', :profile => 'ze_with_underscore', :page => []) |
| 140 | 140 | end |
| 141 | 141 | |
| 142 | + def test_catalog_routing | |
| 143 | + assert_routing('/catalog/colivre', :controller => 'catalog', :action => 'index', :profile => 'colivre') | |
| 144 | + assert_routing('/catalog/colivre/1234', :controller => 'catalog', :action => 'show', :profile => 'colivre', :id => '1234') | |
| 145 | + end | |
| 146 | + | |
| 142 | 147 | end | ... | ... |
test/test_helper.rb
| ... | ... | @@ -63,7 +63,7 @@ class Test::Unit::TestCase |
| 63 | 63 | end |
| 64 | 64 | |
| 65 | 65 | def create_admin_user(env) |
| 66 | - admin_user = User.find_by_login('root_user') || User.create!(:login => 'root_user', :email => 'root@noosfero.org', :password => 'root', :password_confirmation => 'root') | |
| 66 | + admin_user = User.find_by_login('adminuser') || User.create!(:login => 'adminuser', :email => 'adminuser@noosfero.org', :password => 'adminuser', :password_confirmation => 'adminuser') | |
| 67 | 67 | admin_role = Role.find_by_name('admin_role') || Role.create!(:name => 'admin_role', :permissions => ['view_environment_admin_panel','edit_environment_features', 'edit_environment_design', 'manage_environment_categories', 'manage_environment_roles', 'manage_environment_validators']) |
| 68 | 68 | RoleAssignment.create!(:accessor => admin_user.person, :role => admin_role, :resource => env) unless admin_user.person.role_assignments.map{|ra|[ra.role, ra.accessor, ra.resource]}.include?([admin_role, admin_user, env]) |
| 69 | 69 | admin_user.login | ... | ... |