|
1 | 1 | # frozen_string_literal: true
|
2 | 2 |
|
3 | 3 | #
|
4 |
| -# Copyright 2017, Optimizely and contributors |
| 4 | +# Copyright 2017-2018, Optimizely and contributors |
5 | 5 | #
|
6 | 6 | # Licensed under the Apache License, Version 2.0 (the "License");
|
7 | 7 | # you may not use this file except in compliance with the License.
|
|
24 | 24 | let(:logger) { Optimizely::NoOpLogger.new }
|
25 | 25 |
|
26 | 26 | describe '.get_revenue_value' do
|
| 27 | + it 'should return nil if argument is undefined' do |
| 28 | + expect(logger).to receive(:log).with(Logger::DEBUG, |
| 29 | + 'Event tags is undefined.').exactly(1).times |
| 30 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(nil, logger)).to be_nil |
| 31 | + end |
| 32 | + |
27 | 33 | it 'should return nil if argument is not a Hash' do
|
28 |
| - expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(nil)).to be_nil |
29 |
| - expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(0.5)).to be_nil |
30 |
| - expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(65_536)).to be_nil |
31 |
| - expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(9_223_372_036_854_775_807)).to be_nil |
32 |
| - expect(Optimizely::Helpers::EventTagUtils.get_revenue_value('65536')).to be_nil |
33 |
| - expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(false)).to be_nil |
34 |
| - expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(true)).to be_nil |
35 |
| - expect(Optimizely::Helpers::EventTagUtils.get_revenue_value([])).to be_nil |
| 34 | + expect(logger).to receive(:log).with(Logger::DEBUG, |
| 35 | + 'Event tags is not a hash.').exactly(7).times |
| 36 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(0.5, logger)).to be_nil |
| 37 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(65_536, logger)).to be_nil |
| 38 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(9_223_372_036_854_775_807, logger)).to be_nil |
| 39 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value('65536', logger)).to be_nil |
| 40 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(false, logger)).to be_nil |
| 41 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(true, logger)).to be_nil |
| 42 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value([], logger)).to be_nil |
36 | 43 | end
|
37 |
| - it 'should return nil if event tags does not contain the revenue' do |
| 44 | + |
| 45 | + it 'should return nil if event tags does not contain the revenue key' do |
38 | 46 | event_tags = {
|
39 | 47 | 'non-revenue' => 5432
|
40 | 48 | }
|
41 |
| - expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags)).to be_nil |
| 49 | + expect(logger).to receive(:log) |
| 50 | + .with(Logger::DEBUG, 'The revenue key is not defined in the event tags.').exactly(1).times |
| 51 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags, logger)).to be_nil |
42 | 52 | end
|
43 |
| - it 'should return nil if event tags contains the revenue with a string value' do |
| 53 | + |
| 54 | + it 'should return nil if event tags contains the revenue key with nil value' do |
44 | 55 | event_tags = {
|
45 |
| - 'revenue' => 'string' |
| 56 | + 'revenue' => nil |
46 | 57 | }
|
47 |
| - expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags)).to be_nil |
| 58 | + expect(logger).to receive(:log).with(Logger::DEBUG, |
| 59 | + 'The revenue key is nil.').exactly(1).times |
| 60 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags, logger)).to be_nil |
48 | 61 | end
|
| 62 | + |
49 | 63 | it 'should return nil if event tags contains the revenue with a string value' do
|
50 | 64 | event_tags = {
|
51 |
| - 'revenue' => '65536' |
| 65 | + 'revenue' => 'string' |
52 | 66 | }
|
53 |
| - expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags)).to be_nil |
| 67 | + expect(logger).to receive(:log) |
| 68 | + .with(Logger::WARN, 'Revenue value is not an integer or float, or is not a numeric string.').exactly(1).times |
| 69 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags, logger)).to be_nil |
54 | 70 | end
|
| 71 | + |
55 | 72 | it 'should return nil if event tags contains the revenue with a boolean true value' do
|
56 | 73 | event_tags = {
|
57 | 74 | 'revenue' => true
|
58 | 75 | }
|
59 |
| - expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags)).to be_nil |
| 76 | + expect(logger).to receive(:log) |
| 77 | + .with(Logger::WARN, 'Revenue value is not an integer or float, or is not a numeric string.').exactly(1).times |
| 78 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags, logger)).to be_nil |
60 | 79 | end
|
| 80 | + |
61 | 81 | it 'should return nil if event tags contains the revenue with a boolean false value' do
|
62 | 82 | event_tags = {
|
63 | 83 | 'revenue' => false
|
64 | 84 | }
|
65 |
| - expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags)).to be_nil |
| 85 | + expect(logger).to receive(:log) |
| 86 | + .with(Logger::WARN, 'Revenue value is not an integer or float, or is not a numeric string.').exactly(1).times |
| 87 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags, logger)).to be_nil |
66 | 88 | end
|
| 89 | + |
67 | 90 | it 'should return nil if event tags contains the revenue with a list value' do
|
68 | 91 | event_tags = {
|
69 | 92 | 'revenue' => []
|
70 | 93 | }
|
71 |
| - expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags)).to be_nil |
| 94 | + expect(logger).to receive(:log) |
| 95 | + .with(Logger::WARN, 'Revenue value is not an integer or float, or is not a numeric string.').exactly(1).times |
| 96 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags, logger)).to be_nil |
72 | 97 | end
|
73 |
| - it 'should return nil if event tags contains the revenue with a float value' do |
| 98 | + |
| 99 | + it 'should return nil if event tags contains the revenue with a invalid float value' do |
| 100 | + expect(logger).to receive(:log) |
| 101 | + .with(Logger::WARN, 'Failed to parse revenue value 0.5 from event tags.').exactly(1).times |
| 102 | + expect(logger).to receive(:log) |
| 103 | + .with(Logger::WARN, 'Failed to parse revenue value 2.5 from event tags.').exactly(1).times |
74 | 104 | event_tags = {
|
75 | 105 | 'revenue' => 0.5
|
76 | 106 | }
|
77 |
| - expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags)).to be_nil |
| 107 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags, logger)).to be_nil |
| 108 | + event_tags['revenue'] = 2.5 |
| 109 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags, logger)).to be_nil |
| 110 | + end |
| 111 | + |
| 112 | + it 'should return nil if event tags contains the revenue with a invalid string numeric' do |
| 113 | + expect(logger).to receive(:log) |
| 114 | + .with(Logger::WARN, 'Failed to parse revenue value 0.5 from event tags.').exactly(1).times |
| 115 | + expect(logger).to receive(:log) |
| 116 | + .with(Logger::WARN, 'Failed to parse revenue value 2.5 from event tags.').exactly(1).times |
| 117 | + event_tags = { |
| 118 | + 'revenue' => '0.5' |
| 119 | + } |
| 120 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags, logger)).to be_nil |
| 121 | + event_tags['revenue'] = '2.5' |
| 122 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags, logger)).to be_nil |
| 123 | + end |
| 124 | + |
| 125 | + it 'should return correct value if event tags contains the revenue with a valid float value' do |
| 126 | + expect(logger).to receive(:log) |
| 127 | + .with(Logger::INFO, 'Parsed revenue value 65536 from event tags.').exactly(1).times |
| 128 | + event_tags = { |
| 129 | + 'revenue' => 65_536.0 |
| 130 | + } |
| 131 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags, logger)).to eq(65_536) |
78 | 132 | end
|
| 133 | + |
| 134 | + it 'should return correct value if event tags contains the revenue with a valid float string' do |
| 135 | + expect(logger).to receive(:log) |
| 136 | + .with(Logger::INFO, 'Parsed revenue value 65536 from event tags.').exactly(1).times |
| 137 | + event_tags = { |
| 138 | + 'revenue' => '65536.0' |
| 139 | + } |
| 140 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags, logger)).to eq(65_536) |
| 141 | + end |
| 142 | + |
| 143 | + it 'should return correct value if event tags contains the revenue with a valid integer string' do |
| 144 | + event_tags = { |
| 145 | + 'revenue' => '65536' |
| 146 | + } |
| 147 | + expect(logger).to receive(:log) |
| 148 | + .with(Logger::INFO, 'Parsed revenue value 65536 from event tags.').exactly(1).times |
| 149 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags, logger)).to eq(65_536) |
| 150 | + end |
| 151 | + |
79 | 152 | it 'should return correct value if event tags contains the revenue with an integer value' do
|
80 | 153 | event_tags = {
|
81 | 154 | 'revenue' => 65_536
|
82 | 155 | }
|
83 |
| - expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags)).to eq(65_536) |
| 156 | + expect(logger).to receive(:log) |
| 157 | + .with(Logger::INFO, 'Parsed revenue value 65536 from event tags.').exactly(1).times |
| 158 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags, logger)).to eq(65_536) |
| 159 | + end |
| 160 | + |
| 161 | + it 'should return correct value if event tags contains the revenue with an integer zero value' do |
| 162 | + event_tags = { |
| 163 | + 'revenue' => 0 |
| 164 | + } |
| 165 | + expect(logger).to receive(:log) |
| 166 | + .with(Logger::INFO, 'Parsed revenue value 0 from event tags.').exactly(1).times |
| 167 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags, logger)).to eq(0) |
| 168 | + end |
| 169 | + |
| 170 | + it 'should return correct value if event tags contains the revenue with an float zero value' do |
| 171 | + event_tags = { |
| 172 | + 'revenue' => 0.0 |
| 173 | + } |
| 174 | + expect(logger).to receive(:log) |
| 175 | + .with(Logger::INFO, 'Parsed revenue value 0 from event tags.').exactly(1).times |
| 176 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags, logger)).to eq(0.0) |
84 | 177 | end
|
85 |
| - it 'should return correct value if event tags contains the revenue with a long value' do |
| 178 | + |
| 179 | + it 'should return correct value if event tags contains the revenue with a long integer value' do |
86 | 180 | event_tags = {
|
87 | 181 | 'revenue' => 9_223_372_036_854_775_807
|
88 | 182 | }
|
89 |
| - expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags)).to eq(9_223_372_036_854_775_807) |
| 183 | + expect(logger).to receive(:log) |
| 184 | + .with(Logger::INFO, 'Parsed revenue value 9223372036854775807 from event tags.').exactly(1).times |
| 185 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags, logger)).to eq(9_223_372_036_854_775_807) |
| 186 | + end |
| 187 | + |
| 188 | + it 'should return correct value if event tags contains the revenue with a long float value' do |
| 189 | + value = 9_223_372_036_854_775_807.to_f |
| 190 | + event_tags = { |
| 191 | + 'revenue' => value |
| 192 | + } |
| 193 | + expect(logger).to receive(:log) |
| 194 | + .with(Logger::INFO, "Parsed revenue value #{value.to_i} from event tags.").exactly(1).times |
| 195 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags, logger)).to eq(value.to_i) |
| 196 | + end |
| 197 | + |
| 198 | + it 'should return correct value if event tags contains the revenue with a long string value' do |
| 199 | + value = '9_223_372_036_854_775_807' |
| 200 | + event_tags = { |
| 201 | + 'revenue' => value |
| 202 | + } |
| 203 | + # Float converts long number to E-notation i.e "9.223372036854776e+18" |
| 204 | + value = value.to_f |
| 205 | + expect(logger).to receive(:log) |
| 206 | + .with(Logger::INFO, "Parsed revenue value #{value.to_i} from event tags.").exactly(1).times |
| 207 | + expect(Optimizely::Helpers::EventTagUtils.get_revenue_value(event_tags, logger)).to eq(value.to_i) |
90 | 208 | end
|
91 | 209 | end
|
92 | 210 |
|
|
0 commit comments