solidus_seo 1.0.11 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4b59bc10f88b145907a907757d59bfa0ddfc1991e7e20313bb4b2b7bb522935f
4
- data.tar.gz: 879ddd7cbc5884f6eefcfd027d266e8a8c17a707f9312cdf6367970bc9c47d33
3
+ metadata.gz: 216bf7f2c50a2e4513308e4aa12f7f3685f4aa01621ffc2f8d0a025a4a4b88d2
4
+ data.tar.gz: f7106060098a781ec08ba7c02447738d511e39bf0c3be675aafc1a4b837aa69c
5
5
  SHA512:
6
- metadata.gz: b2f9462a55c124cc5eb2871a8fcdf5c0215bf7fc6280c50295da392f12169c4b2c93a9ca5a13f77291beb4a481fd7de38fb4c25b407e68b83614aab9efa5bbd9
7
- data.tar.gz: 41787840fd2c469c0103a2f76b53b93586a4c09febbabb9ff82ca1845dfa8c8ed7b035e386e53b2e0cb903873824cd119510784a1a5da53429fb2ae6e088e495
6
+ metadata.gz: 89bd816d982a8d8c8358f2e769ad5d030ce141097e0067a6b585e0bdfb3454ba88bf08c129c913baf6c5754c3465b8040cb22bb7c00db36f28aabc650340e1b2
7
+ data.tar.gz: 6c05b6024066f4a6b36299f077883fc2086a0b9fba78415368a8b55662142214bdd006486330c821c4a94496aa699e581f2f6cfeb1a6e155bdc30d00782f6b76
data/README.md CHANGED
@@ -45,8 +45,10 @@ Here are the changes we make, via deface, in the default Solidus views as part o
45
45
 
46
46
  - In `spree/layouts/spree_application.html.erb`
47
47
  - Insert `<%= render 'solidus_seo/analytics' %>` just before `</head>`.
48
+ - Insert `<%= render 'solidus_seo/noscript_tags' %>` immediately after the `<body>` opening tag.
48
49
  - Insert `<%= dump_jsonld %>` just before the `</body>` closing tag.
49
50
  - Replace `<%= taxon_breadcrumbs(@taxon) %>` with (`<%= taxon_breadcrumbs_jsonld(@taxon) %>`) which does the same as the original plus prints a JSON-LD tag.
51
+ - Replace `<%= flash_messages %>` with (`<%= flash_messages(ignore_types: 'added_to_cart') %>`) which does the same as the original plus prints a JSON-LD tag.
50
52
 
51
53
  - In `spree/products/show.html.erb`:
52
54
  - Insert `<%= jsonld @product %>` anywhere inside the `cache` block.
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module CheckoutControllerDecorator
5
+ def self.prepended(base)
6
+ base.class_eval do
7
+ end
8
+ end
9
+
10
+ def before_address
11
+ flash[:checkout_initiated] =
12
+ @order.address? &&
13
+ request.referrer =~ /#{cart_path}\b/i &&
14
+ params[:action] == 'edit'
15
+
16
+ super
17
+ end
18
+
19
+ private
20
+
21
+ ::Spree::StoreController.prepend(self)
22
+ end
23
+ end
@@ -1,25 +1,57 @@
1
1
  <%
2
2
  return if ENV['FACEBOOK_PIXEL_ID'].blank?
3
3
 
4
- if just_purchased
5
- order_data = {
6
- value: order.total,
7
- currency: order.currency,
4
+ event_data = {}
5
+
6
+ if order.present?
7
+ if just_purchased
8
+ event_data[:order] = {
9
+ value: order.total,
10
+ currency: order.currency,
11
+ content_type: 'product',
12
+ contents: order.line_items.map do |line_item|
13
+ { id: line_item.variant.sku, quantity: line_item.quantity }
14
+ end,
15
+
16
+ # custom properties
17
+ order_number: order.number,
18
+ item_total: order.item_total,
19
+ tax_total: order.tax_total,
20
+ ship_total: order.ship_total,
21
+ promo_total: order.promo_total
22
+ }
23
+ end
24
+
25
+ if flash[:added_to_cart].present?
26
+ event_data[:added_to_cart] = {
27
+ currency: order.currency,
28
+ content_type: 'product',
29
+ contents: flash[:added_to_cart].map do |variant_sku, variant|
30
+ { id: variant_sku, quantity: variant['quantity'] }
31
+ end
32
+ }
33
+ end
34
+
35
+ if flash[:checkout_initiated].present?
36
+ event_data[:checkout_initiated] = {
37
+ value: order.total,
38
+ currency: order.currency,
39
+ content_type: 'product',
40
+ contents: order.line_items.map do |line_item|
41
+ { id: line_item.variant.sku, quantity: line_item.quantity }
42
+ end
43
+ }
44
+ end
45
+ end
46
+
47
+ if @product
48
+ event_data[:current_product] = {
8
49
  content_type: 'product',
9
- contents: order.line_items.map do |line_item|
10
- next unless line_item.variant
11
-
12
- { id: line_item.variant.sku, quantity: line_item.quantity }
13
- end.compact,
14
-
15
- # custom properties
16
- order_number: order.number,
17
- item_total: order.item_total,
18
- tax_total: order.tax_total,
19
- ship_total: order.ship_total,
20
- promo_total: order.promo_total
50
+ content_name: @product.name,
51
+ content_ids: [@product.master.sku]
21
52
  }
22
53
  end
54
+
23
55
  %>
24
56
  <script type="text/javascript" data-tag="facebook">
25
57
  !function(f,b,e,v,n,t,s) {if (f.fbq) return;n = f.fbq = function() { n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments) };if (!f._fbq) f._fbq=n;n.push = n; n.loaded = !0; n.version = '2.0'; n.queue=[]; t = b.createElement(e); t.async = !0; t.src = v;s = b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t, s);}(window, document,'script', 'https://connect.facebook.net/en_US/fbevents.js');
@@ -27,10 +59,25 @@ end
27
59
  fbq('init', '<%= ENV['FACEBOOK_PIXEL_ID'] %>');
28
60
  fbq('track', 'PageView');
29
61
 
30
- <% if just_purchased %>
31
- fbq('track', 'Purchase', <%== order_data.to_json %>);
62
+ <% if event_data[:order].present? %>
63
+ fbq('track', 'Purchase', <%== event_data[:order].to_json %>);
32
64
  window.solidusSeoDataLayer('facebook', 'purchase');
33
65
  <% end %>
66
+
67
+ <% if event_data[:added_to_cart].present? %>
68
+ fbq('track', 'AddToCart', <%== event_data[:added_to_cart].to_json %>);
69
+ window.solidusSeoDataLayer('facebook', 'addtocart');
70
+ <% end %>
71
+
72
+ <% if event_data[:checkout_initiated].present? %>
73
+ fbq('track', 'InitiateCheckout', <%== event_data[:checkout_initiated].to_json %>);
74
+ window.solidusSeoDataLayer('facebook', 'initiatecheckout');
75
+ <% end %>
76
+
77
+ <% if event_data[:current_product].present? %>
78
+ fbq('track', 'ViewContent', <%== event_data[:current_product].to_json %>);
79
+ window.solidusSeoDataLayer('facebook', 'viewcontent');
80
+ <% end %>
34
81
  </script>
35
82
  <noscript>
36
83
  <img height="1" width="1" src="https://www.facebook.com/tr?id=<%= ENV['FACEBOOK_PIXEL_ID'] %>&ev=PageView&noscript=1" />
@@ -1,13 +1,13 @@
1
1
  <%
2
2
  return if ENV['GOOGLE_TAG_MANAGER_ID'].present? || ENV['GOOGLE_ANALYTICS_ID'].blank?
3
3
 
4
+ event_data = {}
5
+
4
6
  if just_purchased
5
- order_data = {
7
+ event_data[:order] = {
6
8
  transaction_id: order.number,
7
9
  value: order.total,
8
10
  items: order.line_items.map do |line_item|
9
- next unless line_item.variant
10
-
11
11
  {
12
12
  id: line_item.variant.sku,
13
13
  name: line_item.variant.name,
@@ -15,7 +15,7 @@ if just_purchased
15
15
  variant: line_item.variant.options_text,
16
16
  quantity: line_item.quantity
17
17
  }
18
- end.compact,
18
+ end,
19
19
 
20
20
  affiliation: current_store.name,
21
21
  currency: order.currency,
@@ -35,7 +35,7 @@ end
35
35
 
36
36
  <% if just_purchased %>
37
37
  <script data-tag="google-analytics">
38
- gtag('event', 'purchase', <%== order_data.to_json %>);
38
+ gtag('event', 'purchase', <%== event_data[:order].to_json %>);
39
39
  window.solidusSeoDataLayer('google-analytics', 'purchase');
40
40
  </script>
41
41
  <% end %>
@@ -1,29 +1,29 @@
1
1
  <%
2
2
  return if ENV['GOOGLE_ANALYTICS_ID'].present? || ENV['GOOGLE_TAG_MANAGER_ID'].blank?
3
3
 
4
- if just_purchased
5
- order_data = {
6
- id: order.number,
7
- revenue: order.total,
8
- coupon: '', # TODO: Add coupon code if present
9
-
10
- affiliation: current_store.name,
11
- currency: order.currency,
12
- tax: order.tax_total,
13
- shipping: order.ship_total
14
- }
4
+ event_data = {}
15
5
 
16
- purchased_items = order.line_items.map do |line_item|
17
- next unless line_item.variant
6
+ if just_purchased
7
+ event_data[:order] = {
8
+ id: order.number,
9
+ revenue: order.total,
10
+ coupon: order.adjustments.promotion.first&.promotion_code&.value,
18
11
 
19
- {
20
- id: line_item.variant.sku,
21
- name: line_item.variant.name,
22
- price: line_item.total,
23
- variant: line_item.variant.options_text,
24
- quantity: line_item.quantity
12
+ affiliation: current_store.name,
13
+ currency: order.currency,
14
+ tax: order.tax_total,
15
+ shipping: order.ship_total
25
16
  }
26
- end.compact
17
+
18
+ event_data[:order_contents] = order.line_items.map do |line_item|
19
+ {
20
+ id: line_item.variant.sku,
21
+ name: line_item.variant.name,
22
+ price: line_item.total,
23
+ variant: line_item.variant.options_text,
24
+ quantity: line_item.quantity
25
+ }
26
+ end
27
27
  end
28
28
  %>
29
29
  <script type="text/javascript" data-tag="google-tag-manager">
@@ -33,8 +33,8 @@ end
33
33
  window.dataLayer.push({
34
34
  'ecommerce': {
35
35
  'purchase': {
36
- 'actionField': <%== order_data.to_json %>,
37
- 'products': <%== purchased_items.to_json %>
36
+ 'actionField': <%== event_data[:order].to_json %>,
37
+ 'products': <%== event_data[:order_contents].to_json %>
38
38
  }
39
39
  }
40
40
  });
@@ -1,38 +1,55 @@
1
1
  <%
2
2
  return if ENV['PINTEREST_TAG_ID'].blank?
3
3
 
4
- product_data = {}
5
- add_to_cart_data = {}
6
- order_data = {}
7
- em_data = {}
4
+ event_data = {}
8
5
 
9
6
  user_email = try_spree_current_user&.email || current_order&.email
10
7
  if user_email.present?
11
8
  em_data = { em: user_email }
12
9
  end
13
10
 
14
- if just_purchased
15
- order_data = {
16
- value: order.total,
17
- currency: order.currency,
18
- order_quantity: order.line_items.sum(&:quantity),
19
- line_items: order.line_items.map do |line_item|
20
- next unless line_item.variant
11
+ if order.present?
12
+ if just_purchased
13
+ event_data[:order] = {
14
+ value: order.total,
15
+ currency: order.currency,
16
+ order_quantity: order.line_items.sum(&:quantity),
17
+ line_items: order.line_items.map do |line_item|
18
+ next unless line_item.variant
21
19
 
22
- {
23
- product_id: line_item.variant.product.master.sku,
24
- product_name: line_item.variant.name,
25
- product_variant_id: line_item.variant.sku,
26
- product_variant: line_item.variant.options_text,
27
- product_quantity: line_item.quantity,
28
- product_price: line_item.price
29
- }
30
- end.compact
31
- }
20
+ {
21
+ product_id: line_item.variant.product.master.sku,
22
+ product_name: line_item.variant.name,
23
+ product_variant_id: line_item.variant.sku,
24
+ product_variant: line_item.variant.options_text,
25
+ product_quantity: line_item.quantity,
26
+ product_price: line_item.price
27
+ }
28
+ end.compact
29
+ }
30
+ end
31
+
32
+ if flash[:added_to_cart].present?
33
+ event_data[:added_to_cart] = {
34
+ value: order.total,
35
+ currency: order.currency,
36
+ order_id: order.number,
37
+ line_items: flash[:added_to_cart].map do |variant_sku, variant|
38
+ {
39
+ product_id: variant['id'],
40
+ product_name: variant['name'],
41
+ product_variant_id: variant_sku,
42
+ product_variant: variant['variant'],
43
+ product_price: variant['price'],
44
+ product_quantity: variant['quantity']
45
+ }
46
+ end
47
+ }
48
+ end
32
49
  end
33
50
 
34
51
  if @product
35
- product_data = {
52
+ event_data[:product] = {
36
53
  line_items: [
37
54
  {
38
55
  product_name: @product.name,
@@ -42,23 +59,7 @@ if @product
42
59
  }
43
60
  end
44
61
 
45
- if flash[:added_to_cart].present?
46
- add_to_cart_data = {
47
- value: order.total,
48
- currency: order.currency,
49
- order_id: order.number,
50
- line_items: flash[:added_to_cart].map do |variant_sku, variant|
51
- {
52
- product_id: variant['id'],
53
- product_name: variant['name'],
54
- product_variant_id: variant_sku,
55
- product_variant: variant['variant'],
56
- product_price: variant['price'],
57
- product_quantity: variant['quantity']
58
- }
59
- end
60
- }
61
- end
62
+
62
63
  %>
63
64
  <script type="text/javascript" data-tag="pinterest">
64
65
  !function(e){if(!window.pintrk){window.pintrk=function(){window.pintrk.queue.push(Array.prototype.slice.call(arguments))};var n=window.pintrk;n.queue=[],n.version="3.0";var t=document.createElement("script");t.async=!0,t.src=e;var r=document.getElementsByTagName("script")[0];r.parentNode.insertBefore(t,r)}}("https://s.pinimg.com/ct/core.js");
@@ -66,16 +67,16 @@ end
66
67
  pintrk('load', '<%= ENV['PINTEREST_TAG_ID'] %>' <%== em_data.present? ? ", #{em_data.to_json}" : '' %>);
67
68
  pintrk('page');
68
69
 
69
- pintrk('track', 'pagevisit'<%== product_data.present? ? ", #{product_data.to_json}" : '' %>);
70
+ pintrk('track', 'pagevisit'<%== event_data[:product].present? ? ", #{event_data[:product].to_json}" : '' %>);
70
71
  window.solidusSeoDataLayer('pinterest', 'pagevisit');
71
72
 
72
- <% if add_to_cart_data.present? %>
73
- pintrk('track', 'addtocart', <%== add_to_cart_data.to_json %>);
73
+ <% if event_data[:added_to_cart].present? %>
74
+ pintrk('track', 'addtocart', <%== event_data[:added_to_cart].to_json %>);
74
75
  window.solidusSeoDataLayer('pinterest', 'addtocart');
75
76
  <% end %>
76
77
 
77
- <% if order_data.present? %>
78
- pintrk('track', 'checkout', <%== order_data.to_json %>);
78
+ <% if event_data[:order].present? %>
79
+ pintrk('track', 'checkout', <%== event_data[:order].to_json %>);
79
80
  window.solidusSeoDataLayer('pinterest', 'purchase');
80
81
  <% end %>
81
82
  </script>
@@ -36,6 +36,7 @@ module SolidusSeo
36
36
  copy_file 'insert_analytics_in_layout.html.erb.deface', 'app/overrides/spree/layouts/spree_application/insert_analytics_in_layout.html.erb.deface'
37
37
  copy_file 'replace_taxon_breadcrumbs_helper.html.erb.deface', 'app/overrides/spree/layouts/spree_application/replace_taxon_breadcrumbs_helper.html.erb.deface'
38
38
  copy_file 'insert_noscript_tags.html.erb.deface', 'app/overrides/spree/layouts/spree_application/insert_noscript_tags.html.erb.deface'
39
+ copy_file 'replace_flash_messages_helper.html.erb.deface', 'app/overrides/spree/layouts/spree_application/replace_flash_messages_helper.html.erb.deface'
39
40
  end
40
41
  end
41
42
  end
@@ -0,0 +1,5 @@
1
+ <!--
2
+ replace %{erb[loud]:contains("flash_messages")}
3
+ original "<%= flash_messages %>"
4
+ -->
5
+ <%= flash_messages(ignore_types: 'added_to_cart') %>
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SolidusSeo
4
- VERSION = '1.0.11'
4
+ VERSION = '1.1.1'
5
5
  end
data/spec/examples.txt CHANGED
@@ -1,33 +1,40 @@
1
- example_id | status | run_time |
2
- ------------------------------------------------ | ------ | --------------- |
3
- ./spec/features/add_to_cart_spec.rb[1:1:1] | passed | 2.14 seconds |
4
- ./spec/features/checkout_complete_spec.rb[1:1:1] | passed | 0.59035 seconds |
5
- ./spec/features/checkout_complete_spec.rb[1:2:1] | passed | 0.70409 seconds |
6
- ./spec/features/checkout_complete_spec.rb[1:3:1] | passed | 0.77986 seconds |
7
- ./spec/features/checkout_complete_spec.rb[1:4:1] | passed | 0.53269 seconds |
8
- ./spec/features/homepage_spec.rb[1:1:1] | passed | 0.27083 seconds |
9
- ./spec/features/homepage_spec.rb[1:1:2] | passed | 0.2846 seconds |
10
- ./spec/features/homepage_spec.rb[1:2:1] | passed | 0.26788 seconds |
11
- ./spec/features/homepage_spec.rb[1:2:2] | passed | 0.26357 seconds |
12
- ./spec/features/homepage_spec.rb[1:3:1] | passed | 0.2807 seconds |
13
- ./spec/features/homepage_spec.rb[1:3:2] | passed | 0.28623 seconds |
14
- ./spec/features/homepage_spec.rb[1:4:1:1] | passed | 0.55629 seconds |
15
- ./spec/features/product_page_spec.rb[1:1:1] | passed | 0.44472 seconds |
16
- ./spec/features/product_page_spec.rb[1:1:2] | passed | 0.37428 seconds |
17
- ./spec/features/product_page_spec.rb[1:1:3] | passed | 0.48305 seconds |
18
- ./spec/features/product_page_spec.rb[1:2:1] | passed | 0.37207 seconds |
19
- ./spec/features/product_page_spec.rb[1:2:2:1] | passed | 0.33481 seconds |
20
- ./spec/features/product_page_spec.rb[1:2:3:1] | passed | 0.35463 seconds |
21
- ./spec/features/product_page_spec.rb[1:3:1] | passed | 0.40858 seconds |
22
- ./spec/features/product_page_spec.rb[1:3:2] | passed | 0.39049 seconds |
23
- ./spec/features/product_page_spec.rb[1:3:3] | passed | 0.43994 seconds |
24
- ./spec/features/product_page_spec.rb[1:4:1:1] | passed | 4.3 seconds |
25
- ./spec/features/taxon_page_spec.rb[1:1:1] | passed | 0.40068 seconds |
26
- ./spec/features/taxon_page_spec.rb[1:1:2] | passed | 0.39674 seconds |
27
- ./spec/features/taxon_page_spec.rb[1:1:3] | passed | 0.36863 seconds |
28
- ./spec/features/taxon_page_spec.rb[1:2:1] | passed | 0.46435 seconds |
29
- ./spec/features/taxon_page_spec.rb[1:2:2:1] | passed | 0.38776 seconds |
30
- ./spec/features/taxon_page_spec.rb[1:2:3:1] | passed | 0.36313 seconds |
31
- ./spec/features/taxon_page_spec.rb[1:3:1] | passed | 0.39374 seconds |
32
- ./spec/features/taxon_page_spec.rb[1:3:2] | passed | 0.36606 seconds |
33
- ./spec/features/taxon_page_spec.rb[1:4:1] | passed | 0.585 seconds |
1
+ example_id | status | run_time |
2
+ ------------------------------------------------- | ------- | --------------- |
3
+ ./spec/features/add_to_cart_spec.rb[1:1:1] | passed | 0.70714 seconds |
4
+ ./spec/features/add_to_cart_spec.rb[1:2:1] | passed | 0.91242 seconds |
5
+ ./spec/features/add_to_cart_spec.rb[1:2:2] | passed | 0.81584 seconds |
6
+ ./spec/features/checkout_complete_spec.rb[1:1:1] | passed | 0.79057 seconds |
7
+ ./spec/features/checkout_complete_spec.rb[1:2:1] | passed | 0.60349 seconds |
8
+ ./spec/features/checkout_complete_spec.rb[1:3:1] | passed | 0.67453 seconds |
9
+ ./spec/features/checkout_complete_spec.rb[1:4:1] | passed | 1.34 seconds |
10
+ ./spec/features/checkout_initiated_spec.rb[1:1:1] | pending | 4.43 seconds |
11
+ ./spec/features/checkout_initiated_spec.rb[1:2:1] | pending | 0.14919 seconds |
12
+ ./spec/features/checkout_initiated_spec.rb[1:3:1] | passed | 4.36 seconds |
13
+ ./spec/features/checkout_initiated_spec.rb[1:4:1] | pending | 0.1462 seconds |
14
+ ./spec/features/homepage_spec.rb[1:1:1] | passed | 0.29976 seconds |
15
+ ./spec/features/homepage_spec.rb[1:1:2] | passed | 0.27 seconds |
16
+ ./spec/features/homepage_spec.rb[1:2:1] | passed | 0.27712 seconds |
17
+ ./spec/features/homepage_spec.rb[1:2:2] | passed | 0.2885 seconds |
18
+ ./spec/features/homepage_spec.rb[1:3:1] | passed | 0.2833 seconds |
19
+ ./spec/features/homepage_spec.rb[1:3:2] | passed | 0.34543 seconds |
20
+ ./spec/features/homepage_spec.rb[1:4:1:1] | passed | 0.34652 seconds |
21
+ ./spec/features/product_page_spec.rb[1:1:1] | passed | 0.49201 seconds |
22
+ ./spec/features/product_page_spec.rb[1:1:2] | passed | 0.33732 seconds |
23
+ ./spec/features/product_page_spec.rb[1:1:3] | passed | 0.44211 seconds |
24
+ ./spec/features/product_page_spec.rb[1:2:1] | passed | 0.33363 seconds |
25
+ ./spec/features/product_page_spec.rb[1:2:2:1] | passed | 0.37959 seconds |
26
+ ./spec/features/product_page_spec.rb[1:2:3:1] | passed | 0.35276 seconds |
27
+ ./spec/features/product_page_spec.rb[1:3:1] | passed | 0.38382 seconds |
28
+ ./spec/features/product_page_spec.rb[1:3:2] | passed | 0.44302 seconds |
29
+ ./spec/features/product_page_spec.rb[1:3:3] | passed | 0.3563 seconds |
30
+ ./spec/features/product_page_spec.rb[1:4:1:1] | passed | 0.43342 seconds |
31
+ ./spec/features/product_page_spec.rb[1:4:2:1] | passed | 0.51922 seconds |
32
+ ./spec/features/taxon_page_spec.rb[1:1:1] | passed | 0.37215 seconds |
33
+ ./spec/features/taxon_page_spec.rb[1:1:2] | passed | 0.3999 seconds |
34
+ ./spec/features/taxon_page_spec.rb[1:1:3] | passed | 0.41779 seconds |
35
+ ./spec/features/taxon_page_spec.rb[1:2:1] | passed | 0.40682 seconds |
36
+ ./spec/features/taxon_page_spec.rb[1:2:2:1] | passed | 0.34453 seconds |
37
+ ./spec/features/taxon_page_spec.rb[1:2:3:1] | passed | 0.39064 seconds |
38
+ ./spec/features/taxon_page_spec.rb[1:3:1] | passed | 0.33643 seconds |
39
+ ./spec/features/taxon_page_spec.rb[1:3:2] | passed | 0.43755 seconds |
40
+ ./spec/features/taxon_page_spec.rb[1:4:1] | passed | 0.63277 seconds |
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  describe 'Add to cart', type: :system do
4
- let!(:store) { Spree::Store.default }
4
+ let!(:store) { create(:store) }
5
5
  let!(:order) { create :completed_order_with_totals }
6
6
  let!(:line_item) { order.line_items.first }
7
7
 
@@ -15,6 +15,16 @@ describe 'Add to cart', type: :system do
15
15
  find('#add-to-cart-button').click
16
16
  end
17
17
 
18
+ context 'when FACEBOOK_PIXEL_ID environment variable is present' do
19
+ let(:env_variable) { 'FACEBOOK_PIXEL_ID' }
20
+
21
+ it 'tracks "add to cart" event with product data' do
22
+ expect(page).to track_analytics_event :facebook, 'addtocart', [
23
+ 'fbq', 'track', 'AddToCart', line_item.sku
24
+ ]
25
+ end
26
+ end
27
+
18
28
  context 'when PINTEREST_TAG_ID environment variable is present' do
19
29
  let(:env_variable) { 'PINTEREST_TAG_ID' }
20
30
 
@@ -24,6 +34,10 @@ describe 'Add to cart', type: :system do
24
34
  line_item.name, line_item.variant.sku, line_item.variant.price
25
35
  ]
26
36
  end
37
+
38
+ it 'skips printing a flash message to the user with added_to_cart raw data' do
39
+ expect(page).to_not have_css '.flash.added_to_cart'
40
+ end
27
41
  end
28
42
  end
29
43
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  describe 'Checkout complete', type: :system do
4
- let!(:store) { Spree::Store.default }
4
+ let!(:store) { create(:store) }
5
5
  let!(:taxon) { create :taxon, name: 'MyTaxon' }
6
6
  let!(:order) { create :completed_order_with_totals }
7
7
  let!(:line_item) { order.line_items.first }
@@ -19,7 +19,7 @@ describe 'Checkout complete', type: :system do
19
19
  context 'when GOOGLE_TAG_MANAGER_ID environment variable is present' do
20
20
  let(:env_variable) { 'GOOGLE_TAG_MANAGER_ID' }
21
21
 
22
- it 'includes and executes a purchase event script' do
22
+ it 'tracks "purchase" event with product data' do
23
23
  subject
24
24
  expect(page).to track_analytics_event 'google-tag-manager', 'purchase', ['ecommerce', 'purchase', order.number, order.total, line_item.sku]
25
25
  end
@@ -28,7 +28,7 @@ describe 'Checkout complete', type: :system do
28
28
  context 'when GOOGLE_ANALYTICS_ID environment variable is present' do
29
29
  let(:env_variable) { 'GOOGLE_ANALYTICS_ID' }
30
30
 
31
- it 'includes and executes a purchase event script' do
31
+ it 'tracks "purchase" event with product data' do
32
32
  subject
33
33
  expect(page).to track_analytics_event 'google-analytics', 'purchase', [
34
34
  'event', 'purchase', 'transaction_id', order.number,
@@ -41,7 +41,7 @@ describe 'Checkout complete', type: :system do
41
41
  context 'when FACEBOOK_PIXEL_ID environment variable is present' do
42
42
  let(:env_variable) { 'FACEBOOK_PIXEL_ID' }
43
43
 
44
- it 'includes and executes a purchase event script' do
44
+ it 'tracks "Purchase" event with product data' do
45
45
  subject
46
46
  expect(page).to track_analytics_event :facebook, 'purchase', ['track', 'Purchase', order.total, line_item.sku, line_item.quantity, order.number]
47
47
  end
@@ -50,7 +50,7 @@ describe 'Checkout complete', type: :system do
50
50
  context 'when PINTEREST_TAG_ID environment variable is present' do
51
51
  let(:env_variable) { 'PINTEREST_TAG_ID' }
52
52
 
53
- it 'includes and executes a purchase event script' do
53
+ it 'tracks "checkout" event with product data' do
54
54
  subject
55
55
  expect(page).to track_analytics_event :pinterest, 'purchase', ['track', 'checkout', order.total, line_item.sku, line_item.name, line_item.price]
56
56
  end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe 'Checkout initated', type: :system do
4
+ let!(:store) { create(:store) }
5
+ let!(:taxon) { create :taxon, name: 'MyTaxon' }
6
+ let!(:product) { create(:base_product, taxons: [taxon]) }
7
+ let(:order) { Spree::Order.last }
8
+
9
+ stub_authorization!
10
+
11
+ before do
12
+ stub_const 'ENV', ENV.to_h.merge(env_variable => 'XXX-YYYYY')
13
+ end
14
+
15
+ subject do
16
+ visit spree.product_path(product)
17
+ find('#add-to-cart-button').click
18
+ find('#checkout-link').click
19
+ end
20
+
21
+ context 'when GOOGLE_TAG_MANAGER_ID environment variable is present' do
22
+ let(:env_variable) { 'GOOGLE_TAG_MANAGER_ID' }
23
+
24
+ it 'tracks "InitiateCheckout" event with product data' do
25
+ skip
26
+ end
27
+ end
28
+
29
+ context 'when GOOGLE_ANALYTICS_ID environment variable is present' do
30
+ let(:env_variable) { 'GOOGLE_ANALYTICS_ID' }
31
+
32
+ it 'tracks "InitiateCheckout" event with product data' do
33
+ skip
34
+ end
35
+ end
36
+
37
+ context 'when FACEBOOK_PIXEL_ID environment variable is present' do
38
+ let(:env_variable) { 'FACEBOOK_PIXEL_ID' }
39
+
40
+ it 'tracks "InitiateCheckout" event with product data' do
41
+ subject
42
+ expect(page).to track_analytics_event :facebook, 'initiatecheckout', ['track', 'InitiateCheckout', order.total, order.currency, order.line_items.first.sku]
43
+ end
44
+ end
45
+
46
+ context 'when PINTEREST_TAG_ID environment variable is present' do
47
+ let(:env_variable) { 'PINTEREST_TAG_ID' }
48
+
49
+ it 'tracks "checkout" event with product data' do
50
+ skip
51
+ end
52
+ end
53
+ end
@@ -1,5 +1,5 @@
1
1
  describe "Homepage", type: :system do
2
- let!(:store) { Spree::Store.default }
2
+ let!(:store) { create(:store) }
3
3
  let(:seo_name) { 'My store SEO name' }
4
4
  let(:seo_image) { 'https://example.com/path/store.jpg' }
5
5
  let(:seo_description) { 'My store SEO description' }
@@ -1,5 +1,5 @@
1
1
  describe "Product page", type: :system do
2
- let!(:store) { Spree::Store.default }
2
+ let!(:store) { create(:store) }
3
3
  let(:store_seo_name) { 'My store SEO name' }
4
4
 
5
5
  let!(:taxon) { create(:taxon, name: 'MyTaxon') }
@@ -97,6 +97,17 @@ describe "Product page", type: :system do
97
97
  stub_const 'ENV', ENV.to_h.merge(env_variable => 'XXX-YYYYY')
98
98
  end
99
99
 
100
+ context 'when FACEBOOK_PIXEL_ID environment variable is present' do
101
+ let(:env_variable) { 'FACEBOOK_PIXEL_ID' }
102
+
103
+ it 'tracks "ViewContent" event with product data' do
104
+ subject
105
+ expect(page).to track_analytics_event :facebook, 'viewcontent', [
106
+ 'fbq', 'track', 'ViewContent', product.name, product.master.sku
107
+ ]
108
+ end
109
+ end
110
+
100
111
  context 'when PINTEREST_TAG_ID environment variable is present' do
101
112
  let(:env_variable) { 'PINTEREST_TAG_ID' }
102
113
 
@@ -1,5 +1,5 @@
1
1
  describe "Taxon page", type: :system do
2
- let!(:store) { Spree::Store.default }
2
+ let!(:store) { create(:store) }
3
3
  let(:seo_name) { 'My store SEO name' }
4
4
  let(:seo_image) { 'https://example.com/path/store.jpg' }
5
5
  let(:seo_description) { 'My store SEO description' }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solidus_seo
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.11
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karma Creative
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-20 00:00:00.000000000 Z
11
+ date: 2021-07-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: solidus_core
@@ -337,6 +337,7 @@ files:
337
337
  - app/assets/javascripts/spree/frontend/solidus_seo.js
338
338
  - app/assets/stylesheets/spree/backend/solidus_seo.css
339
339
  - app/assets/stylesheets/spree/frontend/solidus_seo.css
340
+ - app/decorators/controllers/spree/checkout_controller_decorator.rb
340
341
  - app/decorators/controllers/spree/orders_controller_decorator.rb
341
342
  - app/decorators/controllers/spree/store_controller_decorator.rb
342
343
  - app/decorators/helpers/spree/core/controller_helpers/common_decorator.rb
@@ -360,6 +361,7 @@ files:
360
361
  - lib/generators/solidus_seo/install/templates/insert_product_list_helper.html.erb.deface
361
362
  - lib/generators/solidus_seo/install/templates/paperclip_optimizer.rb
362
363
  - lib/generators/solidus_seo/install/templates/remove_original_title_tag.deface
364
+ - lib/generators/solidus_seo/install/templates/replace_flash_messages_helper.html.erb.deface
363
365
  - lib/generators/solidus_seo/install/templates/replace_taxon_breadcrumbs_helper.html.erb.deface
364
366
  - lib/solidus_seo.rb
365
367
  - lib/solidus_seo/engine.rb
@@ -382,6 +384,7 @@ files:
382
384
  - spec/examples.txt
383
385
  - spec/features/add_to_cart_spec.rb
384
386
  - spec/features/checkout_complete_spec.rb
387
+ - spec/features/checkout_initiated_spec.rb
385
388
  - spec/features/homepage_spec.rb
386
389
  - spec/features/product_page_spec.rb
387
390
  - spec/features/taxon_page_spec.rb
@@ -392,7 +395,7 @@ homepage: https://github.com/karmakatahdin/solidus_seo
392
395
  licenses:
393
396
  - BSD-3-Clause
394
397
  metadata: {}
395
- post_install_message:
398
+ post_install_message:
396
399
  rdoc_options: []
397
400
  require_paths:
398
401
  - lib
@@ -407,15 +410,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
407
410
  - !ruby/object:Gem::Version
408
411
  version: '0'
409
412
  requirements: []
410
- rubyforge_project:
413
+ rubyforge_project:
411
414
  rubygems_version: 2.7.6.2
412
- signing_key:
415
+ signing_key:
413
416
  specification_version: 4
414
417
  summary: Enhanced SEO in Solidus
415
418
  test_files:
416
419
  - spec/spec_helper.rb
417
420
  - spec/examples.txt
418
421
  - spec/features/checkout_complete_spec.rb
422
+ - spec/features/checkout_initiated_spec.rb
419
423
  - spec/features/homepage_spec.rb
420
424
  - spec/features/taxon_page_spec.rb
421
425
  - spec/features/add_to_cart_spec.rb