Commit 70cba03640bccdc1069ea920b490892212e73131
1 parent
0c7e0d36
Exists in
master
and in
29 other branches
orders-plugin: features tests
Showing
6 changed files
with
250 additions
and
13 deletions
Show diff stats
... | ... | @@ -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" | ... | ... |
... | ... | @@ -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 %> | ... | ... |