forked from railslove/rack-tracker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgoogle_analytics_spec.rb
More file actions
144 lines (116 loc) · 5.18 KB
/
google_analytics_spec.rb
File metadata and controls
144 lines (116 loc) · 5.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
RSpec.describe Rack::Tracker::GoogleAnalytics do
def env
{misc: 'foobar'}
end
it 'will be placed in the head' do
expect(described_class.position).to eq(:head)
expect(described_class.new(env).position).to eq(:head)
end
describe '#ecommerce_events' do
subject { described_class.new(env) }
describe 'with stored ecommerce events' do
before { allow(subject).to receive(:events).and_return([Rack::Tracker::GoogleAnalytics::Send.new, Rack::Tracker::GoogleAnalytics::Ecommerce.new]) }
it 'will just return the ecommerce events' do
expect(subject.ecommerce_events).to match_array(Rack::Tracker::GoogleAnalytics::Ecommerce)
end
end
describe 'without stored ecommerce events' do
before { allow(subject).to receive(:events).and_return([Rack::Tracker::GoogleAnalytics::Send.new]) }
it 'will be empty' do
expect(subject.ecommerce_events).to be_empty
end
end
end
describe "with events" do
describe "default" do
def env
{'tracker' => {
'google_analytics' => [
Rack::Tracker::GoogleAnalytics::Send.new(category: "Users", action: "Login", label: "Standard")
]
}}
end
subject { described_class.new(env, tracker: 'somebody').render }
it "will show events" do
expect(subject).to match(%r{ga\(\"send\",{\"hitType\":\"event\",\"eventCategory\":\"Users\",\"eventAction\":\"Login\",\"eventLabel\":\"Standard\"}\)})
end
end
describe "with a event value" do
def env
{'tracker' => { 'google_analytics' => [
Rack::Tracker::GoogleAnalytics::Send.new(category: "Users", action: "Login", label: "Standard", value: "5")
]}}
end
subject { described_class.new(env, tracker: 'somebody').render }
it "will show events with values" do
expect(subject).to match(%r{ga\(\"send\",{\"hitType\":\"event\",\"eventCategory\":\"Users\",\"eventAction\":\"Login\",\"eventLabel\":\"Standard\",\"eventValue\":\"5\"}\)},)
end
end
end
describe 'with e-commerce events' do
describe "default" do
def env
{'tracker' => {
'google_analytics' => [
Rack::Tracker::GoogleAnalytics::Ecommerce.new({type: 'addItem', id: '1234', name: 'Fluffy Pink Bunnies', sku: 'DD23444', category: 'Party Toys', price: '11.99', quantity: '1'}),
Rack::Tracker::GoogleAnalytics::Ecommerce.new({type: 'addTransaction', id: '1234', affiliation: 'Acme Clothing', revenue: 11.99, shipping: '5', tax: '1.29', currency: 'EUR'})
]
}}
end
subject { described_class.new(env, tracker: 'somebody', ecommerce: true).render }
it "will add items" do
expect(subject).to match(%r{ga\(\"ecommerce:addItem\",#{{id: '1234', name: 'Fluffy Pink Bunnies', sku: 'DD23444', category: 'Party Toys', price: '11.99', quantity: '1'}.to_json}})
end
it "will add transaction" do
expect(subject).to match(%r{ga\(\"ecommerce:addTransaction\",#{{id: '1234', affiliation: 'Acme Clothing', revenue: '11.99', shipping: '5', tax: '1.29', currency: 'EUR'}.to_json}})
end
it "will submit cart" do
expect(subject).to match(%r{ga\('ecommerce:send'\);})
end
end
end
describe "with custom domain" do
subject { described_class.new(env, tracker: 'somebody', cookieDomain: "railslabs.com").render }
it "will show asyncronous tracker with cookieDomain" do
expect(subject).to match(%r{ga\('create', 'somebody', {\"cookieDomain\":\"railslabs.com\"}\)})
expect(subject).to match(%r{ga\('send', 'pageview'\)})
end
end
describe "with enhanced_link_attribution" do
subject { described_class.new(env, tracker: 'happy', enhanced_link_attribution: true).render }
it "will embedded the linkid plugin script" do
expect(subject).to match(%r{linkid.js})
end
end
describe "with advertising" do
subject { described_class.new(env, tracker: 'happy', advertising: true).render }
it "will require displayfeatures" do
expect(subject).to match(%r{ga\('require', 'displayfeatures'\)})
end
end
describe "with e-commerce" do
subject { described_class.new(env, tracker: 'happy', ecommerce: true).render }
it "will require the ecommerce plugin" do
expect(subject).to match(%r{ga\('require', 'ecommerce', 'ecommerce\.js'\)})
end
end
describe "with anonymizeIp" do
subject { described_class.new(env, tracker: 'happy', anonymize_ip: true).render }
it "will set anonymizeIp to true" do
expect(subject).to match(%r{ga\('set', 'anonymizeIp', true\)})
end
end
describe "with dynamic tracker" do
subject { described_class.new(env, { tracker: lambda { |env| return env[:misc] }}).render }
it 'will call tracker lambdas to obtain tracking codes' do
expect(subject).to match(%r{ga\('create', 'foobar', {}\)})
end
end
describe 'adjusted bounce rate' do
subject { described_class.new(env, tracker: 'afake', adjusted_bounce_rate_timeouts: [15, 30]).render }
it "will add timeouts to push read events" do
expect(subject).to match(%r{ga\('send', 'event', '15_seconds', 'read'\)})
expect(subject).to match(%r{ga\('send', 'event', '30_seconds', 'read'\)})
end
end
end