spree_analytics_trackers 1.0.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.bundle/config +2 -0
- data/.gitignore +21 -0
- data/.rspec +3 -0
- data/.rubocop.yml +2 -0
- data/.travis.yml +44 -0
- data/Appraisals +11 -0
- data/Gemfile +7 -0
- data/LICENSE +26 -0
- data/README.md +77 -0
- data/Rakefile +21 -0
- data/app/assets/javascripts/spree/frontend/add_to_cart_analytics.js +50 -0
- data/app/assets/javascripts/spree/frontend/remove_from_cart_analytics.js +34 -0
- data/app/controllers/spree/admin/trackers_controller.rb +14 -0
- data/app/controllers/spree_analytics_trackers/store_controller_decorator.rb +14 -0
- data/app/helpers/spree/trackers_helper.rb +86 -0
- data/app/models/spree/tracker.rb +31 -0
- data/app/models/spree_analytics_trackers/user_decorator.rb +9 -0
- data/app/overrides/add_analytics_to_admin_sidebar.rb +8 -0
- data/app/overrides/add_cart_viewed_to_orders_edit.rb +10 -0
- data/app/overrides/add_checkout_step_viewed_to_checkout_edit.rb +18 -0
- data/app/overrides/add_google_analytics_page_view_to_spree_application.rb +10 -0
- data/app/overrides/add_google_analytics_to_spree_application.rb +9 -0
- data/app/overrides/add_google_purchase_to_orders_show.rb +9 -0
- data/app/overrides/add_order_complete_to_orders_show.rb +10 -0
- data/app/overrides/add_product_list_filtered_to_taxons_show.rb +10 -0
- data/app/overrides/add_product_list_viewed_to_products_list.rb +10 -0
- data/app/overrides/add_product_viewed_to_products_show.rb +10 -0
- data/app/overrides/add_products_searched_to_products_list.rb +10 -0
- data/app/overrides/add_segment_initializer_to_layout.rb +10 -0
- data/app/overrides/add_segment_page_viewed_to_layout.rb +10 -0
- data/app/presenters/spree_analytics_trackers/base_presenter.rb +14 -0
- data/app/presenters/spree_analytics_trackers/segment/order_presenter.rb +32 -0
- data/app/presenters/spree_analytics_trackers/segment/product_presenter.rb +40 -0
- data/app/views/spree/admin/shared/_analytics_sidebar_menu.html.erb +3 -0
- data/app/views/spree/admin/trackers/_form.html.erb +42 -0
- data/app/views/spree/admin/trackers/edit.html.erb +13 -0
- data/app/views/spree/admin/trackers/index.html.erb +42 -0
- data/app/views/spree/admin/trackers/new.html.erb +13 -0
- data/app/views/spree/shared/trackers/google_analytics/_checkout_step_viewed.js.erb +19 -0
- data/app/views/spree/shared/trackers/google_analytics/_initializer.js.erb +25 -0
- data/app/views/spree/shared/trackers/google_analytics/_page_viewed.js.erb +13 -0
- data/app/views/spree/shared/trackers/google_analytics/_purchase.js.erb +22 -0
- data/app/views/spree/shared/trackers/segment/_cart_viewed.js.erb +27 -0
- data/app/views/spree/shared/trackers/segment/_checkout_step_viewed.js.erb +21 -0
- data/app/views/spree/shared/trackers/segment/_initializer.js.erb +7 -0
- data/app/views/spree/shared/trackers/segment/_order_complete.js.erb +11 -0
- data/app/views/spree/shared/trackers/segment/_page_viewed.js.erb +7 -0
- data/app/views/spree/shared/trackers/segment/_product_list_filtered.js.erb +23 -0
- data/app/views/spree/shared/trackers/segment/_product_list_viewed.js.erb +19 -0
- data/app/views/spree/shared/trackers/segment/_product_viewed.js.erb +12 -0
- data/app/views/spree/shared/trackers/segment/_products_searched.js.erb +10 -0
- data/bin/rails +7 -0
- data/config/locales/en.yml +18 -0
- data/config/locales/zh-TW.yml +19 -0
- data/config/routes.rb +5 -0
- data/db/migrate/20171013160337_create_spree_trackers.rb +20 -0
- data/db/migrate/20200721163729_add_store_id_to_spree_trackers.rb +14 -0
- data/gemfiles/.bundle/config +2 -0
- data/gemfiles/spree_4_1.gemfile +9 -0
- data/gemfiles/spree_master.gemfile +9 -0
- data/lib/generators/spree_analytics_trackers/install/install_generator.rb +28 -0
- data/lib/spree_analytics_trackers.rb +5 -0
- data/lib/spree_analytics_trackers/engine.rb +20 -0
- data/lib/spree_analytics_trackers/factories.rb +10 -0
- data/lib/spree_analytics_trackers/version.rb +17 -0
- data/spec/features/admin/configuration/analytics_tracker_spec.rb +61 -0
- data/spec/features/products_spec.rb +315 -0
- data/spec/fixtures/thinking-cat.jpg +0 -0
- data/spec/models/spree/tracker_spec.rb +32 -0
- data/spec/presenters/spree_analytics_trackers/segment/order_presenter_spec.rb +34 -0
- data/spec/spec_helper.rb +18 -0
- data/spec/support/custom_products.rb +26 -0
- data/spree_analytics_trackers.gemspec +31 -0
- metadata +98 -200
@@ -0,0 +1,13 @@
|
|
1
|
+
<% if ga_enabled? %>
|
2
|
+
<script>
|
3
|
+
if (typeof gtag !== 'undefined') {
|
4
|
+
<% if user_id = try_spree_current_user.try(:id) %>
|
5
|
+
gtag('config', '<%= ga_tracker.analytics_id %>', {
|
6
|
+
'user_id': '<%= user_id %>'
|
7
|
+
});
|
8
|
+
<% else %>
|
9
|
+
gtag('config', '<%= ga_tracker.analytics_id %>');
|
10
|
+
<% end %>
|
11
|
+
}
|
12
|
+
</script>
|
13
|
+
<% end %>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<% if ga_enabled? && @order.present? && order_just_completed?(@order) %>
|
2
|
+
<script>
|
3
|
+
window.addEventListener('turbolinks:load', function() {
|
4
|
+
if (typeof gtag !== 'undefined') {
|
5
|
+
clearGAplugins();
|
6
|
+
gtag('event', 'purchase', {
|
7
|
+
transaction_id: '<%= @order.number %>',
|
8
|
+
value: <%= @order.total&.to_f %>,
|
9
|
+
currency: '<%= @order.currency %>',
|
10
|
+
tax: <%= @order.tax_total&.to_f %>,
|
11
|
+
shipping: <%= @order.shipment_total&.to_f %>,
|
12
|
+
coupon: '<%= @order.promo_code %>',
|
13
|
+
items: [
|
14
|
+
<% @order.line_items.each do |line_item| %>
|
15
|
+
<%= ga_line_item(line_item) %>,
|
16
|
+
<% end %>
|
17
|
+
]
|
18
|
+
});
|
19
|
+
}
|
20
|
+
});
|
21
|
+
</script>
|
22
|
+
<% end %>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<% if segment_enabled? && @order.present? && !@order.complete? %>
|
2
|
+
<script>
|
3
|
+
window.addEventListener('turbolinks:load', function() {
|
4
|
+
if (typeof analytics !== 'undefined') {
|
5
|
+
var segmentCartJson = {
|
6
|
+
cart_id: '<%= @order.number %>',
|
7
|
+
products: [
|
8
|
+
<% @order.line_items.each_with_index do |line_item, index| %>
|
9
|
+
<%=
|
10
|
+
product_for_segment(
|
11
|
+
line_item.product,
|
12
|
+
position: index+1,
|
13
|
+
quantity: line_item.quantity,
|
14
|
+
image: default_image_for_product_or_variant(line_item.variant)
|
15
|
+
)
|
16
|
+
%>,
|
17
|
+
<% end %>
|
18
|
+
]
|
19
|
+
}
|
20
|
+
|
21
|
+
analytics.track('Cart Viewed', segmentCartJson);
|
22
|
+
analytics.page('Cart Viewed', segmentCartJson);
|
23
|
+
}
|
24
|
+
});
|
25
|
+
</script>
|
26
|
+
<% end %>
|
27
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<% if segment_enabled? && @order.present? && !@order.completed? %>
|
2
|
+
<script>
|
3
|
+
window.addEventListener('turbolinks:load', function() {
|
4
|
+
if (typeof analytics !== 'undefined') {
|
5
|
+
analytics.track('Checkout Step Viewed',
|
6
|
+
{
|
7
|
+
checkout_id: '<%= @order.number %>',
|
8
|
+
step: '<%= (@order.checkout_steps.index(@order.state) + 1) %>'
|
9
|
+
}
|
10
|
+
);
|
11
|
+
|
12
|
+
analytics.page('Checkout Step Viewed',
|
13
|
+
{
|
14
|
+
checkout_id: '<%= @order.number %>',
|
15
|
+
step: '<%= (@order.checkout_steps.index(@order.state) + 1) %>'
|
16
|
+
}
|
17
|
+
);
|
18
|
+
}
|
19
|
+
});
|
20
|
+
</script>
|
21
|
+
<% end %>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<% if segment_enabled? %>
|
2
|
+
<script>
|
3
|
+
!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on"];analytics.factory=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);analytics.push(e);return analytics}};for(var t=0;t<analytics.methods.length;t++){var e=analytics.methods[t];analytics[e]=analytics.factory(e)}analytics.load=function(t,e){var n=document.createElement("script");n.type="text/javascript";n.async=!0;n.src="https://cdn.segment.com/analytics.js/v1/"+t+"/analytics.min.js";var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(n,a);analytics._loadOptions=e};analytics.SNIPPET_VERSION="4.1.0";
|
4
|
+
analytics.load('<%=segment_tracker.analytics_id%>'.replace(/^\s+|\s+$/g, ''));
|
5
|
+
}}();
|
6
|
+
</script>
|
7
|
+
<% end %>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<% if segment_enabled? && @order.present? && order_just_completed?(@order) %>
|
2
|
+
<% order_json = SpreeAnalyticsTrackers::Segment::OrderPresenter.new(@order).to_json %>
|
3
|
+
<script>
|
4
|
+
window.addEventListener('turbolinks:load', function() {
|
5
|
+
if (typeof analytics !== 'undefined') {
|
6
|
+
analytics.page('Order Completed', <%= order_json.html_safe %>);
|
7
|
+
analytics.track('Order Completed', <%= order_json.html_safe %>);
|
8
|
+
}
|
9
|
+
});
|
10
|
+
</script>
|
11
|
+
<% end %>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<% if segment_enabled? && any_filtering_params? %>
|
2
|
+
<script>
|
3
|
+
window.addEventListener('turbolinks:load', function() {
|
4
|
+
if (typeof analytics !== 'undefined') {
|
5
|
+
var segmentProductListFilteredJson = {
|
6
|
+
filters: [
|
7
|
+
<% filtering_params_with_values.each do |type, value| %>
|
8
|
+
<%= { type: type, value: value } .to_json.html_safe %>,
|
9
|
+
<% end %>
|
10
|
+
],
|
11
|
+
products: [
|
12
|
+
<% @products.each_with_index do |product, index| %>
|
13
|
+
<%= product_for_segment(product, position: index + 1) %>,
|
14
|
+
<% end %>
|
15
|
+
]
|
16
|
+
}
|
17
|
+
|
18
|
+
analytics.track('Product List Filtered', segmentProductListFilteredJson);
|
19
|
+
analytics.page('Product List Filtered', segmentProductListFilteredJson);
|
20
|
+
}
|
21
|
+
});
|
22
|
+
</script>
|
23
|
+
<% end %>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<% if segment_enabled? && defined?(products) && products.present? %>
|
2
|
+
<script>
|
3
|
+
window.addEventListener('turbolinks:load', function() {
|
4
|
+
if (typeof analytics !== 'undefined') {
|
5
|
+
var segmentProductListViewedJson = {
|
6
|
+
category: '<%= @taxon&.name %>',
|
7
|
+
products: [
|
8
|
+
<% products.each_with_index do |product, index| %>
|
9
|
+
<%= product_for_segment(product, position: index+1, image: default_image_for_product_or_variant(product)) %>,
|
10
|
+
<% end %>
|
11
|
+
]
|
12
|
+
}
|
13
|
+
|
14
|
+
analytics.track('Product List Viewed', segmentProductListViewedJson);
|
15
|
+
analytics.page('Product List Viewed', segmentProductListViewedJson);
|
16
|
+
}
|
17
|
+
});
|
18
|
+
</script>
|
19
|
+
<% end %>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<% if segment_enabled? && @product.present? %>
|
2
|
+
<script>
|
3
|
+
window.addEventListener('turbolinks:load', function() {
|
4
|
+
if (typeof analytics !== 'undefined') {
|
5
|
+
var segmentProductViewed = <%= product_for_segment(@product, image: default_image_for_product_or_variant(@product)) %>;
|
6
|
+
|
7
|
+
analytics.page('Product Viewed', segmentProductViewed);
|
8
|
+
analytics.track('Product Viewed', segmentProductViewed);
|
9
|
+
}
|
10
|
+
});
|
11
|
+
</script>
|
12
|
+
<% end %>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<% if segment_enabled? && params.key?(:keywords) && params[:keywords].present? %>
|
2
|
+
<script>
|
3
|
+
window.addEventListener('turbolinks:load', function() {
|
4
|
+
if (typeof analytics !== 'undefined') {
|
5
|
+
analytics.track('Products Searched', { query: '<%= params[:keywords] %>' });
|
6
|
+
analytics.page('Products Searched', { query: '<%= params[:keywords] %>' });
|
7
|
+
}
|
8
|
+
});
|
9
|
+
</script>
|
10
|
+
<% end %>
|
data/bin/rails
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
2
|
+
|
3
|
+
ENGINE_ROOT = File.expand_path('../..', __FILE__)
|
4
|
+
ENGINE_PATH = File.expand_path('../../lib/spree_analytics_trackers/engine', __FILE__)
|
5
|
+
|
6
|
+
require 'rails/all'
|
7
|
+
require 'rails/engine/commands'
|
@@ -0,0 +1,18 @@
|
|
1
|
+
en:
|
2
|
+
activerecord:
|
3
|
+
attributes:
|
4
|
+
spree/tracker:
|
5
|
+
one: Tracker
|
6
|
+
other: Trackers
|
7
|
+
spree:
|
8
|
+
analytics_engine: Analytics Engine
|
9
|
+
analytics_trackers: Analytics Trackers
|
10
|
+
new_tracker: New Tracker
|
11
|
+
google_analytics: Google Analytics
|
12
|
+
google_analytics_id: Analytics ID
|
13
|
+
analytics_desc_header_1: Spree Analytics
|
14
|
+
analytics_desc_header_2: Live analytics integrated into your Spree dashboard
|
15
|
+
analytics_desc_list_1: Get live sales information as it happens
|
16
|
+
analytics_desc_list_2: Requires only a free Spree account to activate
|
17
|
+
analytics_desc_list_3: Absolutely no code to install
|
18
|
+
analytics_desc_list_4: It's completely free!
|
@@ -0,0 +1,19 @@
|
|
1
|
+
zh-TW:
|
2
|
+
activerecord:
|
3
|
+
attributes:
|
4
|
+
spree/tracker:
|
5
|
+
one: 追蹤器
|
6
|
+
other: 追蹤器
|
7
|
+
spree:
|
8
|
+
analytics_engine: 分析引擎
|
9
|
+
analytics_trackers: 分析追蹤器
|
10
|
+
new_tracker: 新增追蹤器
|
11
|
+
google_analytics: Google 分析
|
12
|
+
google_analytics_id: Google 追蹤器代碼
|
13
|
+
analytics_desc_header_1: Spree 分析
|
14
|
+
analytics_desc_header_2: 新增即時分析到 Spree 的後台
|
15
|
+
analytics_desc_list_1: 獲得即時銷售數據
|
16
|
+
analytics_desc_list_2: 免費安裝
|
17
|
+
analytics_desc_list_3: 不需要寫任何代碼安裝
|
18
|
+
analytics_desc_list_4: 完全免費!
|
19
|
+
|
data/config/routes.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
class CreateSpreeTrackers < SpreeExtension::Migration[4.2]
|
2
|
+
def change
|
3
|
+
if table_exists?(:spree_trackers)
|
4
|
+
add_index :spree_trackers, :active unless index_exists?(:spree_trackers, :active)
|
5
|
+
remove_column :spree_trackers, :environment if column_exists?(:spree_trackers, :environment)
|
6
|
+
unless column_exists?(:spree_trackers, :engine)
|
7
|
+
add_column :spree_trackers, :kind, :integer, default: 0, null: false, index: true unless column_exists?(:spree_trackers, :kind)
|
8
|
+
rename_column :spree_trackers, :kind, :engine if column_exists?(:spree_trackers, :kind)
|
9
|
+
end
|
10
|
+
else
|
11
|
+
create_table :spree_trackers do |t|
|
12
|
+
t.string 'analytics_id'
|
13
|
+
t.boolean 'active', default: true, index: true
|
14
|
+
t.datetime 'created_at', null: false
|
15
|
+
t.datetime 'updated_at', null: false
|
16
|
+
t.integer 'engine', default: 0, null: false, index: true
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class AddStoreIdToSpreeTrackers < ActiveRecord::Migration[6.0]
|
2
|
+
def change
|
3
|
+
add_column :spree_trackers, :store_id, :integer
|
4
|
+
add_index :spree_trackers, :store_id
|
5
|
+
|
6
|
+
Spree::Tracker.reset_column_information
|
7
|
+
|
8
|
+
default_store = Spree::Store.default
|
9
|
+
Spree::Tracker.all.each do |tracker|
|
10
|
+
tracker.store = default_store
|
11
|
+
tracker.save
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "spree", github: "spree/spree", branch: "master"
|
6
|
+
gem "spree_auth_devise", github: "spree/spree_auth_devise", branch: "master"
|
7
|
+
gem "rails-controller-testing"
|
8
|
+
|
9
|
+
gemspec path: "../"
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module SpreeAnalyticsTrackers
|
2
|
+
module Generators
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
4
|
+
class_option :auto_run_migrations, type: :boolean, default: false
|
5
|
+
|
6
|
+
def add_javascripts
|
7
|
+
javascripts_path = 'vendor/assets/javascripts/spree/frontend/all.js'
|
8
|
+
return unless File.file?(javascripts_path)
|
9
|
+
|
10
|
+
append_file 'vendor/assets/javascripts/spree/frontend/all.js', "//= require spree/frontend/add_to_cart_analytics\n"
|
11
|
+
append_file 'vendor/assets/javascripts/spree/frontend/all.js', "//= require spree/frontend/remove_from_cart_analytics\n"
|
12
|
+
end
|
13
|
+
|
14
|
+
def add_migrations
|
15
|
+
run 'bundle exec rake railties:install:migrations FROM=spree_analytics_trackers'
|
16
|
+
end
|
17
|
+
|
18
|
+
def run_migrations
|
19
|
+
run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask 'Would you like to run the migrations now? [Y/n]')
|
20
|
+
if run_migrations
|
21
|
+
run 'bundle exec rake db:migrate'
|
22
|
+
else
|
23
|
+
puts 'Skipping rake db:migrate, don\'t forget to run it!'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module SpreeAnalyticsTrackers
|
2
|
+
class Engine < Rails::Engine
|
3
|
+
require 'spree/core'
|
4
|
+
isolate_namespace Spree
|
5
|
+
engine_name 'spree_analytics_trackers'
|
6
|
+
|
7
|
+
# use rspec for tests
|
8
|
+
config.generators do |g|
|
9
|
+
g.test_framework :rspec
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.activate
|
13
|
+
Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')) do |c|
|
14
|
+
Rails.configuration.cache_classes ? require(c) : load(c)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
config.to_prepare &method(:activate).to_proc
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
unless FactoryBot.factories.registered?(:tracker)
|
2
|
+
FactoryBot.define do
|
3
|
+
factory :tracker, class: Spree::Tracker do
|
4
|
+
analytics_id { 'A100' }
|
5
|
+
active { true }
|
6
|
+
engine { :google_analytics }
|
7
|
+
store { Spree::Store.default || create(:store) }
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module SpreeAnalyticsTrackers
|
2
|
+
module_function
|
3
|
+
|
4
|
+
# Returns the version of the currently loaded SpreeAnalyticsTrackers as a
|
5
|
+
# <tt>Gem::Version</tt>.
|
6
|
+
def version
|
7
|
+
Gem::Version.new VERSION::STRING
|
8
|
+
end
|
9
|
+
|
10
|
+
module VERSION
|
11
|
+
MAJOR = 2
|
12
|
+
MINOR = 1
|
13
|
+
TINY = 0
|
14
|
+
|
15
|
+
STRING = [MAJOR, MINOR, TINY].compact.join('.')
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Analytics Tracker', type: :feature do
|
4
|
+
stub_authorization!
|
5
|
+
|
6
|
+
let!(:default_store) { Spree::Store.default }
|
7
|
+
let!(:another_store) { create(:store, name: 'Eurozone') }
|
8
|
+
|
9
|
+
context 'index' do
|
10
|
+
before(:each) do
|
11
|
+
create(:tracker, store: default_store)
|
12
|
+
create(:tracker, analytics_id: 'A200', store: another_store)
|
13
|
+
visit spree.admin_trackers_path
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should have the right content' do
|
17
|
+
expect(page).to have_content('Analytics Trackers')
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should have the right tabular values displayed' do
|
21
|
+
within_row(1) do
|
22
|
+
expect(column_text(1)).to eq('A100')
|
23
|
+
expect(column_text(2)).to eq('Google analytics')
|
24
|
+
expect(column_text(3)).to eq(default_store.name)
|
25
|
+
expect(column_text(4)).to eq('Yes')
|
26
|
+
end
|
27
|
+
|
28
|
+
within_row(2) do
|
29
|
+
expect(column_text(1)).to eq('A200')
|
30
|
+
expect(column_text(2)).to eq('Google analytics')
|
31
|
+
expect(column_text(3)).to eq('Eurozone')
|
32
|
+
expect(column_text(4)).to eq('Yes')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'create' do
|
38
|
+
before(:each) do
|
39
|
+
visit spree.admin_trackers_path
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should be able to create a new analytics tracker', js: true do
|
43
|
+
within('.content-header') do
|
44
|
+
click_link 'admin_new_tracker_link'
|
45
|
+
end
|
46
|
+
fill_in 'tracker_analytics_id', with: 'A100'
|
47
|
+
|
48
|
+
select2 default_store.name, from: 'Store'
|
49
|
+
|
50
|
+
click_button 'Create'
|
51
|
+
|
52
|
+
expect(page).to have_content('successfully created!')
|
53
|
+
within_row(1) do
|
54
|
+
expect(column_text(1)).to eq('A100')
|
55
|
+
expect(column_text(2)).to eq('Google analytics')
|
56
|
+
expect(column_text(3)).to eq(default_store.name)
|
57
|
+
expect(column_text(4)).to eq('Yes')
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|