Commit 1195da20b6313966ce016b3d48d24c0c7acbb012
1 parent
de79cb02
Exists in
master
and in
29 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,7 +12,9 @@ class CatalogController < ApplicationController | ||
12 | 12 | ||
13 | protected | 13 | protected |
14 | def check_enterprise | 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 | end | 18 | end |
17 | 19 | ||
18 | end | 20 | end |
app/views/blocks/profile_info.rhtml
@@ -6,6 +6,7 @@ | @@ -6,6 +6,7 @@ | ||
6 | <li><%= _('Since %{year}/%{month}') % { :year => block.owner.created_at.year, :month => block.owner.created_at.month } %></li> | 6 | <li><%= _('Since %{year}/%{month}') % { :year => block.owner.created_at.year, :month => block.owner.created_at.month } %></li> |
7 | <li><%= link_to _('Homepage'), block.owner.url %></li> | 7 | <li><%= link_to _('Homepage'), block.owner.url %></li> |
8 | <li><%= link_to _('View profile'), block.owner.public_profile_url %></li> | 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 | <% if !user.nil? and user.has_permission?('edit_profile', profile) %> | 10 | <% if !user.nil? and user.has_permission?('edit_profile', profile) %> |
10 | <li><%= link_to _('Control panel'), :controller => 'profile_editor' %></li> | 11 | <li><%= link_to _('Control panel'), :controller => 'profile_editor' %></li> |
11 | <% end %> | 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 | <% @products.each do |p| %> | 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 | <% end %> | 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,6 +25,9 @@ | ||
25 | <% if profile.kind_of? Organization %> | 25 | <% if profile.kind_of? Organization %> |
26 | <li><%= link_to _('Members'), :action => 'members' %></li> | 26 | <li><%= link_to _('Members'), :action => 'members' %></li> |
27 | <% end %> | 27 | <% end %> |
28 | + <% if profile.kind_of? Enterprise %> | ||
29 | + <li><%= link_to _('Products/Services'), :controller => 'catalog', :action => 'index' %></li> | ||
30 | + <% end %> | ||
28 | 31 | ||
29 | <li> | 32 | <li> |
30 | <%= _('Tags:') %> | 33 | <%= _('Tags:') %> |
config/routes.rb
@@ -41,6 +41,10 @@ ActionController::Routing::Routes.draw do |map| | @@ -41,6 +41,10 @@ ActionController::Routing::Routes.draw do |map| | ||
41 | # public profile information | 41 | # public profile information |
42 | map.profile 'profile/:profile/:action/:id', :controller => 'profile', :action => 'index', :id => /.*/, :profile => /[a-z][a-z0-9._-]*/ | 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 | ## Controllers that are profile-specific (for profile admins ) | 49 | ## Controllers that are profile-specific (for profile admins ) |
46 | ###################################################### | 50 | ###################################################### |
@@ -69,10 +73,7 @@ ActionController::Routing::Routes.draw do |map| | @@ -69,10 +73,7 @@ ActionController::Routing::Routes.draw do |map| | ||
69 | ## Test controllers. | 73 | ## Test controllers. |
70 | ## FIXME: this should not be needed | 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 | # *content viewing* | 78 | # *content viewing* |
78 | # XXX this route must come last so other routes have priority over it. | 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,13 +147,6 @@ colivre = new_validator(ba, "Colivre", 'colivre', Enterprise) | ||
147 | # Role for own things | 147 | # Role for own things |
148 | owner_role = Profile::Roles.admin | 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 | # Sample user and sample enterprise owned by him | 150 | # Sample user and sample enterprise owned by him |
158 | ze = User.create!(:login => 'ze', :email => 'ze@localhost.localdomain', :password => 'test', :password_confirmation => 'test').person | 151 | ze = User.create!(:login => 'ze', :email => 'ze@localhost.localdomain', :password => 'test', :password_confirmation => 'test').person |
159 | empa = Enterprise.create!(:name => 'Cooperativa A', :identifier => 'coop_a') | 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,6 +9,8 @@ class CatalogControllerTest < Test::Unit::TestCase | ||
9 | @controller = CatalogController.new | 9 | @controller = CatalogController.new |
10 | @request = ActionController::TestRequest.new | 10 | @request = ActionController::TestRequest.new |
11 | @response = ActionController::TestResponse.new | 11 | @response = ActionController::TestResponse.new |
12 | + | ||
13 | + @enterprise = Enterprise.create!(:name => 'My enterprise', :identifier => 'testent') | ||
12 | end | 14 | end |
13 | 15 | ||
14 | def test_local_files_reference | 16 | def test_local_files_reference |
@@ -19,18 +21,48 @@ class CatalogControllerTest < Test::Unit::TestCase | @@ -19,18 +21,48 @@ class CatalogControllerTest < Test::Unit::TestCase | ||
19 | def test_valid_xhtml | 21 | def test_valid_xhtml |
20 | assert_valid_xhtml | 22 | assert_valid_xhtml |
21 | end | 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 | should 'list products of enterprise' do | 36 | should 'list products of enterprise' do |
24 | ent = Enterprise.create!(:identifier => 'test_enterprise1', :name => 'Test enteprise1') | 37 | ent = Enterprise.create!(:identifier => 'test_enterprise1', :name => 'Test enteprise1') |
25 | get :index, :profile => ent.identifier | 38 | get :index, :profile => ent.identifier |
26 | - assert_tag :tag => 'h2', :content => /Catalog/ | 39 | + assert_kind_of Array, assigns(:products) |
27 | end | 40 | end |
28 | 41 | ||
29 | should 'show product of enterprise' do | 42 | should 'show product of enterprise' do |
30 | ent = Enterprise.create!(:identifier => 'test_enterprise1', :name => 'Test enteprise1') | 43 | ent = Enterprise.create!(:identifier => 'test_enterprise1', :name => 'Test enteprise1') |
31 | prod = ent.products.create!(:name => 'Product test') | 44 | prod = ent.products.create!(:name => 'Product test') |
32 | get :show, :id => prod.id, :profile => ent.identifier | 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 | end | 66 | end |
35 | 67 | ||
36 | end | 68 | end |
test/functional/profile_controller_test.rb
@@ -220,4 +220,16 @@ class ProfileControllerTest < Test::Unit::TestCase | @@ -220,4 +220,16 @@ class ProfileControllerTest < Test::Unit::TestCase | ||
220 | assert_tag :tag => 'div', :attributes => { :id => 'profile-disabled' }, :content => Environment.default.message_for_disabled_enterprise | 220 | assert_tag :tag => 'div', :attributes => { :id => 'profile-disabled' }, :content => Environment.default.message_for_disabled_enterprise |
221 | end | 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 | end | 235 | end |
test/integration/routing_test.rb
@@ -139,4 +139,9 @@ class RoutingTest < ActionController::IntegrationTest | @@ -139,4 +139,9 @@ class RoutingTest < ActionController::IntegrationTest | ||
139 | assert_routing('/ze_with_underscore', :controller => 'content_viewer', :action => 'view_page', :profile => 'ze_with_underscore', :page => []) | 139 | assert_routing('/ze_with_underscore', :controller => 'content_viewer', :action => 'view_page', :profile => 'ze_with_underscore', :page => []) |
140 | end | 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 | end | 147 | end |
test/test_helper.rb
@@ -63,7 +63,7 @@ class Test::Unit::TestCase | @@ -63,7 +63,7 @@ class Test::Unit::TestCase | ||
63 | end | 63 | end |
64 | 64 | ||
65 | def create_admin_user(env) | 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 | 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']) | 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 | 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]) | 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 | admin_user.login | 69 | admin_user.login |