Commit 70cba03640bccdc1069ea920b490892212e73131

Authored by Rodrigo Souto
1 parent 0c7e0d36

orders-plugin: features tests

plugins/orders/features/purchases.feature 0 → 100644
... ... @@ -0,0 +1,113 @@
  1 +Feature: purchases
  2 + As an enterprise's client
  3 + I want to view my purchases
  4 + In order to manage the products I bought
  5 +
  6 + Background:
  7 + Given "ShoppingCart" plugin is enabled
  8 + And "Orders" plugin is enabled
  9 + And the following users
  10 + | login | name | email |
  11 + | moe | Moe | moe@springfield.com |
  12 + | homer | Homer | homer@springfield.com |
  13 + And the following enterprise
  14 + | identifier | name | owner |
  15 + | moes-tavern | Moes Tavern | moe |
  16 + And the shopping basket is enabled on "Moes Tavern"
  17 + And the following product_categories
  18 + | name |
  19 + | Beer |
  20 + | Snacks |
  21 + And the following products
  22 + | owner | category | name | price |
  23 + | moes-tavern | beer | Duff | 3.00 |
  24 + | moes-tavern | snacks | French fries | 7.00 |
  25 + And feature "products_for_enterprises" is enabled on environment
  26 + And I am logged in as "homer"
  27 + And I am on homer's control panel
  28 +
  29 + @selenium
  30 + Scenario: view orders
  31 + Given the following purchase from "homer" on "moes-tavern" that is "ordered"
  32 + | product | quantity | price |
  33 + | Duff | 3 | 3.50 |
  34 + | French fries | 1 | 7.00 |
  35 + When I follow "Purchases made"
  36 + Then I should see "Moes Tavern" within any ".actor-name"
  37 + And I should see "17.50" within any ".total"
  38 + And I should see "Ordered" within any ".situation"
  39 +
  40 + @selenium
  41 + Scenario: view orders with different status
  42 + Given the following purchase from "homer" on "moes-tavern" that is "accepted"
  43 + | product | quantity | price |
  44 + | Duff | 2 | 3.50 |
  45 + And the following purchase from "homer" on "moes-tavern" that is "delivered"
  46 + | product | quantity | price |
  47 + | French fries | 1 | 7.00 |
  48 + When I follow "Purchases made"
  49 + Then I should see "Accepted" within any ".situation"
  50 + And I should see "Delivered" within any ".situation"
  51 +
  52 + @selenium
  53 + Scenario: filter orders by situation
  54 + Given the following purchase from "homer" on "moes-tavern" that is "accepted"
  55 + | product | quantity | price |
  56 + | Duff | 2 | 3.50 |
  57 + And the following purchase from "homer" on "moes-tavern" that is "delivered"
  58 + | product | quantity | price |
  59 + | French fries | 1 | 7.00 |
  60 + And I follow "Purchases made"
  61 + And I should see "Accepted" within any ".situation"
  62 + And I should see "Delivered" within any ".situation"
  63 + And I select "Delivered" from "Status"
  64 + When I press "Filter"
  65 + Then I should not see "Accepted" within any ".situation"
  66 + And I should see "Delivered" within any ".situation"
  67 +
  68 +
  69 + @selenium
  70 + Scenario: filter orders by code
  71 + Given the following purchase from "homer" on "moes-tavern" that is "ordered"
  72 + | product | quantity | price |
  73 + | Duff | 2 | 3.50 |
  74 + And the following purchase from "homer" on "moes-tavern" that is "ordered"
  75 + | product | quantity | price |
  76 + | French fries | 1 | 7.00 |
  77 + And I follow "Purchases made"
  78 + And I should see "1" within any ".code"
  79 + And I should see "2" within any ".code"
  80 + And I fill in "Code" with "2"
  81 + When I press "Filter"
  82 + Then I should not see "1" within any ".code"
  83 + Then I should see "2" within any ".code"
  84 +
  85 +
  86 + @selenium
  87 + Scenario: filter orders by supplier
  88 + Given the following users
  89 + | login | name | email |
  90 + | lovejoy | Reverend Lovejoy | lovejoy@springfield.com |
  91 + And the following enterprise
  92 + | identifier | name | owner |
  93 + | first-church-of-springfield | First Church of Springfield | lovejoy |
  94 + And the shopping basket is enabled on "First Church of Springfield"
  95 + And the following product_categories
  96 + | name |
  97 + | Holy |
  98 + And the following products
  99 + | owner | category | name | price |
  100 + | first-church-of-springfield | holy | Wine | 5.00 |
  101 + And the following purchase from "homer" on "moes-tavern" that is "ordered"
  102 + | product | quantity | price |
  103 + | French fries | 1 | 7.00 |
  104 + And the following purchase from "homer" on "first-church-of-springfield" that is "ordered"
  105 + | product | quantity | price |
  106 + | Wine | 5 | 10.50 |
  107 + And I follow "Purchases made"
  108 + And I should see "Moes Tavern" within any ".actor-name"
  109 + And I should see "First Church of Springfield" within any ".actor-name"
  110 + And I select "Moes Tavern" from "Supplier"
  111 + When I press "Filter"
  112 + Then I should see "Moes Tavern" within any ".actor-name"
  113 + And I should not see "First Church of Springfield" within any ".actor-name"
... ...
plugins/orders/features/sales.feature 0 → 100644
... ... @@ -0,0 +1,104 @@
  1 +Feature: sales
  2 + As an enterprise's administrator
  3 + I want to view my sales
  4 + In order to manage the products I sold
  5 +
  6 + Background:
  7 + Given "ShoppingCart" plugin is enabled
  8 + And "Orders" plugin is enabled
  9 + And the following users
  10 + | login | name | email |
  11 + | moe | Moe | moe@springfield.com |
  12 + | homer | Homer | homer@springfield.com |
  13 + And the following enterprise
  14 + | identifier | name | owner |
  15 + | moes-tavern | Moes Tavern | moe |
  16 + And "Moe" is admin of "Moes Tavern"
  17 + And the shopping basket is enabled on "Moes Tavern"
  18 + And the following product_categories
  19 + | name |
  20 + | Beer |
  21 + | Snacks |
  22 + And the following products
  23 + | owner | category | name | price |
  24 + | moes-tavern | beer | Duff | 3.00 |
  25 + | moes-tavern | snacks | French fries | 7.00 |
  26 + And feature "products_for_enterprises" is enabled on environment
  27 + And I am logged in as "moe"
  28 + And I am on moes-tavern's control panel
  29 +
  30 + @selenium
  31 + Scenario: view orders
  32 + Given the following purchase from "homer" on "moes-tavern" that is "ordered"
  33 + | product | quantity | price |
  34 + | Duff | 3 | 3.50 |
  35 + | French fries | 1 | 7.00 |
  36 + When I follow "Purchases and Sales"
  37 + Then I should see "Homer" within any ".actor-name"
  38 + And I should see "17.50" within any ".total"
  39 + And I should see "Ordered" within any ".situation"
  40 +
  41 + @selenium
  42 + Scenario: view orders with different status
  43 + Given the following purchase from "homer" on "moes-tavern" that is "accepted"
  44 + | product | quantity | price |
  45 + | Duff | 2 | 3.50 |
  46 + And the following purchase from "homer" on "moes-tavern" that is "delivered"
  47 + | product | quantity | price |
  48 + | French fries | 1 | 7.00 |
  49 + When I follow "Purchases and Sales"
  50 + Then I should see "Accepted" within any ".situation"
  51 + And I should see "Delivered" within any ".situation"
  52 +
  53 + @selenium
  54 + Scenario: filter orders by situation
  55 + Given the following purchase from "homer" on "moes-tavern" that is "accepted"
  56 + | product | quantity | price |
  57 + | Duff | 2 | 3.50 |
  58 + And the following purchase from "homer" on "moes-tavern" that is "delivered"
  59 + | product | quantity | price |
  60 + | French fries | 1 | 7.00 |
  61 + And I follow "Purchases and Sales"
  62 + And I should see "Accepted" within any ".situation"
  63 + And I should see "Delivered" within any ".situation"
  64 + And I select "Delivered" from "Status"
  65 + When I press "Filter"
  66 + Then I should not see "Accepted" within any ".situation"
  67 + And I should see "Delivered" within any ".situation"
  68 +
  69 +
  70 + @selenium
  71 + Scenario: filter orders by code
  72 + Given the following purchase from "homer" on "moes-tavern" that is "ordered"
  73 + | product | quantity | price |
  74 + | Duff | 2 | 3.50 |
  75 + And the following purchase from "homer" on "moes-tavern" that is "ordered"
  76 + | product | quantity | price |
  77 + | French fries | 1 | 7.00 |
  78 + And I follow "Purchases and Sales"
  79 + And I should see "1" within any ".code"
  80 + And I should see "2" within any ".code"
  81 + And I fill in "Code" with "2"
  82 + When I press "Filter"
  83 + Then I should not see "1" within any ".code"
  84 + Then I should see "2" within any ".code"
  85 +
  86 +
  87 + @selenium
  88 + Scenario: filter orders by consumer
  89 + Given the following users
  90 + | login | name | email |
  91 + | lovejoy | Reverend Lovejoy | lovejoy@springfield.com |
  92 + And the following purchase from "homer" on "moes-tavern" that is "ordered"
  93 + | product | quantity | price |
  94 + | Duff | 5 | 10.50 |
  95 + And the following purchase from "lovejoy" on "moes-tavern" that is "ordered"
  96 + | product | quantity | price |
  97 + | French fries | 1 | 7.00 |
  98 + And I follow "Purchases and Sales"
  99 + And I should see "Homer" within any ".actor-name"
  100 + And I should see "Reverend Lovejoy" within any ".actor-name"
  101 + And I select "Homer" from "Consumer"
  102 + When I press "Filter"
  103 + Then I should see "Homer" within any ".actor-name"
  104 + And I should not see "Reverend Lovejoy" within any ".actor-name"
... ...
plugins/orders/features/step_definitions/orders_steps.rb 0 → 100644
... ... @@ -0,0 +1,20 @@
  1 +Given /^the shopping basket is (enabled|disabled) on "([^""]*)"$/ do |status, name|
  2 + status = status == 'enabled'
  3 + enterprise = Enterprise.find_by_name(name) || Enterprise[name]
  4 + settings = enterprise.shopping_cart_settings({:enabled => status})
  5 + settings.save!
  6 +end
  7 +
  8 +Given /^the following purchase from "([^""]*)" on "([^""]*)" that is "([^""]*)"$/ do |consumer_identifier, enterprise_identifier, status, table|
  9 + consumer = Person.find_by_name(consumer_identifier) || Person[consumer_identifier]
  10 + enterprise = Enterprise.find_by_name(enterprise_identifier) || Enterprise[enterprise_identifier]
  11 + order = OrdersPlugin::Purchase.new(:profile => enterprise, :consumer => consumer, :status => status)
  12 +
  13 + table.hashes.map{|item| item.dup}.each do |item|
  14 + product = enterprise.products.find_by_name item[:product]
  15 + item = order.items.build({:product => product, :name => item[:product], :quantity_consumer_ordered => item[:quantity], :price => item[:price]})
  16 + item.order = order
  17 + end
  18 +
  19 + order.save!
  20 +end
... ...
plugins/orders/lib/ext/profile.rb
... ... @@ -20,21 +20,21 @@ class Profile
20 20 has_many :ordered_items, through: :orders, source: :items, order: 'name ASC'
21 21  
22 22 has_many :sales_consumers, through: :sales, source: :consumer
23   - has_many :purchases_consumers, through: :sales, source: :consumer
  23 + has_many :purchases_consumers, through: :purchases, source: :consumer
24 24  
25 25 has_many :sales_profiles, through: :sales, source: :profile
26   - has_many :purchases_profiles, through: :sales, source: :profile
  26 + has_many :purchases_profiles, through: :purchases, source: :profile
27 27  
28 28 def sales_all_consumers
29 29 consumers = self.sales_consumers.order 'name ASC'
30   - consumers.concat self.suppliers.except_self.order('name ASC') if self.respond_to? :suppliers
31   - consumers.uniq
32   - end
33   - def purchases_all_consumers
34   - consumers = self.purchases_consumers.order 'name ASC'
35 30 consumers.concat self.consumers.except_self.order('name ASC') if self.respond_to? :consumers
36 31 consumers.uniq
37 32 end
  33 + def purchases_all_suppliers
  34 + suppliers = self.purchases_profiles.order 'name ASC'
  35 + suppliers.concat self.suppliers.except_self.order('name ASC') if self.respond_to? :suppliers
  36 + suppliers.uniq
  37 + end
38 38  
39 39 def self.create_orders_manager_role env_id
40 40 env = Environment.find env_id
... ...
plugins/orders/views/orders_plugin_admin/_filter_fields.html.slim
... ... @@ -3,21 +3,21 @@
3 3 div= render 'orders_plugin/shared/daterangepicker/init'
4 4  
5 5 .field.state
6   - label= t'views.filter.status'
  6 + label for="status" = t'views.filter.status'
7 7 div= select_tag :status,
8 8 options_for_select([[t('views.filter.all'), ""]] + OrdersPlugin::Order::StatusText.map{ |id, name| [t(name), id] }, params[:status])
9 9  
10 10 .field.code
11   - label= t'views.filter.code'
  11 + label for="code" = t'views.filter.code'
12 12 div= text_field_tag :code, params[:code]
13 13  
14 14 div class="field #{actor_name}"
15   - label= t"terms.#{actor_name}.singular", transformation: :capitalize
  15 + label for="#{actor_name}_id" = t"terms.#{actor_name}.singular", transformation: :capitalize
16 16 div= select_tag "#{actor_name}_id",
17 17 options_for_select([[t('views.filter.all'), ""]] + actors.map{ |a| [a.name, a.id] }, params["#{actor_name}_id"])
18 18  
19 19 .field.delivery
20   - label= t'views.filter.delivery'
  20 + label for="delivery_method_id" = t'views.filter.delivery'
21 21 div= select_tag :delivery_method_id,
22 22 options_for_select([[t('views.filter.all'), ""]] + orders_owner.delivery_methods.map{ |dm| [dm.name, dm.id] }, params[:delivery_method_id])
23 23  
... ...
plugins/orders/views/orders_plugin_admin/_index.html.erb
... ... @@ -12,14 +12,14 @@
12 12  
13 13 <% if @purchases.present? %>
14 14 <div id='purchases' class="tab-pane">
15   - <%= render 'orders_plugin_admin/purchases', actors: profile.sales_all_consumers,
  15 + <%= render 'orders_plugin_admin/purchases', actors: profile.purchases_all_suppliers,
16 16 orders_owner: profile, orders: @purchases, month: @purchases_month, year: @purchases_year, wireframe_size: false %>
17 17 </div>
18 18 <% end %>
19 19  
20 20 <% if @sales.present? %>
21 21 <div id='sales' class="tab-pane">
22   - <%= render 'orders_plugin_admin/sales', actors: profile.purchases_all_consumers,
  22 + <%= render 'orders_plugin_admin/sales', actors: profile.sales_all_consumers,
23 23 orders_owner: profile, orders: @sales, month: @sales_month, year: @purchases_year, wireframe_size: false %>
24 24 </div>
25 25 <% end %>
... ...