Commit fa3b8c7e4a918e82a3502ea2cf850eaf84c2e14e
Exists in
staging
and in
4 other branches
Merge branch 'master' into staging_rails4
Showing
38 changed files
with
69 additions
and
663 deletions
Show diff stats
app/controllers/themes_controller.rb
... | ... | @@ -13,7 +13,7 @@ class ThemesController < ApplicationController |
13 | 13 | |
14 | 14 | def index |
15 | 15 | @environment = environment |
16 | - @themes = (environment.themes + Theme.approved_themes(target)).sort_by { |t| t.name } | |
16 | + @themes = (environment.themes + Theme.approved_themes(target)).uniq.sort_by { |t| t.name } | |
17 | 17 | |
18 | 18 | @current_theme = target.theme |
19 | 19 | ... | ... |
app/models/organization.rb
... | ... | @@ -116,6 +116,7 @@ class Organization < Profile |
116 | 116 | tag_list |
117 | 117 | template_id |
118 | 118 | district |
119 | + address_line2 | |
119 | 120 | address_reference |
120 | 121 | ] |
121 | 122 | |
... | ... | @@ -136,7 +137,7 @@ class Organization < Profile |
136 | 137 | end |
137 | 138 | |
138 | 139 | N_('Display name'); N_('Description'); N_('Contact person'); N_('Contact email'); N_('Acronym'); N_('Foundation year'); N_('Legal form'); N_('Economic activity'); N_('Management information'); N_('Tag list'); N_('District'); N_('Address reference') |
139 | - settings_items :display_name, :description, :contact_person, :contact_email, :acronym, :foundation_year, :legal_form, :economic_activity, :management_information, :district, :address_reference | |
140 | + settings_items :display_name, :description, :contact_person, :contact_email, :acronym, :foundation_year, :legal_form, :economic_activity, :management_information, :district, :address_line2, :address_reference | |
140 | 141 | |
141 | 142 | settings_items :zip_code, :city, :state, :country |
142 | 143 | ... | ... |
app/models/person.rb
... | ... | @@ -216,6 +216,7 @@ class Person < Profile |
216 | 216 | district |
217 | 217 | zip_code |
218 | 218 | address |
219 | + address_line2 | |
219 | 220 | address_reference |
220 | 221 | cell_phone |
221 | 222 | comercial_phone |
... | ... | @@ -283,7 +284,7 @@ class Person < Profile |
283 | 284 | settings_items :formation, :custom_formation, :custom_area_of_study |
284 | 285 | |
285 | 286 | N_('Contact information'); N_('City'); N_('State'); N_('Country'); N_('Sex'); N_('Zip code'); N_('District'); N_('Address reference') |
286 | - settings_items :photo, :contact_information, :sex, :city, :state, :country, :zip_code, :district, :address_reference | |
287 | + settings_items :photo, :contact_information, :sex, :city, :state, :country, :zip_code, :district, :address_line2, :address_reference | |
287 | 288 | |
288 | 289 | extend SetProfileRegionFromCityState::ClassMethods |
289 | 290 | set_profile_region_from_city_state | ... | ... |
plugins/delivery/test/test_helper.rb
... | ... | @@ -1 +0,0 @@ |
1 | -require File.dirname(__FILE__) + '/../../../test/test_helper' |
plugins/delivery/test/unit/delivery_plugin/method_test.rb
... | ... | @@ -1,42 +0,0 @@ |
1 | -require "#{File.dirname(__FILE__)}/../../test_helper" | |
2 | - | |
3 | -class DeliveryPlugin::MethodTest < ActiveSupport::TestCase | |
4 | - | |
5 | - def setup | |
6 | - @profile = build(Profile) | |
7 | - end | |
8 | - | |
9 | - attr_accessor :profile | |
10 | - | |
11 | - should 'have a name and a delivery type' do | |
12 | - dm = DeliveryPlugin::Method.new :name => 'Delivery Deluxe', :delivery_type => 'deliver', :profile => profile | |
13 | - assert dm.valid? | |
14 | - dm = DeliveryPlugin::Method.new :profile => profile | |
15 | - assert !dm.valid? | |
16 | - end | |
17 | - | |
18 | - should 'accept only pickup and deliver as delivery types' do | |
19 | - dm = build(DeliveryPlugin::Method, :name => 'Delivery Deluxe', :delivery_type => 'unkown', :profile => profile) | |
20 | - assert !dm.valid? | |
21 | - dm = build(DeliveryPlugin::Method, :name => 'Delivery Deluxe', :delivery_type => 'pickup', :profile => profile) | |
22 | - assert dm.valid? | |
23 | - dm = build(DeliveryPlugin::Method, :name => 'Delivery Deluxe', :delivery_type => 'deliver', :profile => profile) | |
24 | - assert dm.valid? | |
25 | - end | |
26 | - | |
27 | - should 'filter by delivery types' do | |
28 | - dm_deliver = create(DeliveryPlugin::Method, :name => 'Delivery Deluxe', :delivery_type => 'deliver', :profile => profile) | |
29 | - dm_pickup = create(DeliveryPlugin::Method, :name => 'Delivery Deluxe', :delivery_type => 'pickup', :profile => profile) | |
30 | - assert_equal [dm_deliver], DeliveryPlugin::Method.delivery | |
31 | - assert_equal [dm_pickup], DeliveryPlugin::Method.pickup | |
32 | - end | |
33 | - | |
34 | - should 'have many delivery options' do | |
35 | - dm = create(DeliveryPlugin::Method, :name => 'Delivery Deluxe', :delivery_type => 'deliver', :profile => profile) | |
36 | - cycle = build(OrdersCyclePlugin::Cycle, :name => 'cycle name', :profile => profile) | |
37 | - option = create(DeliveryPlugin::Option, :cycle => cycle, :delivery_method => dm) | |
38 | - | |
39 | - assert_equal [option], dm.reload.delivery_options | |
40 | - end | |
41 | - | |
42 | -end |
plugins/delivery/test/unit/delivery_plugin/option_test.rb
... | ... | @@ -1,24 +0,0 @@ |
1 | -require "#{File.dirname(__FILE__)}/../../test_helper" | |
2 | - | |
3 | -class DeliveryPlugin::OptionTest < ActiveSupport::TestCase | |
4 | - | |
5 | - def setup | |
6 | - @profile = build(Profile) | |
7 | - @cycle = build(OrdersCyclePluginCycle, :profile => @profile) | |
8 | - @delivery_method = build(OrdersCyclePluginMethod, :profile => @profile) | |
9 | - end | |
10 | - | |
11 | - attr_accessor :profile | |
12 | - attr_accessor :cycle | |
13 | - attr_accessor :delivery_method | |
14 | - | |
15 | - should 'be associated with a cycle and a delivery method' do | |
16 | - option = OrdersCyclePluginOption.new :cycle => @cycle, :delivery_method => @delivery_method | |
17 | - assert option.valid? | |
18 | - option = OrdersCyclePluginOption.new | |
19 | - :wa | |
20 | - | |
21 | - assert !option.valid? | |
22 | - end | |
23 | - | |
24 | -end |
plugins/orders/orders
plugins/orders/public/public
plugins/orders/test/test_helper.rb
... | ... | @@ -1 +0,0 @@ |
1 | -require File.dirname(__FILE__) + '/../../../test/test_helper' |
plugins/orders/test/unit/orders_plugin/item_test.rb
... | ... | @@ -1,14 +0,0 @@ |
1 | -require File.dirname(__FILE__) + '/../../../../test/test_helper' | |
2 | - | |
3 | -class OrdersPlugin::ItemTest < ActiveSupport::TestCase | |
4 | - | |
5 | - def setup | |
6 | - @item = build(OrdersPlugin::Item, | |
7 | - :quantity_shipped => 1.0, :quantity_consumer_ordered => 2.0, :quantity_accepted => 3.0, | |
8 | - :price_shipped => 10.0, :price_consumer_ordered => 20.0, :price_accepted => 30.0) | |
9 | - end | |
10 | - | |
11 | - should 'calculate prices' do | |
12 | - end | |
13 | - | |
14 | -end |
plugins/orders/test/unit/orders_plugin/order_test.rb
... | ... | @@ -1,121 +0,0 @@ |
1 | -require "test_helper" | |
2 | - | |
3 | -class OrdersPlugin::OrderTest < ActiveSupport::TestCase | |
4 | - | |
5 | - def setup | |
6 | - @order = build(OrdersPlugin::Order) | |
7 | - end | |
8 | - | |
9 | - should 'report supplier products when distributing aggregate products' do | |
10 | - env = Environment.create! name: 'megacoop' | |
11 | - supplier = Enterprise.create! identifier: 'supplier', name: 'supplier', environment: env | |
12 | - p1 = supplier.products.create! product_category: ProductCategory.create!(name: 'banana', environment: env) | |
13 | - p2 = supplier.products.create! product_category: ProductCategory.create!(name: 'aipim', environment: env) | |
14 | - | |
15 | - coop = Community.create! identifier: 'blah', name: 'blah', environment: env | |
16 | - coop.suppliers.create! profile: supplier, consumer: coop | |
17 | - aggregate_product = SuppliersPlugin::DistributedProduct.new profile: coop | |
18 | - aggregate_product.sources_from_products.build quantity: 1, from_product: p1, to_product: aggregate_product | |
19 | - aggregate_product.sources_from_products.build quantity: 5, from_product: p2, to_product: aggregate_product | |
20 | - aggregate_product.save! | |
21 | - | |
22 | - # hack | |
23 | - person = coop | |
24 | - | |
25 | - # this also create offered products | |
26 | - cycle = OrdersCyclePlugin::Cycle.create! name: 'blah', profile: coop, start: Time.now, finish: Time.now+1.day, delivery_start: Time.now+2.days, delivery_finish: Time.now+3.days, status: 'orders' | |
27 | - sale = cycle.sales.create! profile: person | |
28 | - sale.items.create! quantity_consumer_ordered: 3, product: aggregate_product | |
29 | - | |
30 | - r = OrdersPlugin::Order.supplier_products_by_suppliers [sale] | |
31 | - quantities = r.first.last.map(&:quantity_ordered).map(&:to_i) | |
32 | - assert_equal [3*1,3*5], quantities | |
33 | - end | |
34 | - | |
35 | - should 'format code with cycle code' do | |
36 | - @order.save! | |
37 | - assert_equal "#{@order.cycle.code}.#{@order.attributes['code']}", @order.code | |
38 | - end | |
39 | - | |
40 | - should 'use as draft default status' do | |
41 | - @order = create(OrdersPlugin::Order, status: nil) | |
42 | - assert_equal 'draft', @order.status | |
43 | - end | |
44 | - | |
45 | - ### | |
46 | - # Status | |
47 | - ### | |
48 | - | |
49 | - should 'define and validate list of statuses' do | |
50 | - @order.status = 'blah' | |
51 | - @order.valid? | |
52 | - assert @order.errors.invalid?('status') | |
53 | - | |
54 | - ['draft', 'planned', 'ordered', 'cancelled'].each do |i| | |
55 | - @order.status = i | |
56 | - @order.valid? | |
57 | - assert !@order.errors.invalid?('status') | |
58 | - end | |
59 | - end | |
60 | - | |
61 | - should 'define status question methods' do | |
62 | - ['draft', 'planned', 'ordered', 'cancelled'].each do |i| | |
63 | - @order.status = i | |
64 | - assert @order.send("#{@order.status}?") | |
65 | - end | |
66 | - end | |
67 | - | |
68 | - should 'define forgotten and open status' do | |
69 | - @order.status = 'draft' | |
70 | - assert @order.draft? | |
71 | - assert @order.cycle.orders? | |
72 | - assert @order.open? | |
73 | - @order.cycle.status = 'closed' | |
74 | - assert !@order.open? | |
75 | - assert @order.forgotten? | |
76 | - end | |
77 | - | |
78 | - should 'return current status using forgotten and open too' do | |
79 | - @order.status = 'draft' | |
80 | - assert @order.open? | |
81 | - assert_equal 'open', @order.current_status | |
82 | - @order.cycle.status = 'closed' | |
83 | - assert @order.forgotten? | |
84 | - assert_equal 'forgotten', @order.current_status | |
85 | - end | |
86 | - | |
87 | - should 'define status_message method' do | |
88 | - assert @order.respond_to?(:status_message) | |
89 | - end | |
90 | - | |
91 | - ### | |
92 | - # Delivery | |
93 | - ### | |
94 | - | |
95 | - should 'give default value to supplier delivery if not present' do | |
96 | - @order.save! | |
97 | - @order.profile.save! | |
98 | - | |
99 | - @order.cycle.delivery_methods = [] | |
100 | - @order.supplier_delivery = nil | |
101 | - assert_nil @order.supplier_delivery | |
102 | - | |
103 | - default = @order.cycle.delivery_methods.create! profile: @order.profile, name: 'method', delivery_type: 'deliver' | |
104 | - assert_equal default, @order.supplier_delivery | |
105 | - assert_equal default.id, @order.supplier_delivery_id | |
106 | - end | |
107 | - | |
108 | - ### | |
109 | - # Totals | |
110 | - ### | |
111 | - | |
112 | - should 'give total price and quantity asked' do | |
113 | - @order.cycle.profile.save! | |
114 | - product = create(SuppliersPlugin::DistributedProduct, price: 2.0, profile: @order.cycle.profile, supplier: @order.cycle.profile.self_supplier) | |
115 | - @order.save! | |
116 | - @order.item.create! product: @order.cycle.products.first, quantity_consumer_ordered: 2.0 | |
117 | - assert_equal 2.0, @order.total_quantity_consumer_ordered | |
118 | - assert_equal 4.0, @order.total_price_consumer_ordered | |
119 | - end | |
120 | - | |
121 | -end |
plugins/orders_cycle/test/factories.rb
... | ... | @@ -1,57 +0,0 @@ |
1 | -module OrdersCyclePlugin::Factory | |
2 | - | |
3 | - def defaults_for_suppliers_plugin_supplier | |
4 | - {:profile => build(Profile), | |
5 | - :consumer => build(Profile)} | |
6 | - end | |
7 | - | |
8 | - def defaults_for_suppliers_plugin_distributed_product attrs = {} | |
9 | - profile = attrs[:profile] || build(Profile) | |
10 | - {:profile => profile, :name => "product-#{factory_num_seq}", :price => 2.0, | |
11 | - :product => build(Product, :enterprise => profile.profile, :price => 2.0), | |
12 | - :supplier => build(SuppliersPlugin::Supplier, :profile => profile, :consumer => profile)} | |
13 | - end | |
14 | - | |
15 | - def defaults_for_orders_cycle_plugin_offered_product attrs = {} | |
16 | - hash = defaults_for_orders_cycle_plugin_product(attrs) | |
17 | - profile = hash[:profile] | |
18 | - hash.merge({ | |
19 | - :from_products => [build(SuppliersPlugin::DistributedProduct, :profile => profile)]}) | |
20 | - end | |
21 | - | |
22 | - def defaults_for_delivery_plugin_method | |
23 | - {:profile => build(OrdersCyclePlugin::Profile), | |
24 | - :name => "My delivery #{factory_num_seq.to_s}", | |
25 | - :delivery_type => 'deliver'} | |
26 | - end | |
27 | - | |
28 | - def defaults_for_delivery_plugin_option | |
29 | - {:cycle => build(OrdersCyclePlugin::Cycle), | |
30 | - :delivery_method => build(DeliveryPlugin::Method)} | |
31 | - end | |
32 | - | |
33 | - def defaults_for_orders_plugin_order attrs = {} | |
34 | - profile = attrs[:profile] || build(OrdersCyclePlugin::Profile) | |
35 | - {:status => 'ordered', | |
36 | - :cycle => build(OrdersCyclePlugin::Cycle, :profile => profile), | |
37 | - :consumer => build(OrdersCyclePlugin::Profile), | |
38 | - :supplier_delivery => build(DeliveryPlugin::Method, :profile => profile), | |
39 | - :consumer_delivery => build(DeliveryPlugin::Method, :profile => profile)} | |
40 | - end | |
41 | - | |
42 | - def defaults_for_orders_plugin_items | |
43 | - {:order => build(OrdersPlugin::Order), | |
44 | - :product => build(OrdersCyclePlugin::OfferedProduct), | |
45 | - :quantity_shipped => 1.0, :quantity_ordered => 2.0, :quantity_accepted => 3.0, | |
46 | - :price_shipped => 10.0, :price_ordered => 20.0, :price_accepted => 30.0} | |
47 | - end | |
48 | - | |
49 | - def defaults_for_orders_cycle_plugin_cycle | |
50 | - {:profile => build(OrdersCyclePlugin::Profile), :status => 'orders', | |
51 | - :name => 'weekly', :start => Time.now, :finish => Time.now+1.days} | |
52 | - end | |
53 | - | |
54 | -end | |
55 | - | |
56 | -Noosfero::Factory.register_extension OrdersCyclePlugin::Factory | |
57 | - |
plugins/orders_cycle/test/functional/orders_cycle_plugin/order_controller_test.rb
... | ... | @@ -1,12 +0,0 @@ |
1 | -require "#{File.dirname(__FILE__)}/../../test_helper" | |
2 | - | |
3 | -class OrdersCyclePlugin::OrderControllerTest < Test::Unit::TestCase | |
4 | - | |
5 | - def setup | |
6 | - @controller = OrdersCyclePluginOrderController.new | |
7 | - @request = ActionController::TestRequest.new | |
8 | - @response = ActionController::TestResponse.new | |
9 | - end | |
10 | - | |
11 | - | |
12 | -end |
plugins/orders_cycle/test/functional/orders_cycle_plugin/session_controller_test.rb
... | ... | @@ -1,14 +0,0 @@ |
1 | -require "#{File.dirname(__FILE__)}/../../test_helper" | |
2 | - | |
3 | -class OrdersCyclePlugin::CycleControllerTest < Test::Unit::TestCase | |
4 | - | |
5 | - def setup | |
6 | - @controller = OrdersCyclePluginCycleController.new | |
7 | - @request = ActionController::TestRequest.new | |
8 | - @response = ActionController::TestResponse.new | |
9 | - end | |
10 | - | |
11 | - should 'create a new cycle' do | |
12 | - end | |
13 | - | |
14 | -end |
plugins/orders_cycle/test/test_helper.rb
plugins/orders_cycle/test/unit/orders_cycle_plugin/cycle_test.rb
... | ... | @@ -1,27 +0,0 @@ |
1 | -require "#{File.dirname(__FILE__)}/../../test_helper" | |
2 | - | |
3 | -class OrdersCyclePlugin::CycleTest < ActiveSupport::TestCase | |
4 | - | |
5 | - def setup | |
6 | - @profile = Enterprise.create!(:name => "trocas verdes", :identifier => "trocas-verdes") | |
7 | - @pc = ProductCategory.create!(:name => 'frutas', :environment_id => 1) | |
8 | - @profile.products = [Product.create!(:name => 'banana', :product_category => @pc), | |
9 | - Product.new(:name => 'mandioca', :product_category => @pc), Product.new(:name => 'alface', :product_category => @pc)] | |
10 | - | |
11 | - profile.offered_products = @profile.products.map{ |p| OrdersCyclePlugin::OfferedProduct.create!(:product => p) } | |
12 | - DeliveryPlugin::Method.create! :name => 'at home', :delivery_type => 'pickup', :profile => @profile | |
13 | - @cycle = OrdersCyclePlugin::Cycle.create!(:profile => @profile) | |
14 | - end | |
15 | - | |
16 | - should 'add products from profile after create' do | |
17 | - assert_equal @cycle.products.collect(&:product_id), @profile.products.collect(&:id) | |
18 | - end | |
19 | - | |
20 | - should 'have at least one delivery method unless in edition status' do | |
21 | - cycle = OrdersCyclePlugin::Cycle.create! :profile => @profile, :name => "Testes batidos", :start => DateTime.now, :status => 'edition' | |
22 | - assert cycle | |
23 | - cycle.status = 'orders' | |
24 | - assert_nil cycle.save! | |
25 | - end | |
26 | - | |
27 | -end |
plugins/orders_cycle/test/unit/orders_cycle_plugin/offered_product_test.rb
plugins/orders_cycle/test/unit/profile_test.rb
... | ... | @@ -1,127 +0,0 @@ |
1 | -require "#{File.dirname(__FILE__)}/../../test_helper" | |
2 | - | |
3 | -class OrdersCyclePlugin::ProfileTest < ActiveRecord::TestCase | |
4 | - | |
5 | - def setup | |
6 | - @profile = build(Profile) | |
7 | - @invisible_profile = build(Enterprise, :visible => false) | |
8 | - @other_profile = build(Enterprise) | |
9 | - @profile = build(OrdersCyclePlugin::profile, :profile => @profile) | |
10 | - @self_supplier = build(OrdersCyclePlugin::Supplier, :consumer => @profile, :profile => @profile) | |
11 | - @dummy_supplier = build(OrdersCyclePlugin::Supplier, :consumer => @profile, :profile => @dummy_profile) | |
12 | - @other_supplier = build(OrdersCyclePlugin::Supplier, :consumer => @profile, :profile => @other_profile) | |
13 | - end | |
14 | - | |
15 | - attr_accessor :profile, :invisible_profile, :other_profile, | |
16 | - :self_supplier, :dummy_supplier, :other_supplier | |
17 | - | |
18 | - should 'respond to name methods' do | |
19 | - profile.expects(:name).returns('name') | |
20 | - assert_equal 'name', profile.name | |
21 | - end | |
22 | - | |
23 | - should 'respond to dummy methods' do | |
24 | - profile.dummy = true | |
25 | - assert_equal true, profile.dummy? | |
26 | - profile.dummy = false | |
27 | - assert_equal false, profile.dummy | |
28 | - end | |
29 | - | |
30 | - should "return closed cycles' date range" do | |
31 | - DateTime.expects(:now).returns(1).at_least_once | |
32 | - assert_equal 1..1, profile.orders_cycles_closed_date_range | |
33 | - s1 = create(OrdersCyclePlugin::Cycle, :profile => profile, :start => Time.now-1.days, :finish => nil) | |
34 | - s2 = create(OrdersCyclePlugin::Cycle, :profile => profile, :finish => Time.now+1.days, :start => Time.now) | |
35 | - assert_equal (s1.start.to_date..s2.finish.to_date), profile.orders_cycles_closed_date_range | |
36 | - end | |
37 | - | |
38 | - should 'return abbreviation or the name' do | |
39 | - profile.name_abbreviation = 'coll.' | |
40 | - profile.profile.name = 'collective' | |
41 | - assert_equal 'coll.', profile.abbreviation_or_name | |
42 | - profile.name_abbreviation = nil | |
43 | - assert_equal 'collective', profile.abbreviation_or_name | |
44 | - end | |
45 | - | |
46 | - ### | |
47 | - # Products | |
48 | - ### | |
49 | - | |
50 | - should "default products's margins when asked" do | |
51 | - profile.update! :margin_percentage => 10 | |
52 | - product = create(SuppliersPlugin::DistributedProduct, :profile => profile, :supplier => profile.self_supplier, | |
53 | - :price => 10, :default_margin_percentage => false) | |
54 | - cycle = create(OrdersCyclePlugin::Cycle, :profile => profile) | |
55 | - sproduct = cycle.products.first | |
56 | - sproduct.update! :margin_percentage => 5 | |
57 | - cycleclosed = create(OrdersCyclePlugin::Cycle, :profile => profile, :status => 'closed') | |
58 | - | |
59 | - profile.orders_cycles_products_default_margins | |
60 | - product.reload | |
61 | - sproduct.reload | |
62 | - assert_equal true, product.default_margin_percentage | |
63 | - assert_equal sproduct.margin_percentage, profile.margin_percentage | |
64 | - end | |
65 | - | |
66 | - should 'return not yet distributed products' do | |
67 | - profile.save! | |
68 | - other_profile.save! | |
69 | - other_supplier.save! | |
70 | - product = create(SuppliersPlugin::DistributedProduct, :profile => other_profile, :supplier => other_profile.self_supplier) | |
71 | - profile.add_supplier_products other_supplier | |
72 | - product2 = create(SuppliersPlugin::DistributedProduct, :profile => other_profile, :supplier => other_profile.self_supplier) | |
73 | - assert_equal [product2], profile.not_distributed_products(other_supplier) | |
74 | - end | |
75 | - | |
76 | - ### | |
77 | - # Suppliers | |
78 | - ### | |
79 | - | |
80 | - should 'add supplier' do | |
81 | - @profile.save! | |
82 | - @other_profile.save! | |
83 | - | |
84 | - assert_difference OrdersCyclePlugin::Supplier, :count do | |
85 | - @profile.add_supplier @other_profile | |
86 | - end | |
87 | - assert @profile.suppliers_profiles.include?(@other_profile) | |
88 | - assert @other_profile.consumers_profiles.include?(@profile) | |
89 | - end | |
90 | - | |
91 | - should "add all supplier's products when supplier is added" do | |
92 | - @profile.save! | |
93 | - @other_profile.save! | |
94 | - product = create(SuppliersPlugin::DistributedProduct, :profile => @other_profile) | |
95 | - @profile.add_supplier @other_profile | |
96 | - assert_equal [product], @profile.from_products | |
97 | - end | |
98 | - | |
99 | - should 'remove supplier' do | |
100 | - @profile.save! | |
101 | - @other_profile.save! | |
102 | - | |
103 | - @profile.add_supplier @other_profile | |
104 | - assert_difference OrdersCyclePlugin::Supplier, :count, -1 do | |
105 | - assert_difference RoleAssignment, :count, -1 do | |
106 | - @profile.remove_supplier @other_profile | |
107 | - end | |
108 | - end | |
109 | - assert !@profile.suppliers_profiles.include?(@other_profile) | |
110 | - end | |
111 | - | |
112 | - should "archive supplier's products when supplier is removed" do | |
113 | - @profile.save! | |
114 | - @other_profile.save! | |
115 | - product = create(SuppliersPlugin::DistributedProduct, :profile => @other_profile) | |
116 | - @profile.add_supplier @other_profile | |
117 | - @profile.remove_supplier @other_profile | |
118 | - assert_equal [product], @profile.from_products | |
119 | - assert_equal 1, @profile.distributed_products.archived.count | |
120 | - end | |
121 | - | |
122 | - should 'create self supplier automatically' do | |
123 | - profile = create(OrdersCyclePlugin::profile, :profile => @profile) | |
124 | - assert_equal 1, profile.suppliers.count | |
125 | - end | |
126 | - | |
127 | -end |
plugins/organization_ratings/db/migrate/20151203121430_destroy_rejected_reports.rb
... | ... | @@ -5,7 +5,7 @@ class DestroyRejectedReports < ActiveRecord::Migration |
5 | 5 | settings = YAML.load(task['data']) |
6 | 6 | comments << settings[:organization_rating_comment_id] |
7 | 7 | end |
8 | - execute("DELETE FROM comments WHERE id IN (#{comments.join(',')})") | |
8 | + execute("DELETE FROM comments WHERE id IN (#{comments.join(',')})") if comments.present? | |
9 | 9 | end |
10 | 10 | |
11 | 11 | def down | ... | ... |
plugins/require_auth_to_comment/lib/require_auth_to_comment_plugin.rb
... | ... | @@ -43,7 +43,9 @@ class RequireAuthToCommentPlugin < Noosfero::Plugin |
43 | 43 | |
44 | 44 | protected |
45 | 45 | |
46 | - delegate :logged_in?, :to => :context | |
46 | + def logged_in? | |
47 | + context.send(:logged_in?) | |
48 | + end | |
47 | 49 | |
48 | 50 | def allowed_by_profile |
49 | 51 | context.profile && context.profile.allow_unauthenticated_comments | ... | ... |
plugins/require_auth_to_comment/test/functional/comment_controller_test.rb
0 → 100644
... | ... | @@ -0,0 +1,28 @@ |
1 | +require_relative '../test_helper' | |
2 | + | |
3 | +class CommentControllerTest < ActionController::TestCase | |
4 | + | |
5 | + def setup | |
6 | + @environment = Environment.default | |
7 | + @environment.enable_plugin(RequireAuthToCommentPlugin) | |
8 | + @community = fast_create(Community) | |
9 | + @person = create_user.person | |
10 | + @article = fast_create(TextArticle, :profile_id => @community.id, :body => "some article") | |
11 | + end | |
12 | + | |
13 | + attr_reader :community, :article, :person | |
14 | + | |
15 | + should 'not make comments if not logged in' do | |
16 | + assert_no_difference 'Comment.count' do | |
17 | + xhr :post, :create, :profile => community.identifier, :id => article.id, :comment => {:body => "Some comment..."}, :confirm => 'true' | |
18 | + end | |
19 | + | |
20 | + end | |
21 | + | |
22 | + should 'make comments if logged in' do | |
23 | + login_as person.user.login | |
24 | + assert_difference 'Comment.count', 1 do | |
25 | + xhr :post, :create, :profile => community.identifier, :id => article.id, :comment => {:body => "Some comment..."}, :confirm => 'true' | |
26 | + end | |
27 | + end | |
28 | +end | ... | ... |
... | ... | @@ -0,0 +1 @@ |
1 | +require_relative '../../../test/test_helper' | ... | ... |
plugins/shopping_cart/controllers/shopping_cart_plugin_controller.rb
... | ... | @@ -334,12 +334,11 @@ class ShoppingCartPluginController < OrdersPluginController |
334 | 334 | def save_cookie |
335 | 335 | if @cart.nil? |
336 | 336 | # cookie.delete does not work, set to empty value |
337 | - cookies[cookie_key] = {value: '', path: '/plugin/shopping_cart', expires: Time.at(0)} | |
337 | + cookies.permanent[cookie_key] = {value: '', path: '/plugin/shopping_cart'} | |
338 | 338 | else |
339 | - cookies[cookie_key] = { | |
339 | + cookies.permanent[cookie_key] = { | |
340 | 340 | value: Base64.encode64(@cart.to_yaml), |
341 | 341 | path: "/plugin/shopping_cart", |
342 | - expires: Time.at(0), | |
343 | 342 | } |
344 | 343 | end |
345 | 344 | end | ... | ... |
plugins/shopping_cart/features/delivery_admin.feature
... | ... | @@ -37,7 +37,7 @@ Feature: delivery administration |
37 | 37 | And I select "Deliver" from "Type" |
38 | 38 | And I fill in "Name" with "Bike" |
39 | 39 | And I fill in "Fixed cost" with "8.00" |
40 | - And I fill in "Order's minimum price for free delivery" with "35.50" | |
40 | + And I fill in "delivery_method_free_over_price" with "35.50" | |
41 | 41 | When I press "Add" |
42 | 42 | Then I should see "Bike" within ".delivery-method" |
43 | 43 | ... | ... |
plugins/shopping_cart/features/features
plugins/shopping_cart/features/purchases.feature
... | ... | @@ -61,7 +61,7 @@ Feature: purchases |
61 | 61 | And I follow "Purchases made" |
62 | 62 | And I should see "Accepted" within any ".situation" |
63 | 63 | And I should see "Delivered" within any ".situation" |
64 | - And I select "Delivered" from "Status" | |
64 | + And I select "Delivered" from "status" | |
65 | 65 | When I press "Filter" |
66 | 66 | Then I should not see "Accepted" within any ".situation" |
67 | 67 | And I should see "Delivered" within any ".situation" |
... | ... | @@ -78,7 +78,7 @@ Feature: purchases |
78 | 78 | And I follow "Purchases made" |
79 | 79 | And I should see "1" within any ".code" |
80 | 80 | And I should see "2" within any ".code" |
81 | - And I fill in "Code" with "2" | |
81 | + And I fill in "code" with "2" | |
82 | 82 | When I press "Filter" |
83 | 83 | Then I should not see "1" within any ".code" |
84 | 84 | Then I should see "2" within any ".code" |
... | ... | @@ -108,7 +108,7 @@ Feature: purchases |
108 | 108 | And I follow "Purchases made" |
109 | 109 | And I should see "Moes Tavern" within any ".actor-name" |
110 | 110 | And I should see "First Church of Springfield" within any ".actor-name" |
111 | - And I select "Moes Tavern" from "Supplier" | |
111 | + And I select "Moes Tavern" from "supplier" | |
112 | 112 | When I press "Filter" |
113 | 113 | Then I should see "Moes Tavern" within any ".actor-name" |
114 | 114 | And I should not see "First Church of Springfield" within any ".actor-name" |
... | ... | @@ -132,8 +132,8 @@ Feature: purchases |
132 | 132 | When I follow "Purchases made" |
133 | 133 | Then I should see "Moes Tavern" within any ".actor-name" |
134 | 134 | |
135 | - | |
136 | - @selenium | |
135 | + # FIXME: repeat only appear on the new catalog | |
136 | + @selenium-fixme | |
137 | 137 | Scenario: repeat order |
138 | 138 | Given "moes-tavern" has the following delivery methods |
139 | 139 | | delivery_type | name | description | fixed_cost | free_over_price | |
... | ... | @@ -147,7 +147,6 @@ Feature: purchases |
147 | 147 | And I follow "Add to basket" |
148 | 148 | And I follow "Add to basket" |
149 | 149 | And I follow "Show basket" |
150 | - And I follow "Clean basket" | |
151 | 150 | And I follow "Hide basket" |
152 | 151 | When I follow "checkout" |
153 | 152 | Then I should see "Shopping checkout" | ... | ... |
plugins/shopping_cart/features/sales.feature
... | ... | @@ -61,7 +61,7 @@ Feature: sales |
61 | 61 | And I follow "Purchases and Sales" |
62 | 62 | And I should see "Accepted" within any ".situation" |
63 | 63 | And I should see "Delivered" within any ".situation" |
64 | - And I select "Delivered" from "Status" | |
64 | + And I select "Delivered" from "status" | |
65 | 65 | When I press "Filter" |
66 | 66 | Then I should not see "Accepted" within any ".situation" |
67 | 67 | And I should see "Delivered" within any ".situation" |
... | ... | @@ -78,7 +78,7 @@ Feature: sales |
78 | 78 | And I follow "Purchases and Sales" |
79 | 79 | And I should see "1" within any ".code" |
80 | 80 | And I should see "2" within any ".code" |
81 | - And I fill in "Code" with "2" | |
81 | + And I fill in "code" with "2" | |
82 | 82 | When I press "Filter" |
83 | 83 | Then I should not see "1" within any ".code" |
84 | 84 | Then I should see "2" within any ".code" |
... | ... | @@ -98,7 +98,7 @@ Feature: sales |
98 | 98 | And I follow "Purchases and Sales" |
99 | 99 | And I should see "Homer" within any ".actor-name" |
100 | 100 | And I should see "Reverend Lovejoy" within any ".actor-name" |
101 | - And I select "Homer" from "Consumer" | |
101 | + And I select "Homer" from "consumer" | |
102 | 102 | When I press "Filter" |
103 | 103 | Then I should see "Homer" within any ".actor-name" |
104 | 104 | And I should not see "Reverend Lovejoy" within any ".actor-name" | ... | ... |
plugins/shopping_cart/public/public
plugins/shopping_cart/shopping_cart
plugins/suppliers/test/test_helper.rb
... | ... | @@ -1 +0,0 @@ |
1 | -require File.dirname(__FILE__) + '/../../../test/test_helper' |
plugins/suppliers/test/unit/code_numbering_test.rb
plugins/suppliers/test/unit/default_delegate_test.rb
plugins/suppliers/test/unit/suppliers_plugin/distributed_product_test.rb
... | ... | @@ -1,108 +0,0 @@ |
1 | -require "#{File.dirname(__FILE__)}/../../test_helper" | |
2 | - | |
3 | -class SuppliersPlugin::DistributedProductTest < ActiveSupport::TestCase | |
4 | - | |
5 | - def setup | |
6 | - @product_category = create(ProductCategory, :name => 'parent') | |
7 | - @profile = build(Enterprise) | |
8 | - @invisible_profile = build(Enterprise, :visible => false) | |
9 | - @other_profile = build(Enterprise) | |
10 | - @self_supplier = build(SuppliersPlugin::Supplier, :consumer => @profile, :profile => @profile) | |
11 | - @dummy_supplier = build(SuppliersPlugin::Supplier, :consumer => @profile, :profile => @dummy_profile) | |
12 | - @other_supplier = build(SuppliersPlugin::Supplier, :consumer => @profile, :profile => @other_profile) | |
13 | - end | |
14 | - | |
15 | - attr_accessor :product_category, | |
16 | - :profile, :invisible_profile, :other_profile, | |
17 | - :profile, :dummy_profile, :other_profile, :self_supplier, :dummy_supplier, :other_supplier | |
18 | - | |
19 | - should 'return default settings considering dummy supplier' do | |
20 | - product = build(SuppliersPlugin::DistributedProduct, :profile => @profile, :supplier => @dummy_supplier) | |
21 | - assert_equal nil, product.default_name | |
22 | - assert_equal nil, product.default_description | |
23 | - product = build(SuppliersPlugin::DistributedProduct, :profile => @profile, :supplier => @other_supplier) | |
24 | - assert_equal true, product.default_name | |
25 | - assert_equal true, product.default_description | |
26 | - end | |
27 | - | |
28 | - should 'return price without margins if it is own product' do | |
29 | - product = build(SuppliersPlugin::DistributedProduct, :price => 10, :margin_percentage => 10, :profile => @profile, :supplier => @self_supplier) | |
30 | - assert_equal 10.0, product.price.to_f | |
31 | - end | |
32 | - | |
33 | - should 'return price without margins if supplier product has no price' do | |
34 | - supplier_product = build(SuppliersPlugin::DistributedProduct, :profile => @other_profile, :supplier => @other_profile.self_supplier) | |
35 | - product = build(SuppliersPlugin::DistributedProduct, :price => 10, :margin_percentage => 10, :profile => @profile, :supplier => @other_supplier) | |
36 | - assert_equal 10.0, product.price.to_f | |
37 | - end | |
38 | - | |
39 | - should 'return price with margins' do | |
40 | - supplier_product = build(SuppliersPlugin::DistributedProduct, :price => 10, :margin_percentage => 10, :profile => @other_profile, :supplier => @other_profile.self_supplier) | |
41 | - product = build(SuppliersPlugin::DistributedProduct, :price => 10, :margin_percentage => 10, :supplier_product => supplier_product, :profile => @profile, :supplier => @other_supplier) | |
42 | - | |
43 | - product.default_margin_percentage = false | |
44 | - assert_equal 11.0, product.price.to_f | |
45 | - profile.margin_percentage = 20 | |
46 | - product.default_margin_percentage = true | |
47 | - assert_equal 12.0, product.price.to_f | |
48 | - end | |
49 | - | |
50 | - should 'allow set of supplier product' do | |
51 | - product = build(SuppliersPlugin::DistributedProduct, :price => 10, :margin_percentage => 10, :profile => @profile, :supplier => @self_supplier) | |
52 | - | |
53 | - product.from_product = build(SuppliersPlugin::DistributedProduct, :profile => @profile, :supplier => @self_supplier) | |
54 | - assert_nothing_raised do | |
55 | - product.supplier_product = {:price => 10, :margin_percentage => 10} | |
56 | - product.supplier_product = SuppliersPlugin::DistributedProduct.new :price => 5 | |
57 | - end | |
58 | - end | |
59 | - | |
60 | - should 'create a supplier product for a dummy supplier' do | |
61 | - product = build(SuppliersPlugin::DistributedProduct, :profile => @profile, :supplier => @dummy_supplier) | |
62 | - assert product.supplier_product | |
63 | - # negative assertion | |
64 | - product = build(SuppliersPlugin::DistributedProduct, :profile => @profile, :supplier => @other_supplier) | |
65 | - assert !product.supplier_product | |
66 | - end | |
67 | - | |
68 | - should 'respond to supplier_product_id setter and getter' do | |
69 | - product = create(SuppliersPlugin::DistributedProduct, :profile => @profile, :supplier => @dummy_supplier) | |
70 | - assert_equal product.supplier_product.id, product.supplier_product_id | |
71 | - product.expects(:distribute_from) | |
72 | - product.supplier_product_id = 1 | |
73 | - end | |
74 | - | |
75 | - should 'respond to distribute_from' do | |
76 | - product = create(SuppliersPlugin::DistributedProduct, :profile => @profile, :supplier => @profile.self_supplier) | |
77 | - | |
78 | - assert_raise RuntimeError do | |
79 | - supplier_product = build(SuppliersPlugin::DistributedProduct, :profile => @other_profile) | |
80 | - product.distribute_from(supplier_product) | |
81 | - end | |
82 | - | |
83 | - supplier_product = create(SuppliersPlugin::DistributedProduct, :profile => @other_profile) | |
84 | - product.profile.add_supplier @other_profile | |
85 | - product.distribute_from supplier_product | |
86 | - assert_equal product.supplier.profile, supplier_product.profile | |
87 | - assert_equal product.supplier.profile, supplier_product.profile | |
88 | - end | |
89 | - | |
90 | - should 'return json for category hierarchy' do | |
91 | - grandparent = create(ProductCategory, :name => 'grand parent') | |
92 | - parent = create(ProductCategory, :name => 'parent') | |
93 | - child = product_category | |
94 | - | |
95 | - product = SuppliersPlugin::DistributedProduct.new :category => parent | |
96 | - hash = {:own_name => "parent", :id => "2", :subcats => [], :name => "parent", | |
97 | - :hierarchy => [{:own_name => "parent", :subcats => [], :name => "parent", :id => "2"}]} | |
98 | - assert_equal hash, product.json_for_category | |
99 | - end | |
100 | - | |
101 | - should 'block own product distribution' do | |
102 | - product = Product.create :enterprise => @profile, :product_category => product_category | |
103 | - distributed = SuppliersPlugin::DistributedProduct.new :enterprise => @profile, :from_products => [product] | |
104 | - | |
105 | - assert distributed.invalid? | |
106 | - end | |
107 | - | |
108 | -end |
plugins/suppliers/test/unit/suppliers_plugin/product_test.rb
... | ... | @@ -1,49 +0,0 @@ |
1 | -require "test_helper" | |
2 | - | |
3 | -class SuppliersPlugin::ProductTest < ActiveSupport::TestCase | |
4 | - | |
5 | - def setup | |
6 | - @product = build(SuppliersPlugin::BaseProduct) | |
7 | - end | |
8 | - | |
9 | - should 'return first from product as supplier product' do | |
10 | - fp = build(SuppliersPlugin::BaseProduct, :profile => @product.profile) | |
11 | - @product.from_products = [fp] | |
12 | - assert_equal fp, @product.from_product | |
13 | - assert_equal fp, @product.supplier_product | |
14 | - end | |
15 | - | |
16 | - should 'respond to dummy and own' do | |
17 | - assert !@product.dummy? | |
18 | - assert @product.own? | |
19 | - end | |
20 | - | |
21 | - should 'return price with margins' do | |
22 | - supplier_product = build(SuppliersPlugin::DistributedProduct, :price => 10, :margin_percentage => 10, :profile => @product.profile, :supplier => @product.profile.self_supplier) | |
23 | - product = build(SuppliersPlugin::DistributedProduct, :price => 10, :margin_percentage => 10, :supplier_product => supplier_product, :profile => @product.profile, :supplier => @product.profile.self_supplier) | |
24 | - | |
25 | - product.default_margin_percentage = false | |
26 | - assert_equal 11.0, product.price_with_margins | |
27 | - @product.profile.margin_percentage = 20 | |
28 | - product.default_margin_percentage = true | |
29 | - assert_equal 12.0, product.price_with_margins | |
30 | - end | |
31 | - | |
32 | - should 'build default unit if none exists' do | |
33 | - assert_equal 0, Unit.count | |
34 | - assert 'unit', @product.unit.singular | |
35 | - end | |
36 | - | |
37 | - should 'avoid destroy by raising an exception' do | |
38 | - assert_raise RuntimeError do | |
39 | - @product.destroy | |
40 | - end | |
41 | - end | |
42 | - | |
43 | - should 'accept price in different formats' do | |
44 | - @product.price = '2,45' | |
45 | - assert_equal 2.45, @product.price | |
46 | - end | |
47 | - | |
48 | - | |
49 | -end |
plugins/suppliers/test/unit/suppliers_plugin/source_product_test.rb
plugins/suppliers/test/unit/suppliers_plugin/supplier_test.rb
test/test_helper.rb
... | ... | @@ -87,7 +87,9 @@ class ActiveSupport::TestCase |
87 | 87 | alias :ok :assert_block |
88 | 88 | |
89 | 89 | def assert_equivalent(enum1, enum2) |
90 | - assert( ((enum1 - enum2) == []) && ((enum2 - enum1) == []), "<#{enum1.inspect}> expected to be equivalent to <#{enum2.inspect}>") | |
90 | + enum1 = enum1.group_by{|e|e}.values | |
91 | + enum2 = enum2.group_by{|e|e}.values | |
92 | + assert( (enum1.length == enum2.length) && ((enum1 - enum2) == []), "<#{enum1.inspect}> expected to be equivalent to <#{enum2.inspect}>") | |
91 | 93 | end |
92 | 94 | |
93 | 95 | def assert_mandatory(object, attribute, test_value = 'some random string') | ... | ... |
test/unit/product_category_test.rb
... | ... | @@ -44,6 +44,23 @@ class ProductCategoryTest < ActiveSupport::TestCase |
44 | 44 | p1 = Product.new(:name => 'product1', :product_category => c1) |
45 | 45 | p1.profile = enterprise |
46 | 46 | p1.save! |
47 | + p3 = Product.new(:name => 'product3', :product_category => c2) | |
48 | + p3.profile = enterprise | |
49 | + p3.save! | |
50 | + | |
51 | + scope = ProductCategory.by_enterprise(enterprise) | |
52 | + | |
53 | + assert_equivalent [c1,c2], scope | |
54 | + end | |
55 | + | |
56 | + should 'provide a scope based on the enterprise returning distinct elements' do | |
57 | + enterprise = fast_create(Enterprise) | |
58 | + c1 = ProductCategory.create!(:name => 'test cat 1', :environment => Environment.default) | |
59 | + c2 = ProductCategory.create!(:name => 'test cat 2', :environment => Environment.default) | |
60 | + c3 = ProductCategory.create!(:name => 'test cat 3', :environment => Environment.default) | |
61 | + p1 = Product.new(:name => 'product1', :product_category => c1) | |
62 | + p1.profile = enterprise | |
63 | + p1.save! | |
47 | 64 | p2 = Product.new(:name => 'product2', :product_category => c1) |
48 | 65 | p2.profile = enterprise |
49 | 66 | p2.save! | ... | ... |