workarea-segment_analytics 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.eslintrc +35 -0
- data/.gitignore +19 -0
- data/.rubocop.yml +8 -0
- data/CHANGELOG.md +47 -0
- data/Gemfile +16 -0
- data/README.md +91 -0
- data/Rakefile +60 -0
- data/app/assets/javascripts/workarea/storefront/segment_analytics/dependencies/analytics.js.erb +3 -0
- data/app/assets/javascripts/workarea/storefront/segment_analytics/modules/login_events.js +40 -0
- data/app/assets/javascripts/workarea/storefront/segment_analytics/modules/segment_analytics.js +47 -0
- data/app/assets/javascripts/workarea/storefront/segment_analytics/modules/segment_analytics_adapter.js +235 -0
- data/app/assets/stylesheets/segment_analytics/.keep +0 -0
- data/app/helpers/.keep +0 -0
- data/app/helpers/workarea/storefront/segment_analytics_analytics_helper.rb +40 -0
- data/app/views/.keep +0 -0
- data/app/views/workarea/storefront/users/_current_user_segment_analytics.json.jbuilder +6 -0
- data/bin/rails +20 -0
- data/config/initializers/appends.rb +18 -0
- data/config/initializers/workarea.rb +1 -0
- data/config/routes.rb +2 -0
- data/lib/tasks/segment_analytics_tasks.rake +4 -0
- data/lib/workarea/segment_analytics.rb +23 -0
- data/lib/workarea/segment_analytics/engine.rb +14 -0
- data/lib/workarea/segment_analytics/version.rb +5 -0
- data/script/admin_ci +9 -0
- data/script/ci +11 -0
- data/script/core_ci +9 -0
- data/script/plugins_ci +9 -0
- data/script/storefront_ci +9 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/config/manifest.js +4 -0
- data/test/dummy/app/assets/images/.keep +0 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/controllers/concerns/.keep +0 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/jobs/application_job.rb +2 -0
- data/test/dummy/app/mailers/application_mailer.rb +4 -0
- data/test/dummy/app/models/concerns/.keep +0 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
- data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +38 -0
- data/test/dummy/bin/update +29 -0
- data/test/dummy/bin/yarn +11 -0
- data/test/dummy/config.ru +5 -0
- data/test/dummy/config/application.rb +29 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/cable.yml +10 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +54 -0
- data/test/dummy/config/environments/production.rb +91 -0
- data/test/dummy/config/environments/test.rb +44 -0
- data/test/dummy/config/initializers/application_controller_renderer.rb +8 -0
- data/test/dummy/config/initializers/assets.rb +14 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/workarea.rb +5 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +33 -0
- data/test/dummy/config/puma.rb +56 -0
- data/test/dummy/config/routes.rb +5 -0
- data/test/dummy/config/secrets.yml +32 -0
- data/test/dummy/config/spring.rb +6 -0
- data/test/dummy/db/seeds.rb +2 -0
- data/test/dummy/lib/assets/.keep +0 -0
- data/test/dummy/log/.keep +0 -0
- data/test/dummy/package.json +5 -0
- data/test/javascripts/fixtures/payloads.js +232 -0
- data/test/javascripts/fixtures/stubs.js +56 -0
- data/test/javascripts/segment_analytics_spec.js +311 -0
- data/test/javascripts/spec_helper.js +12 -0
- data/test/teaspoon_env.rb +6 -0
- data/test/test_helper.rb +10 -0
- data/workarea-segment_analytics.gemspec +19 -0
- metadata +138 -0
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/*eslint no-unused-vars: 0 */
|
|
2
|
+
function productListPayload() {
|
|
3
|
+
return {
|
|
4
|
+
"name": "Electronics",
|
|
5
|
+
"page": 1,
|
|
6
|
+
"per_page": 20,
|
|
7
|
+
"impressions": [
|
|
8
|
+
{
|
|
9
|
+
"id": "4AF99AB7C8",
|
|
10
|
+
"name": "Heavy Duty Iron Bag",
|
|
11
|
+
"sku": "288457637-1",
|
|
12
|
+
"sale": false,
|
|
13
|
+
"price": 19.77,
|
|
14
|
+
"category": "Automotive",
|
|
15
|
+
"position": 0
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "A77BE95FD8",
|
|
19
|
+
"name": "Gorgeous Linen Computer",
|
|
20
|
+
"sku": "087096987-0",
|
|
21
|
+
"sale": false,
|
|
22
|
+
"price": 0.42,
|
|
23
|
+
"category": "Automotive",
|
|
24
|
+
"position": 1
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"id": "CD2B8085BE",
|
|
28
|
+
"name": "Sleek Linen Gloves",
|
|
29
|
+
"sku": "441641257-6",
|
|
30
|
+
"sale": false,
|
|
31
|
+
"price": 18.67,
|
|
32
|
+
"category": "Automotive",
|
|
33
|
+
"position": 2
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"id": "3034884ECA",
|
|
37
|
+
"name": "Durable Wool Hat",
|
|
38
|
+
"sku": "610796205-0",
|
|
39
|
+
"sale": false,
|
|
40
|
+
"price": 63.16,
|
|
41
|
+
"category": "Automotive",
|
|
42
|
+
"position": 3
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": "3B35A19DFF",
|
|
46
|
+
"name": "Lightweight Rubber Coat",
|
|
47
|
+
"sku": "124560496-1",
|
|
48
|
+
"sale": false,
|
|
49
|
+
"price": 13.15,
|
|
50
|
+
"category": "Automotive",
|
|
51
|
+
"position": 4
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": "F7BBD9B1D2",
|
|
55
|
+
"name": "Rustic Paper Keyboard",
|
|
56
|
+
"sku": "243345833-1",
|
|
57
|
+
"sale": false,
|
|
58
|
+
"price": 7.77,
|
|
59
|
+
"category": "Automotive",
|
|
60
|
+
"position": 5
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"id": "5286E1F9EA",
|
|
64
|
+
"name": "Incredible Cotton Shirt",
|
|
65
|
+
"sku": "873666584-3",
|
|
66
|
+
"sale": false,
|
|
67
|
+
"price": 45.11,
|
|
68
|
+
"category": "Automotive",
|
|
69
|
+
"position": 6
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"id": "E538866CFC",
|
|
73
|
+
"name": "Small Bronze Hat",
|
|
74
|
+
"sku": "710835615-5",
|
|
75
|
+
"sale": false,
|
|
76
|
+
"price": 12.34,
|
|
77
|
+
"category": "Automotive",
|
|
78
|
+
"position": 7
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"id": "952B3D844B",
|
|
82
|
+
"name": "Aerodynamic Paper Clock",
|
|
83
|
+
"sku": "392558208-8",
|
|
84
|
+
"sale": false,
|
|
85
|
+
"price": 22.59,
|
|
86
|
+
"category": "Automotive",
|
|
87
|
+
"position": 8
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"id": "B6BD620005",
|
|
91
|
+
"name": "Durable Iron Table",
|
|
92
|
+
"sku": "795417242-2",
|
|
93
|
+
"sale": false,
|
|
94
|
+
"price": 23.07,
|
|
95
|
+
"category": "Automotive",
|
|
96
|
+
"position": 9
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"id": "546CB731CB",
|
|
100
|
+
"name": "Fantastic Leather Hat",
|
|
101
|
+
"sku": "857899444-2",
|
|
102
|
+
"sale": false,
|
|
103
|
+
"price": 29.59,
|
|
104
|
+
"category": "Automotive",
|
|
105
|
+
"position": 10
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"id": "9FF7028768",
|
|
109
|
+
"name": "Gorgeous Leather Knife",
|
|
110
|
+
"sku": "887139418-6",
|
|
111
|
+
"sale": false,
|
|
112
|
+
"price": 42.41,
|
|
113
|
+
"category": "Automotive",
|
|
114
|
+
"position": 11
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"id": "9F729D69C6",
|
|
118
|
+
"name": "Synergistic Copper Coat",
|
|
119
|
+
"sku": "423424193-8",
|
|
120
|
+
"sale": false,
|
|
121
|
+
"price": 29.59,
|
|
122
|
+
"category": "Automotive",
|
|
123
|
+
"position": 12
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"id": "4011335B6B",
|
|
127
|
+
"name": "Intelligent Wool Clock",
|
|
128
|
+
"sku": "464990513-3",
|
|
129
|
+
"sale": false,
|
|
130
|
+
"price": 31.2,
|
|
131
|
+
"category": "Automotive",
|
|
132
|
+
"position": 13
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"id": "B28798CDAD",
|
|
136
|
+
"name": "Durable Bronze Bag",
|
|
137
|
+
"sku": "547390027-5",
|
|
138
|
+
"sale": false,
|
|
139
|
+
"price": 12.46,
|
|
140
|
+
"category": "Automotive",
|
|
141
|
+
"position": 14
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"id": "84EACAB9F7",
|
|
145
|
+
"name": "Lightweight Leather Bottle",
|
|
146
|
+
"sku": "027837187-6",
|
|
147
|
+
"sale": false,
|
|
148
|
+
"price": 17.47,
|
|
149
|
+
"category": "Automotive",
|
|
150
|
+
"position": 15
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"id": "C02747F6C6",
|
|
154
|
+
"name": "Practical Wooden Coat",
|
|
155
|
+
"sku": "181342040-8",
|
|
156
|
+
"sale": false,
|
|
157
|
+
"price": 42.33,
|
|
158
|
+
"category": "Automotive",
|
|
159
|
+
"position": 16
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
"id": "44459088C3",
|
|
163
|
+
"name": "Gorgeous Linen Computer",
|
|
164
|
+
"sku": "226387489-5",
|
|
165
|
+
"sale": false,
|
|
166
|
+
"price": 24.9,
|
|
167
|
+
"category": "Automotive",
|
|
168
|
+
"position": 17
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"id": "F1EDB5846B",
|
|
172
|
+
"name": "Mediocre Bronze Chair",
|
|
173
|
+
"sku": "380482668-7",
|
|
174
|
+
"sale": false,
|
|
175
|
+
"price": 20.55,
|
|
176
|
+
"category": "Automotive",
|
|
177
|
+
"position": 18
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"id": "1A05D231CB",
|
|
181
|
+
"name": "Incredible Rubber Bag",
|
|
182
|
+
"sku": "050606049-7",
|
|
183
|
+
"sale": false,
|
|
184
|
+
"price": 10.02,
|
|
185
|
+
"category": "Automotive",
|
|
186
|
+
"position": 19
|
|
187
|
+
}
|
|
188
|
+
]
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
function orderPayload() {
|
|
193
|
+
return {
|
|
194
|
+
"site_name": "Dummy App",
|
|
195
|
+
"id": "6705E78231",
|
|
196
|
+
"promo_codes": ['promo_1', 'promo_2'],
|
|
197
|
+
"shipping_service": "Ground",
|
|
198
|
+
"shipping_total": 7.0,
|
|
199
|
+
"tax_total": 1.0,
|
|
200
|
+
"total_price": 152.92,
|
|
201
|
+
"tenders": 'Visa',
|
|
202
|
+
"email": 'test@weblinc.com',
|
|
203
|
+
"items": [
|
|
204
|
+
{
|
|
205
|
+
"id": "5964ef7d9d1fa2f1d0626c86",
|
|
206
|
+
"product_id": "4AF99AB7C8",
|
|
207
|
+
"product_name": "Heavy Duty Iron Bag",
|
|
208
|
+
"sku": "288457637-1",
|
|
209
|
+
"options": {
|
|
210
|
+
"Size": "Medium",
|
|
211
|
+
"Color": "Silver"
|
|
212
|
+
},
|
|
213
|
+
"price": 80.76,
|
|
214
|
+
"quantity": 1,
|
|
215
|
+
"category": "Automotive"
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"id": "595fbf819d1fa2b3a0c4bd00",
|
|
219
|
+
"product_id": "F7BBD9B1D2",
|
|
220
|
+
"product_name": "Rustic Paper Keyboard",
|
|
221
|
+
"sku": "517371131-0",
|
|
222
|
+
"options": {
|
|
223
|
+
"Size": "Small",
|
|
224
|
+
"Color": "Fuchsia"
|
|
225
|
+
},
|
|
226
|
+
"price": 65.16,
|
|
227
|
+
"quantity": 1,
|
|
228
|
+
"category": "Automotive"
|
|
229
|
+
}
|
|
230
|
+
]
|
|
231
|
+
};
|
|
232
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
//= require workarea/storefront/spec_helper
|
|
2
|
+
/*eslint no-unused-vars: 0 */
|
|
3
|
+
|
|
4
|
+
var gettingUserData = WORKAREA.currentUser.gettingUserData;
|
|
5
|
+
|
|
6
|
+
function stubSegmentMethods() {
|
|
7
|
+
// This is an aweful idea, but since WORKAREA.currentUser.gettingUserData
|
|
8
|
+
// is a promise, not a function it can't be stubbed with sinon.
|
|
9
|
+
var userData = {
|
|
10
|
+
"logged_in":true,
|
|
11
|
+
"cart_quantity":0,
|
|
12
|
+
"admin":true,
|
|
13
|
+
"user_id":"59b2f28fc254291234daf27b",
|
|
14
|
+
"checkout_id":"E2E1096C6A",
|
|
15
|
+
"user_name":"Ben Crouse",
|
|
16
|
+
"user_email":"user@workarea.com"
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
WORKAREA.currentUser.gettingUserData = $.Deferred().resolve(userData);
|
|
20
|
+
|
|
21
|
+
sinon.stub(WORKAREA.segmentAnalytics, 'page', function(payload) {
|
|
22
|
+
window.testData.push({
|
|
23
|
+
eventType: 'page',
|
|
24
|
+
data: payload
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
sinon.stub(WORKAREA.segmentAnalytics, 'track', function(eventType, data) {
|
|
29
|
+
window.testData.push({
|
|
30
|
+
eventType: eventType,
|
|
31
|
+
data: data
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
sinon.stub(WORKAREA.segmentAnalytics, 'identify', function(userId, data) {
|
|
36
|
+
window.testData.push({
|
|
37
|
+
eventType: 'identify',
|
|
38
|
+
userId: userId,
|
|
39
|
+
data: data
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
sinon.stub(WORKAREA.segmentAnalytics, 'reset', function() {
|
|
44
|
+
window.testData.push({
|
|
45
|
+
eventType: 'reset'
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function resetStubs() {
|
|
51
|
+
WORKAREA.segmentAnalytics.page.reset();
|
|
52
|
+
WORKAREA.segmentAnalytics.track.reset();
|
|
53
|
+
WORKAREA.segmentAnalytics.identify.reset();
|
|
54
|
+
WORKAREA.segmentAnalytics.reset.reset();
|
|
55
|
+
WORKAREA.currentUser.gettingUserData = gettingUserData;
|
|
56
|
+
}
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
//= require workarea/storefront/spec_helper
|
|
2
|
+
|
|
3
|
+
/*global
|
|
4
|
+
orderPayload productListPayload
|
|
5
|
+
stubSegmentMethods resetStubs
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
(function () {
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
before(function(){
|
|
12
|
+
window.testData = [];
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
function teardown() {
|
|
16
|
+
window.testData = [];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
afterEach(teardown);
|
|
20
|
+
|
|
21
|
+
after(resetStubs);
|
|
22
|
+
|
|
23
|
+
describe('WORKAREA.segmentAnalyticsAdapter', function () {
|
|
24
|
+
stubSegmentMethods();
|
|
25
|
+
|
|
26
|
+
describe.skip('categoryView', function () {
|
|
27
|
+
beforeEach(function(){
|
|
28
|
+
WORKAREA.analytics.fireCallback('categoryView',
|
|
29
|
+
{
|
|
30
|
+
"name" : "Games",
|
|
31
|
+
"sort" : "top_sellers",
|
|
32
|
+
"page" : 1,
|
|
33
|
+
"filters" : {}
|
|
34
|
+
}
|
|
35
|
+
);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('creates a page view event', function () {
|
|
39
|
+
//This should be true if isTest worked
|
|
40
|
+
expect(window.testData[0].eventType).to.eq('page');
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('adds the payload to segment', function () {
|
|
44
|
+
expect(window.testData[1].data.name).to.eq('Games');
|
|
45
|
+
expect(window.testData[1].data.sort).to.eq('top_sellers');
|
|
46
|
+
expect(window.testData[1].data.page).to.eq(1);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
describe('justLoggedOut', function () {
|
|
51
|
+
before(function(){
|
|
52
|
+
WORKAREA.analytics.fireCallback('justLoggedOut');
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it('fires the reset event', function () {
|
|
56
|
+
//This should be true if isTest worked
|
|
57
|
+
expect(window.testData[0].eventType).to.eq('reset');
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
describe('productList', function () {
|
|
62
|
+
before(function(){
|
|
63
|
+
WORKAREA.analytics.fireCallback('productList', productListPayload());
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it('tacks a Product List Viewed event in segment', function () {
|
|
67
|
+
var payload = window.testData[0].data;
|
|
68
|
+
expect(window.testData[0].eventType).to.eq('Product List Viewed');
|
|
69
|
+
expect(payload.list_id).to.eq('Electronics');
|
|
70
|
+
expect(payload.products.length).to.eq(20);
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
describe('productClick', function () {
|
|
75
|
+
before(function(){
|
|
76
|
+
WORKAREA.analytics.fireCallback('productClick',
|
|
77
|
+
{
|
|
78
|
+
'category' : "Automotive",
|
|
79
|
+
'id' : "4AF99AB7C8",
|
|
80
|
+
'list' : "Movies & Shoes",
|
|
81
|
+
'name' : "Heavy Duty Iron Bag",
|
|
82
|
+
'position' : 0,
|
|
83
|
+
'price' : 19.77,
|
|
84
|
+
'sale' : false,
|
|
85
|
+
'sku' : "288457637-1"
|
|
86
|
+
}
|
|
87
|
+
);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it('announces a product click event to segment', function () {
|
|
91
|
+
var payload = window.testData[0].data;
|
|
92
|
+
expect(window.testData[0].eventType).to.eq('Product Clicked');
|
|
93
|
+
|
|
94
|
+
expect(payload.category).to.eq('Automotive');
|
|
95
|
+
expect(payload.name).to.eq('Heavy Duty Iron Bag');
|
|
96
|
+
expect(payload.position).to.eq(0);
|
|
97
|
+
expect(payload.price).to.eq(19.77);
|
|
98
|
+
expect(payload.product_id).to.eq('4AF99AB7C8');
|
|
99
|
+
expect(payload.variant).to.eq('288457637-1');
|
|
100
|
+
|
|
101
|
+
expect(window.testData[0].data.quantity).to.be.an('undefined');
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
describe('searchResultsView', function () {
|
|
106
|
+
before(function(){
|
|
107
|
+
WORKAREA.analytics.fireCallback('searchResultsView',
|
|
108
|
+
{
|
|
109
|
+
"terms" : "query string",
|
|
110
|
+
"sort" : "relevance",
|
|
111
|
+
"page" : 1,
|
|
112
|
+
}
|
|
113
|
+
);
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
it('tracks a Products Searched event in segment', function () {
|
|
117
|
+
expect(window.testData[0].eventType).to.eq('Products Searched');
|
|
118
|
+
expect(window.testData[0].data.query).to.eq('query string');
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
describe.skip('productView', function () {
|
|
123
|
+
before(function(){
|
|
124
|
+
WORKAREA.analytics.fireCallback('productView',
|
|
125
|
+
{
|
|
126
|
+
'category' : 'Automotive',
|
|
127
|
+
'id' : '4AF99AB7C8',
|
|
128
|
+
'name' : 'Heavy Duty Iron Bag',
|
|
129
|
+
'price' : 80.76,
|
|
130
|
+
'quantity' : '1',
|
|
131
|
+
'sale' : false,
|
|
132
|
+
'sku' : '288457637-1'
|
|
133
|
+
}
|
|
134
|
+
);
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
it('creates a page view event', function () {
|
|
138
|
+
//This should be true if isTest worked
|
|
139
|
+
expect(window.testData[0].eventType).to.eq('page');
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
it('announces the products details in the ecommerce event', function () {
|
|
143
|
+
var product = window.testData[1].data;
|
|
144
|
+
expect(product.name).to.eq('Heavy Duty Iron Bag');
|
|
145
|
+
expect(product.product_id).to.eq('4AF99AB7C8');
|
|
146
|
+
expect(product.price).to.eq(80.76);
|
|
147
|
+
expect(product.category).to.eq('Automotive');
|
|
148
|
+
expect(product.variant).to.eq('288457637-1');
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
describe('addToCart', function () {
|
|
153
|
+
before(function(){
|
|
154
|
+
WORKAREA.analytics.fireCallback('addToCart',
|
|
155
|
+
{
|
|
156
|
+
'category' : 'Automotive',
|
|
157
|
+
'id' : '4AF99AB7C8',
|
|
158
|
+
'name' : 'Heavy Duty Iron Bag',
|
|
159
|
+
'price' : 80.76,
|
|
160
|
+
'quantity' : '1',
|
|
161
|
+
'sale' : false,
|
|
162
|
+
'sku' : '288457637-1'
|
|
163
|
+
}
|
|
164
|
+
);
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
it('tracks the product added event in segment', function () {
|
|
168
|
+
var product = window.testData[0].data;
|
|
169
|
+
expect(window.testData[0].eventType).to.eq('Product Added');
|
|
170
|
+
|
|
171
|
+
expect(product.category).to.eq('Automotive');
|
|
172
|
+
expect(product.name).to.eq('Heavy Duty Iron Bag');
|
|
173
|
+
expect(product.product_id).to.eq('4AF99AB7C8');
|
|
174
|
+
expect(product.price).to.eq(80.76);
|
|
175
|
+
expect(product.quantity).to.eq('1');
|
|
176
|
+
expect(product.variant).to.eq('288457637-1');
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
describe('removeFromCart', function () {
|
|
181
|
+
before(function(){
|
|
182
|
+
WORKAREA.analytics.fireCallback('removeFromCart',
|
|
183
|
+
{
|
|
184
|
+
'category' : 'Automotive',
|
|
185
|
+
'id' : '4AF99AB7C8',
|
|
186
|
+
'name' : 'Heavy Duty Iron Bag',
|
|
187
|
+
'price' : 80.76,
|
|
188
|
+
'quantity' : '1',
|
|
189
|
+
'sale' : false,
|
|
190
|
+
'sku' : '288457637-1'
|
|
191
|
+
}
|
|
192
|
+
);
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
it('tracks the Product Removed event in segment', function () {
|
|
196
|
+
var product = window.testData[0].data;
|
|
197
|
+
expect(window.testData[0].eventType).to.eq('Product Removed');
|
|
198
|
+
|
|
199
|
+
expect(product.category).to.eq('Automotive');
|
|
200
|
+
expect(product.name).to.eq('Heavy Duty Iron Bag');
|
|
201
|
+
expect(product.product_id).to.eq('4AF99AB7C8');
|
|
202
|
+
expect(product.price).to.eq(80.76);
|
|
203
|
+
expect(product.quantity).to.eq('1');
|
|
204
|
+
expect(product.variant).to.eq('288457637-1');
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
describe('cartView', function () {
|
|
209
|
+
beforeEach(function(){
|
|
210
|
+
WORKAREA.analytics.fireCallback('cartView', orderPayload());
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
it('tracks a Cart Viewed event in segment', function () {
|
|
214
|
+
expect(window.testData[0].eventType).to.eq('Cart Viewed');
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
it('tracks a Checkout step 1 event in segment', function () {
|
|
218
|
+
var payload = window.testData[1].data;
|
|
219
|
+
expect(window.testData[1].eventType).to.eq('Viewed Checkout Step');
|
|
220
|
+
expect(payload.step).to.eq(1);
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
describe('checkoutAddressesView', function () {
|
|
225
|
+
beforeEach(function(){
|
|
226
|
+
WORKAREA.analytics.fireCallback('checkoutAddressesView', orderPayload());
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
it('tracks a Checkout Step Completed event in segment', function () {
|
|
230
|
+
expect(window.testData[0].eventType).to.eq('Checkout Step Completed');
|
|
231
|
+
expect(window.testData[0].data.step).to.eq(1);
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
it('tracks step 2 of checkout in segment', function () {
|
|
235
|
+
expect(window.testData[1].eventType).to.eq('Checkout Step Viewed');
|
|
236
|
+
expect(window.testData[1].data.step).to.eq(2);
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
describe('checkoutShippingView', function () {
|
|
241
|
+
beforeEach(function(){
|
|
242
|
+
WORKAREA.analytics.fireCallback('checkoutShippingView', orderPayload());
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
it('tracks Checkout Step 2 Completed event in segment', function () {
|
|
246
|
+
expect(window.testData[0].eventType).to.eq('Checkout Step Completed');
|
|
247
|
+
expect(window.testData[0].data.step).to.eq(2);
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
it('announces step 3 of checkout in segment', function () {
|
|
251
|
+
expect(window.testData[1].eventType).to.eq('Checkout Step Viewed');
|
|
252
|
+
expect(window.testData[1].data.step).to.eq(3);
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
describe('checkoutPaymentView', function() {
|
|
257
|
+
beforeEach(function(){
|
|
258
|
+
WORKAREA.analytics.fireCallback('checkoutPaymentView',orderPayload());
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
it('tracks Checkout Step 3 Completed event in segment', function () {
|
|
262
|
+
expect(window.testData[0].eventType).to.eq('Checkout Step Completed');
|
|
263
|
+
expect(window.testData[0].data.step).to.eq(3);
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
it('announces step 4 of checkout in segment', function () {
|
|
267
|
+
expect(window.testData[1].eventType).to.eq('Checkout Step Viewed');
|
|
268
|
+
expect(window.testData[1].data.step).to.eq(4);
|
|
269
|
+
});
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
describe('checkoutPaymentSelected', function () {
|
|
273
|
+
before(function(){
|
|
274
|
+
WORKAREA.analytics.fireCallback('checkoutPaymentSelected',
|
|
275
|
+
{
|
|
276
|
+
"type" : "new_card"
|
|
277
|
+
}
|
|
278
|
+
);
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
it('announces a Payment Info Entered event in segment', function () {
|
|
282
|
+
expect(window.testData[0].eventType).to.eq('Payment Info Entered');
|
|
283
|
+
expect(window.testData[0].data.step).to.eq(4);
|
|
284
|
+
});
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
describe('checkoutOrderPlaced', function () {
|
|
288
|
+
beforeEach(function(){
|
|
289
|
+
WORKAREA.analytics.fireCallback('checkoutOrderPlaced', orderPayload());
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
it('tracks Checkout Step 4 Completed event in segment', function () {
|
|
293
|
+
expect(window.testData[0].eventType).to.eq('Checkout Step Completed');
|
|
294
|
+
expect(window.testData[0].data.step).to.eq(4);
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
it('tracks Order Completed event in segment', function() {
|
|
298
|
+
var payload = window.testData[1].data;
|
|
299
|
+
expect(window.testData[1].eventType).to.eq('Order Completed');
|
|
300
|
+
|
|
301
|
+
expect(payload.affiliation).to.eq('Dummy App');
|
|
302
|
+
expect(payload.checkout_id).to.eq('6705E78231');
|
|
303
|
+
expect(payload.discount).to.eq('promo_1,promo_2');
|
|
304
|
+
expect(payload.payment_method).to.eq('Visa');
|
|
305
|
+
expect(payload.revenue).to.eq(152.92);
|
|
306
|
+
expect(payload.shipping).to.eq(7.00);
|
|
307
|
+
expect(payload.tax).to.eq(1.00);
|
|
308
|
+
});
|
|
309
|
+
});
|
|
310
|
+
});
|
|
311
|
+
}());
|