Commit 59b729e5d546296f4cad7f74e20adaeb39144469
Committed by
Joenio Costa
1 parent
aedeaf61
Exists in
master
and in
29 other branches
The admin user should manage the region and the product category on manage category interface.
(ActionItem1582)
Showing
9 changed files
with
118 additions
and
13 deletions
Show diff stats
app/controllers/admin/categories_controller.rb
... | ... | @@ -5,9 +5,9 @@ class CategoriesController < AdminController |
5 | 5 | helper :categories |
6 | 6 | |
7 | 7 | def index |
8 | - # WORKAROUND: restricting the category trees to display. Region and | |
9 | - # ProductCategory have VERY LARGE trees. | |
10 | 8 | @categories = environment.categories.find(:all, :conditions => "parent_id is null AND type is null") |
9 | + @regions = environment.regions.find(:all, :conditions => {:parent_id => nil}) | |
10 | + @product_categories = environment.product_categories.find(:all, :conditions => {:parent_id => nil}) | |
11 | 11 | end |
12 | 12 | |
13 | 13 | ALLOWED_TYPES = CategoriesHelper::TYPES.map {|item| item[1] } | ... | ... |
app/models/environment.rb
... | ... | @@ -147,6 +147,7 @@ class Environment < ActiveRecord::Base |
147 | 147 | has_many :categories |
148 | 148 | has_many :display_categories, :class_name => 'Category', :conditions => 'display_color is not null and parent_id is null', :order => 'display_color' |
149 | 149 | |
150 | + has_many :product_categories, :conditions => { :type => 'ProductCategory'} | |
150 | 151 | has_many :regions |
151 | 152 | |
152 | 153 | has_many :roles | ... | ... |
app/views/categories/_category.rhtml
... | ... | @@ -2,6 +2,12 @@ |
2 | 2 | <div class='treeitem'> |
3 | 3 | <%= display_color_for_category(category) %> |
4 | 4 | <%= category.name %> |
5 | + <div class='button' id="show_button_<%= category.id %>"> | |
6 | + <%= link_to_function(_('Show'), "['category_#{category.id}','hide_button_#{category.id}'].each(Element.show); Element.hide('show_button_#{category.id}');") unless category.children.empty? %> | |
7 | + </div> | |
8 | + <div class='button' id="hide_button_<%= category.id %>" style='display:none;'> | |
9 | + <%= link_to_function(_('Hide'), "['category_#{category.id}','hide_button_#{category.id}'].each(Element.hide); Element.show('show_button_#{category.id}') ") %> | |
10 | + </div> | |
5 | 11 | |
6 | 12 | <div> |
7 | 13 | <%= link_to _('Add subcategory'), :action => 'new', :parent_id => category %> |
... | ... | @@ -10,11 +16,12 @@ |
10 | 16 | </div> |
11 | 17 | </div> |
12 | 18 | |
13 | - <% unless category.children.empty? %> | |
14 | - <ul class='tree'> | |
15 | - <%= render :partial => 'category', :collection => category.children %> | |
16 | - </ul> | |
17 | - <% end %> | |
19 | + <div id="category_<%= category.id %>" style='display:none;'> | |
20 | + <% unless category.children.empty? %> | |
21 | + <ul class='tree'> | |
22 | + <%= render :partial => 'category', :collection => category.children %> | |
23 | + </ul> | |
24 | + <% end %> | |
25 | + </div> | |
18 | 26 | |
19 | 27 | </li> |
20 | - | ... | ... |
app/views/categories/index.rhtml
... | ... | @@ -3,8 +3,25 @@ |
3 | 3 | <ul class='tree'> |
4 | 4 | <%= render :partial => 'category', :collection => @categories %> |
5 | 5 | </ul> |
6 | - | |
7 | 6 | <div> |
8 | 7 | <%= link_to _('New category'), :action => 'new' %> |
9 | 8 | </div> |
10 | 9 | |
10 | +<h1><%= _('Product Categories') %></h1> | |
11 | +<ul class='tree'> | |
12 | + <%= render :partial => 'category', :collection => @product_categories %> | |
13 | +</ul> | |
14 | + | |
15 | +<div> | |
16 | + <%= link_to _('New category'), :action => 'new', :type => 'ProductCategory' %> | |
17 | +</div> | |
18 | + | |
19 | +<h1><%= _('Regions') %></h1> | |
20 | +<ul class='tree'> | |
21 | + <%= render :partial => 'category', :collection => @regions %> | |
22 | +</ul> | |
23 | + | |
24 | +<div> | |
25 | + <%= link_to _('New category'), :action => 'new', :type => 'Region' %> | |
26 | +</div> | |
27 | + | ... | ... |
... | ... | @@ -0,0 +1,56 @@ |
1 | +Feature: manage categories | |
2 | + As an administrator | |
3 | + I want to manage the categories | |
4 | + | |
5 | + Background: | |
6 | + Given the following categories | |
7 | + | name | display_in_menu | | |
8 | + | Food | true | | |
9 | + | Book | true | | |
10 | + And the following categories | |
11 | + | parent | name | display_in_menu | | |
12 | + | Food | Vegetarian | true | | |
13 | + | Food | Steak | true | | |
14 | + Given I am logged in as admin | |
15 | + | |
16 | + @selenium | |
17 | + Scenario: admin user could create a category | |
18 | + Given I follow "Administration" | |
19 | + And I follow "Manage Categories" | |
20 | + And I follow "New category" | |
21 | + When I fill in "Name" with "Category 1" | |
22 | + And I press "Save" | |
23 | + Then I should see "Categories" | |
24 | + And I should see "Category 1" | |
25 | + | |
26 | + @selenium | |
27 | + Scenario: admin user could see all the category tree | |
28 | + Given I follow "Administration" | |
29 | + And I follow "Manage Categories" | |
30 | + When I follow "Show" | |
31 | + Then I should see "Vegetarian" | |
32 | + And I should see "Steak" | |
33 | + | |
34 | + @selenium | |
35 | + Scenario: admin user could hide the category tree | |
36 | + Given I follow "Administration" | |
37 | + And I follow "Manage Categories" | |
38 | + When I follow "Show" | |
39 | + Then I should see "Vegetarian" | |
40 | + And I should see "Steak" | |
41 | + When I follow "Hide" | |
42 | + Then I should not see "Vegetarian" | |
43 | + And I should not see "Steak" | |
44 | + | |
45 | + @selenium | |
46 | + Scenario: the show link is available just for categories with category tree | |
47 | + Given the following category | |
48 | + | parent | name | display_in_menu | | |
49 | + | Steak | Pig | true | | |
50 | + And I follow "Administration" | |
51 | + And I follow "Manage Categories" | |
52 | + Then I should see "Food Show" | |
53 | + When I follow "Show" | |
54 | + Then I should see "Vegetarian" | |
55 | + And I should not see "Vegetarian Show" | |
56 | + And I should see "Steak Show" | ... | ... |
features/step_definitions/noosfero_steps.rb
... | ... | @@ -85,12 +85,12 @@ Given /^the following validation info$/ do |table| |
85 | 85 | end |
86 | 86 | end |
87 | 87 | |
88 | -Given /^the following (product_categories|product_category|category|categories)$/ do |kind,table| | |
88 | +Given /^the following (product_categories|product_category|category|categories|regions?)$/ do |kind,table| | |
89 | 89 | klass = kind.singularize.camelize.constantize |
90 | 90 | table.hashes.each do |row| |
91 | 91 | parent = row.delete("parent") |
92 | 92 | if parent |
93 | - parent = Category.find_by_slug(parent) | |
93 | + parent = Category.find_by_slug(parent.to_slug) | |
94 | 94 | row.merge!({:parent_id => parent.id}) |
95 | 95 | end |
96 | 96 | category = klass.create!({:environment_id => Environment.default.id}.merge(row)) | ... | ... |
public/stylesheets/application.css
test/functional/categories_controller_test.rb
... | ... | @@ -36,6 +36,8 @@ class CategoriesControllerTest < Test::Unit::TestCase |
36 | 36 | assert_response :success |
37 | 37 | assert_template 'index' |
38 | 38 | assert_kind_of Array, assigns(:categories) |
39 | + assert_kind_of Array, assigns(:product_categories) | |
40 | + assert_kind_of Array, assigns(:regions) | |
39 | 41 | assert_tag :tag => 'a', :attributes => { :href => '/admin/categories/new'} |
40 | 42 | end |
41 | 43 | |
... | ... | @@ -178,11 +180,13 @@ class CategoriesControllerTest < Test::Unit::TestCase |
178 | 180 | should 'not list regions and product categories' do |
179 | 181 | Environment.default.categories.destroy_all |
180 | 182 | c = Category.create!(:name => 'Regular category', :environment => Environment.default) |
181 | - ProductCategory.create!(:name => 'Product category', :environment => Environment.default) | |
182 | - Region.create!(:name => 'Some region', :environment => Environment.default) | |
183 | + p = ProductCategory.create!(:name => 'Product category', :environment => Environment.default) | |
184 | + r = Region.create!(:name => 'Some region', :environment => Environment.default) | |
183 | 185 | |
184 | 186 | get :index |
185 | 187 | assert_equal [c], assigns(:categories) |
188 | + assert_equal [p], assigns(:product_categories) | |
189 | + assert_equal [r], assigns(:regions) | |
186 | 190 | end |
187 | 191 | |
188 | 192 | end | ... | ... |
test/unit/environment_test.rb
... | ... | @@ -131,6 +131,22 @@ class EnvironmentTest < Test::Unit::TestCase |
131 | 131 | assert cats.include?(subcat) |
132 | 132 | end |
133 | 133 | |
134 | + def test_should_list_all_product_categories | |
135 | + env = fast_create(Environment) | |
136 | + Category.create!(:name => 'first category', :environment_id => env.id) | |
137 | + cat = Category.create!(:name => 'second category', :environment_id => env.id) | |
138 | + Category.create!(:name => 'child category', :environment_id => env.id, :parent_id => cat.id) | |
139 | + cat1 = ProductCategory.create!(:name => 'first product category', :environment_id => env.id) | |
140 | + cat2 = ProductCategory.create!(:name => 'second product category', :environment_id => env.id) | |
141 | + subcat = ProductCategory.create!(:name => 'child product category', :environment_id => env.id, :parent_id => cat2.id) | |
142 | + | |
143 | + cats = env.product_categories | |
144 | + assert_equal 3, cats.size | |
145 | + assert cats.include?(cat1) | |
146 | + assert cats.include?(cat2) | |
147 | + assert cats.include?(subcat) | |
148 | + end | |
149 | + | |
134 | 150 | should 'list displayable categories' do |
135 | 151 | env = fast_create(Environment) |
136 | 152 | cat1 = env.categories.create(:name => 'category one', :display_color => 1) | ... | ... |