Commit fa3b8c7e4a918e82a3502ea2cf850eaf84c2e14e

Authored by Victor Costa
2 parents a45fc54a dbaa5364

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
... ... @@ -1 +0,0 @@
1   -/home/braulio/Projects/noosfero-ecosol/noosfero/plugins/orders
2 0 \ No newline at end of file
plugins/orders/public/public
... ... @@ -1 +0,0 @@
1   -/home/braulio/Projects/noosfero-ecosol/noosfero/config/plugins/orders/public
2 0 \ No newline at end of file
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
... ... @@ -1,6 +0,0 @@
1   -require File.dirname(__FILE__) + '/../../../test/test_helper'
2   -require 'spec'
3   -
4   -class ActiveRecord::TestCase < ActiveSupport::TestCase
5   - include OrdersCyclePluginFactory
6   -end
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
... ... @@ -1,6 +0,0 @@
1   -require "#{File.dirname(__FILE__)}/../../test_helper"
2   -
3   -class OrdersCyclePlugin::OfferedProductTest < ActiveSupport::TestCase
4   -
5   -
6   -end
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 &lt; 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 &lt; 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
... ...
plugins/require_auth_to_comment/test/test_helper.rb 0 → 100644
... ... @@ -0,0 +1 @@
  1 +require_relative '../../../test/test_helper'
... ...
plugins/shopping_cart/controllers/shopping_cart_plugin_controller.rb
... ... @@ -334,12 +334,11 @@ class ShoppingCartPluginController &lt; 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
... ... @@ -1 +0,0 @@
1   -/home/braulio/Projects/noosfero-ecosol/noosfero/config/plugins/shopping_cart/features
2 0 \ No newline at end of file
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
... ... @@ -1 +0,0 @@
1   -/home/braulio/Projects/noosfero-ecosol/noosfero/config/plugins/shopping_cart/public
2 0 \ No newline at end of file
plugins/shopping_cart/shopping_cart
... ... @@ -1 +0,0 @@
1   -/home/braulio/Projects/noosfero-ecosol/noosfero/plugins/shopping_cart
2 0 \ No newline at end of file
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
... ... @@ -1,7 +0,0 @@
1   -require File.dirname(__FILE__) + '/../../../../test/test_helper'
2   -
3   -class CodeNumberingTest < ActiveSupport::TestCase
4   -
5   -
6   -end
7   -
plugins/suppliers/test/unit/default_delegate_test.rb
... ... @@ -1,6 +0,0 @@
1   -require 'test_helper'
2   -
3   -class DefaultDelegateTest < ActiveSupport::TestCase
4   -
5   -
6   -end
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
... ... @@ -1,8 +0,0 @@
1   -require "#{File.dirname(__FILE__)}/../../test_helper"
2   -
3   -class SuppliersPlugin::SourceProductTest < ActiveSupport::TestCase
4   -
5   - def setup
6   - end
7   -
8   -end
plugins/suppliers/test/unit/suppliers_plugin/supplier_test.rb
... ... @@ -1,8 +0,0 @@
1   -require "#{File.dirname(__FILE__)}/../../test_helper"
2   -
3   -class SuppliersPlugin::SupplierTest < ActiveSupport::TestCase
4   -
5   - def setup
6   - end
7   -
8   -end
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 &lt; 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!
... ...