ac-summarization-utils 0.0.47.rc1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,210 @@
1
+ require 'rspec'
2
+ require 'redis'
3
+ require 'mysql2'
4
+ require_relative '../lib/ac-summarization-utils/summarization_utils'
5
+
6
+ include ACSummarizationUtils
7
+ include ACSummarizationUtils::SummUtils
8
+
9
+ describe "Summarization Utils#" do
10
+
11
+ context "duplicate records#" do
12
+ it "should duplicate fields with multiple values" do
13
+ record1 = Record.new({ :required => {"ad_id" => 10},:group_fields=>{}})
14
+
15
+ input = [record1]
16
+ result = duplicate_records(input, "topic_id", [100,200,300])
17
+ result.should == [Record.new({:required => {"ad_id" => 10, "topic_id" => 100}, :group_fields=>{}}),
18
+ Record.new({:required => {"ad_id" => 10, "topic_id" => 200}, :group_fields=>{}}),
19
+ Record.new({:required => {"ad_id" => 10, "topic_id" => 300}, :group_fields=>{}})]
20
+ end
21
+
22
+ it "should duplicate fields one value" do
23
+ record1 = Record.new({ :required => {"ad_id" => 10},:group_fields=>{}})
24
+
25
+ input = [record1]
26
+
27
+ result = duplicate_records(input, "topic_id", [100])
28
+ result.should == [Record.new({:required => {"ad_id" => 10, "topic_id" => 100}, :group_fields=>{}})]
29
+ end
30
+
31
+ it "should duplicate multiple records with mupltiple values" do
32
+ record1 = Record.new({ :required => {"ad_id" => 10},:group_fields=>{}})
33
+ record2 = Record.new({ :required => {"ad_id" => 11},:group_fields=>{}})
34
+
35
+ input = [record1, record2]
36
+
37
+ result = duplicate_records(input, "topic_id", [100,200])
38
+ result.should == [Record.new({:required => {"ad_id" => 10, "topic_id" => 100}, :group_fields=>{}}),
39
+ Record.new({:required => {"ad_id" => 11, "topic_id" => 100}, :group_fields=>{}}),
40
+ Record.new({:required => {"ad_id" => 10, "topic_id" => 200}, :group_fields=>{}}),
41
+ Record.new({:required => {"ad_id" => 11, "topic_id" => 200}, :group_fields=>{}})]
42
+ end
43
+
44
+ it "should keep fields to group by" do
45
+ record1 = Record.new({ :required => {"ad_id" => 10},:group_fields=>{"ad_id" => 10}})
46
+ record2 = Record.new({ :required => {"ad_id" => 11},:group_fields=>{"ad_id" => 10}})
47
+
48
+ input = [record1, record2]
49
+
50
+ result = duplicate_records(input, "topic_id", [100,200])
51
+ result.should == [Record.new({:required => {"ad_id" => 10, "topic_id" => 100}, :group_fields=>{"ad_id" => 10}}),
52
+ Record.new({:required => {"ad_id" => 11, "topic_id" => 100}, :group_fields=>{"ad_id" => 10}}),
53
+ Record.new({:required => {"ad_id" => 10, "topic_id" => 200}, :group_fields=>{"ad_id" => 10}}),
54
+ Record.new({:required => {"ad_id" => 11, "topic_id" => 200}, :group_fields=>{"ad_id" => 10}})]
55
+ end
56
+
57
+ it "should return given records if input array is null or expanded fileds are not good" do
58
+
59
+ duplicate_records(nil, nil, nil).should == nil
60
+ duplicate_records(nil, "topic_id", [100,200]).should == nil
61
+ duplicate_records([], "topic_id", [100,200]).should == []
62
+
63
+ record1 = Record.new({ :required => {"ad_id" => 10},:group_fields=>{"ad_id" => 10}})
64
+ record2 = Record.new({ :required => {"ad_id" => 11},:group_fields=>{"ad_id" => 10}})
65
+
66
+ input = [record1, record2]
67
+
68
+ duplicate_records(input, nil, [100,200]).should == input
69
+ duplicate_records(input, "topic_id", nil).should == input
70
+ duplicate_records(input, "topic_id", []).should == input
71
+ end
72
+
73
+ end
74
+
75
+ context "summarize records#" do
76
+ it "should handle nil and empty values correctly" do
77
+
78
+ summarize_records(nil, [{:method => method(:sum), :input_field_name => "cpc", :output_field_name => "spend"}]).should == []
79
+ summarize_records([], [{:method => method(:sum), :input_field_name => "cpc", :output_field_name => "spend"}]).should == []
80
+ end
81
+
82
+
83
+ it "should summarize records with sum for 1 record" do
84
+
85
+ input = [Record.new({:required => {"ad_id" => 10} , :group_fields => { "cpc" => 0.6}})]
86
+ summarize_records(input, [{:method => method(:sum), :input_field_name => "cpc", :output_field_name => "spend"}]).should == [{"ad_id" => 10, "spend" => 0.6}]
87
+ end
88
+
89
+ it "should summarize records with count for 1 record" do
90
+
91
+ input = [Record.new({:required => {"ad_id" => 10} , :group_fields => { "ad_id" => 10}})]
92
+ summarize_records(input, [{:method => method(:count), :input_field_name => "ad_id", :output_field_name => "clicks"}]).should == [{"ad_id" => 10, "clicks" => 1}]
93
+ end
94
+
95
+ it "should summarize records with count for more than 1 record" do
96
+
97
+ input = [Record.new({:required => {"ad_id" => 10, "adgroup_id" => 5} , :group_fields => { "ad_id" => 10}}),
98
+ Record.new({:required => {"ad_id" => 20, "adgroup_id" => 5} , :group_fields => { "ad_id" => 20}}),
99
+ Record.new({:required => {"ad_id" => 10, "adgroup_id" => 5} , :group_fields => { "ad_id" => 10}})]
100
+
101
+ group_options = [{:method => method(:count), :input_field_name => "ad_id", :output_field_name => "clicks"}]
102
+
103
+ summarize_records(input,group_options).should == [{"ad_id" => 10, "adgroup_id" => 5, "clicks" => 2}, {"ad_id" => 20, "adgroup_id" => 5, "clicks" => 1}]
104
+ end
105
+
106
+ it "should summarize records with sum for more than 1 record" do
107
+
108
+ input = [Record.new({:required => {"ad_id" => 10, "adgroup_id" => 5} , :group_fields => { "cpc" => 0.1}}),
109
+ Record.new({:required => {"ad_id" => 20, "adgroup_id" => 5} , :group_fields => { "cpc" => 0.2}}),
110
+ Record.new({:required => {"ad_id" => 10, "adgroup_id" => 5} , :group_fields => { "cpc" => 0.3}})]
111
+
112
+ group_options = [{:method => method(:sum), :input_field_name => "cpc", :output_field_name => "spend"}]
113
+
114
+ summarize_records(input,group_options ).should == [{"ad_id" => 10, "adgroup_id" => 5, "spend" => 0.4}, {"ad_id" => 20, "adgroup_id" => 5, "spend" => 0.2}]
115
+ end
116
+
117
+ it "should summarize records with sum and count for more than 1 record" do
118
+
119
+ input = [Record.new({:required => {"ad_id" => 10, "adgroup_id" => 5} , :group_fields => { "cpc" => 0.1, "ad_id" => 10}}),
120
+ Record.new({:required => {"ad_id" => 20, "adgroup_id" => 5} , :group_fields => { "cpc" => 0.2, "ad_id" => 20}}),
121
+ Record.new({:required => {"ad_id" => 10, "adgroup_id" => 5} , :group_fields => { "cpc" => 0.3, "ad_id" => 10}})]
122
+ group_options = [{:method => method(:sum), :input_field_name => "cpc", :output_field_name => "spend"},
123
+ {:method => method(:count), :input_field_name => "ad_id", :output_field_name => "clicks"}]
124
+
125
+ summarize_records(input,group_options).should == [{"ad_id" => 10, "adgroup_id" => 5, "spend" => 0.4, "clicks" => 2}, {"ad_id" => 20, "adgroup_id" => 5, "spend" => 0.2, "clicks" => 1}]
126
+ end
127
+
128
+ it "should summarize records with sum and count for more than 1 record even if they are strings" do
129
+
130
+ input = [Record.new({:required => {"ad_id" => 10, "adgroup_id" => 5} , :group_fields => { "cpc" => "0.1", "ad_id" => 10}}),
131
+ Record.new({:required => {"ad_id" => 20, "adgroup_id" => 5} , :group_fields => { "cpc" => "0.2", "ad_id" => 20}}),
132
+ Record.new({:required => {"ad_id" => 10, "adgroup_id" => 5} , :group_fields => { "cpc" => "0.3", "ad_id" => 10}})]
133
+ group_options = [{:method => method(:sum), :input_field_name => "cpc", :output_field_name => "spend"},
134
+ {:method => method(:count), :input_field_name => "ad_id", :output_field_name => "clicks"}]
135
+
136
+ summarize_records(input,group_options).should == [{"ad_id" => 10, "adgroup_id" => 5, "spend" => 0.4, "clicks" => 2}, {"ad_id" => 20, "adgroup_id" => 5, "spend" => 0.2, "clicks" => 1}]
137
+ end
138
+
139
+ it "should find min records with cpc more than 1 record even if they are strings" do
140
+
141
+ input = [Record.new({:required => {"ad_id" => 10, "adgroup_id" => 5} , :group_fields => { "cpc" => "0.1", "ad_id" => 10}}),
142
+ Record.new({:required => {"ad_id" => 20, "adgroup_id" => 5} , :group_fields => { "cpc" => "0.2", "ad_id" => 20}}),
143
+ Record.new({:required => {"ad_id" => 10, "adgroup_id" => 5} , :group_fields => { "cpc" => "0.3", "ad_id" => 10}})]
144
+ group_options = [{:method => method(:minimum), :input_field_name => "cpc", :output_field_name => "min_cpc"}]
145
+
146
+ summarize_records(input,group_options).should == [{"ad_id" => 10, "adgroup_id" => 5, "min_cpc" => 0.1}, {"ad_id" => 20, "adgroup_id" => 5, "min_cpc" => 0.2}]
147
+ end
148
+
149
+ it "should find max records with cpc more than 1 record even if they are strings" do
150
+
151
+ input = [Record.new({:required => {"ad_id" => 10, "adgroup_id" => 5} , :group_fields => { "cpc" => "0.1", "ad_id" => 10}}),
152
+ Record.new({:required => {"ad_id" => 20, "adgroup_id" => 5} , :group_fields => { "cpc" => "0.2", "ad_id" => 20}}),
153
+ Record.new({:required => {"ad_id" => 10, "adgroup_id" => 5} , :group_fields => { "cpc" => "0.3", "ad_id" => 10}})]
154
+ group_options = [{:method => method(:maximum), :input_field_name => "cpc", :output_field_name => "max_cpc"}]
155
+
156
+ summarize_records(input,group_options).should == [{"ad_id" => 10, "adgroup_id" => 5, "max_cpc" => 0.3}, {"ad_id" => 20, "adgroup_id" => 5, "max_cpc" => 0.2}]
157
+ end
158
+
159
+ it "should find average CPC records more than 1 record even if they are strings" do
160
+
161
+ input = [Record.new({:required => {"ad_id" => 10, "adgroup_id" => 5} , :group_fields => { "cpc" => "0.1", "ad_id" => 10}}),
162
+ Record.new({:required => {"ad_id" => 20, "adgroup_id" => 5} , :group_fields => { "cpc" => "0.2", "ad_id" => 20}}),
163
+ Record.new({:required => {"ad_id" => 10, "adgroup_id" => 5} , :group_fields => { "cpc" => "0.3", "ad_id" => 10}})]
164
+ group_options = [{:method => method(:average), :input_field_name => "cpc", :output_field_name => "avg_cpc"}]
165
+
166
+ summarize_records(input,group_options).should == [{"ad_id" => 10, "adgroup_id" => 5, "avg_cpc" => 0.2,"avg_cpc_sum"=>0.4, "avg_cpc_count"=>2}, {"ad_id" => 20, "adgroup_id" => 5, "avg_cpc" => 0.2,"avg_cpc_sum"=>0.2, "avg_cpc_count"=>1}]
167
+ end
168
+
169
+ it "should raise error if group by field doesn't exist" do
170
+
171
+ input = [Record.new({:required => {"ad_id" => 10} , :group_fields => { }})]
172
+ group_options = [{:method => method(:sum), :input_field_name => "cpc", :output_field_name => "spend"}]
173
+
174
+ lambda {summarize_records(input,group_options)}.should raise_error(ArgumentError)
175
+ end
176
+
177
+ end
178
+
179
+ context "create_records#" do
180
+ it "should call spefific create records block after downcase for each message" do
181
+ messages = [{"A" => "b"}, {"a" => "b"}, {"A" => "b"}]
182
+ records, input_errors = create_records(nil, nil, messages) do |m|
183
+ m["a"].should == "b"
184
+ [m]
185
+ end
186
+ records.size.should == 3
187
+ input_errors.size.should == 0
188
+ end
189
+
190
+ it "should create error messages for each erroneous message" do
191
+ def print_error(logger, msg)
192
+ puts "Correctly printed error during test"
193
+ end
194
+ messages = [{"A" => "b"}, {"a" => "b"}, {"A" => "b"}]
195
+ error_message = {:messages => {"A" => "b"}}
196
+ mock_error_handler = mock("ErrorsHandler")
197
+ mock_error_handler.should_receive(:generate_error_message).with(any_args()).exactly(3).times.and_return(error_message)
198
+ mock_logger = mock("logger")
199
+ mock_logger.stub(:log)
200
+
201
+ records, input_errors = create_records(mock_logger, mock_error_handler, messages) do |m|
202
+ raise ArgumentError.new
203
+ end
204
+ records.size.should == 0
205
+ input_errors.size.should == 3
206
+ end
207
+
208
+ end
209
+
210
+ end
@@ -0,0 +1,328 @@
1
+ require 'rspec'
2
+ require 'redis'
3
+ require 'mysql2'
4
+ require_relative '../lib/ac-summarization-utils/validation_utils'
5
+
6
+ include ACSummarizationUtils
7
+ include ACSummarizationUtils::ValidationUtils
8
+
9
+ CPC_CAMPAIGN = 1
10
+ CPV_CAMPAIGN = 3
11
+
12
+ describe "Validation Utils#" do
13
+
14
+ context "is_valid_real_click#" do
15
+
16
+ it "should return true if all fields are correct" do
17
+ click = { "ad_id" => "1", "valid" => 1, "advertiser_id" => 8, "cpc" => "0.1", "clicktype" => 1}
18
+ is_valid_real_click?(click,CPC_CAMPAIGN).should == true
19
+ is_valid_real_click?(click,CPV_CAMPAIGN).should == true
20
+ click = { "ad_id" => "1", "valid" => 1, "advertiser_id" => 8, "cpc" => "0.1", "ct" => 1}
21
+ is_valid_real_click?(click,CPC_CAMPAIGN).should == true
22
+ is_valid_real_click?(click,CPV_CAMPAIGN).should == true
23
+ click = { "ad_id" => "1", "validitytype" => 1, "advertiser_id" => 8, "cpc" => "0.1", "clicktype" => 1}
24
+ is_valid_real_click?(click,CPC_CAMPAIGN).should == true
25
+ is_valid_real_click?(click,CPV_CAMPAIGN).should == true
26
+ end
27
+
28
+ it "should return false if the click has ad_id = -1" do
29
+ click = { "ad_id" => "-1", "valid" => 1, "advertiser_id" => 8, "cpc" => "0.1", "clicktype" => 1}
30
+ is_valid_real_click?(click,CPC_CAMPAIGN).should == false
31
+ is_valid_real_click?(click,CPV_CAMPAIGN).should == false
32
+ end
33
+
34
+ it "should return false if the click doesn't have advertiser_id of 8" do
35
+ click = { "ad_id" => "1", "valid" => 1, "advertiser_id" => 9, "cpc" => "0.1", "clicktype" => 1}
36
+ is_valid_real_click?(click,CPC_CAMPAIGN).should == false
37
+ is_valid_real_click?(click,CPV_CAMPAIGN).should == false
38
+ end
39
+
40
+ it "should return false if the click doesn't have allowed clicktype or ct" do
41
+ click = { "ad_id" => "1", "valid" => 1, "advertiser_id" => 8, "cpc" => "0.1", "clicktype" => 55}
42
+ is_valid_real_click?(click,CPC_CAMPAIGN).should == false
43
+ is_valid_real_click?(click,CPV_CAMPAIGN).should == false
44
+ click = { "ad_id" => "1", "valid" => 1, "advertiser_id" => 8, "cpc" => "0.1", "ct" => 55}
45
+ is_valid_real_click?(click,CPC_CAMPAIGN).should == false
46
+ is_valid_real_click?(click,CPV_CAMPAIGN).should == false
47
+ end
48
+
49
+ it "should return false if the click dis not valid" do
50
+ click = { "ad_id" => "1", "valid" => 2, "advertiser_id" => 8, "cpc" => "0.1", "clicktype" => 1}
51
+ is_valid_real_click?(click,CPC_CAMPAIGN).should == false
52
+ end
53
+
54
+ end
55
+
56
+ context "common_click_validations#" do
57
+
58
+ it "should return click type and valid value (ad_id of class Fixnum)" do
59
+ click = { "valid" => 1, "advertiser_id" => 8, "cpc" => "0.1", "clicktype" => 1, "ad_id" => 12}
60
+ common_click_validations(click).should == [click["clicktype"], click["valid"]]
61
+ end
62
+
63
+ it "should return click type and valid value (ad_id of class String)" do
64
+ click = { "valid" => 1, "advertiser_id" => 8, "cpc" => "0.1", "clicktype" => 1, "ad_id" => "12"}
65
+ common_click_validations(click).should == [click["clicktype"], click["valid"]]
66
+ end
67
+
68
+ it "should raise ArgumentError if ad_id doesn't exist" do
69
+ click = { "valid" => 1, "advertiser_id" => 8, "cpc" => "0.1", "clicktype" => 1}
70
+ lambda {common_click_validations(click)}.should raise_error(ArgumentError,"message required field 'ad_id' doesn't exist")
71
+ end
72
+
73
+ it "should raise ArgumentError if valid doesn't exist" do
74
+ click = { "ad_id" => 1, "advertiser_id" => 8, "cpc" => "0.1", "clicktype" => 1}
75
+ lambda {common_click_validations(click)}.should raise_error(ArgumentError,"message required field valid not validitytype doesn't exist")
76
+ end
77
+
78
+ it "should raise ArgumentError if advertiserid doesn't exist" do
79
+ click = { "valid" => 1, "ad_id" => 8, "cpc" => "0.1", "clicktype" => 1}
80
+ lambda {common_click_validations(click)}.should raise_error(ArgumentError,"message required field 'advertiser_id' doesn't exist")
81
+ end
82
+
83
+ it "should raise ArgumentError if cpc doesn't exist" do
84
+ click = { "valid" => 1, "advertiser_id" => 8, "ad_id" => "1", "clicktype" => 1}
85
+ lambda {common_click_validations(click)}.should raise_error(ArgumentError,"message required field 'cpc' doesn't exist")
86
+ end
87
+
88
+ it "should raise ArgumentError if clicktype doesn't exist, but click url exists" do
89
+ click = { "valid" => 1, "advertiser_id" => 8, "cpc" => "0.1", "ad_id" => 1, "clickurl" => 'http://stam.com'}
90
+ lambda {common_click_validations(click)}.should raise_error(ArgumentError,"message required field click_type not ct doesn't exist")
91
+ end
92
+
93
+ it "should return invalid click if no click type and no clickurl" do
94
+ click = { "valid" => 1, "advertiser_id" => 8, "cpc" => "0.1", "ad_id" => 1}
95
+ common_click_validations(click).should == [-1,-1]
96
+ end
97
+
98
+ it "should return invalid click if no click type and clickurl is NULL" do
99
+ click = { "valid" => 1, "advertiser_id" => 8, "cpc" => "0.1", "ad_id" => 1, "clickurl" => "NULL"}
100
+ common_click_validations(click).should == [-1,-1]
101
+ end
102
+
103
+ it "should raise ArgumentError if ad id contains something other than numbers" do
104
+ click = { "valid" => 1, "advertiser_id" => 8, "cpc" => "0.1", "ad_id" => "1qwer;", "clicktype" => 1}
105
+ lambda {common_click_validations(click)}.should raise_error(ArgumentError,"invalid ad id: 1qwer;")
106
+ end
107
+
108
+ end
109
+
110
+ context "is_valid_direct_click#" do
111
+
112
+ it "should return true if all fields are correct" do
113
+ click = { "ad_id" => "1", "valid" => 1, "advertiser_id" => 8, "cpc" => "0.1", "clicktype" => 1}
114
+ is_valid_direct_click?(click).should == true
115
+ click = { "ad_id" => "1", "valid" => 1, "advertiser_id" => 8, "cpc" => "0.1", "ct" => 1}
116
+ is_valid_direct_click?(click).should == true
117
+ click = { "ad_id" => "1", "validitytype" => 1, "advertiser_id" => 8, "cpc" => "0.1", "clicktype" => 1}
118
+ is_valid_direct_click?(click).should == true
119
+ end
120
+
121
+ it "should return false if the click has ad_id = -1" do
122
+ click = { "ad_id" => "-1", "valid" => 1, "advertiser_id" => 8, "cpc" => "0.1", "clicktype" => 1}
123
+ is_valid_direct_click?(click).should == false
124
+ end
125
+
126
+ it "should return false if the click doesn't have valid or validitytype of 1" do
127
+ click = { "ad_id" => "1", "valid" => 2, "advertiser_id" => 8, "cpc" => "0.1", "clicktype" => 1}
128
+ is_valid_direct_click?(click).should == false
129
+ click = { "ad_id" => "1", "validitytype" => 2, "advertiser_id" => 8, "cpc" => "0.1", "clicktype" => 1}
130
+ is_valid_direct_click?(click).should == false
131
+ end
132
+
133
+ it "should return false if the click doesn't have advertiser_id of 8" do
134
+ click = { "ad_id" => "1", "valid" => 1, "advertiser_id" => 9, "cpc" => "0.1", "clicktype" => 1}
135
+ is_valid_direct_click?(click).should == false
136
+ end
137
+
138
+ it "should return false if the click doesn't have cpc larger than 0.0" do
139
+ click = { "ad_id" => "1", "valid" => 1, "advertiser_id" => 8, "cpc" => "-0.1", "clicktype" => 1}
140
+ is_valid_direct_click?(click).should == false
141
+ end
142
+
143
+ it "should return false if the click doesn't have allowed clicktype or ct" do
144
+ click = { "ad_id" => "1", "valid" => 1, "advertiser_id" => 8, "cpc" => "0.1", "clicktype" => 55}
145
+ is_valid_direct_click?(click).should == false
146
+ click = { "ad_id" => "1", "valid" => 1, "advertiser_id" => 8, "cpc" => "0.1", "ct" => 55}
147
+ is_valid_direct_click?(click).should == false
148
+ end
149
+
150
+ end
151
+
152
+ context "is_valid_direct_layer_impr#" do
153
+
154
+ it "should return true if all fields are correct" do
155
+ layer_impr = { "ad_id" => "1", "advertiserid" => 8}
156
+ is_valid_direct_layer_impr?(layer_impr).should == true
157
+ end
158
+
159
+ it "should return false if the layer has ad_id = -1" do
160
+ layer_impr = { "ad_id" => "-1", "advertiserid" => 8}
161
+ is_valid_direct_layer_impr?(layer_impr).should == false
162
+ end
163
+
164
+
165
+ it "should return false if the layer doesn't have advertiserid of 8" do
166
+ layer_impr = { "ad_id" => "1","advertiserid" => 9}
167
+ is_valid_direct_layer_impr?(layer_impr).should == false
168
+ end
169
+
170
+ it "should raise ArgumentError if ad_id doesn't exist" do
171
+ layer_impr = { "advertiserid" => 8}
172
+ lambda {is_valid_direct_layer_impr?(layer_impr)}.should raise_error(ArgumentError)
173
+ end
174
+
175
+ it "should raise ArgumentError if advertiserid doesn't exist" do
176
+ layer_impr = { "ad_id" => 8}
177
+ lambda {is_valid_direct_layer_impr?(layer_impr)}.should raise_error(ArgumentError)
178
+ end
179
+
180
+ end
181
+
182
+ context "is_valid_layer_impr#" do
183
+
184
+ it "should return true if all field values are correct and there are no missing values" do
185
+ layer_impr = { "validitytype" => "1", "cpc" => 0.8, "advertiserid" => 1234, "ad_id" => -1}
186
+ is_valid_layer_impr?(layer_impr).should == true
187
+ end
188
+
189
+
190
+ it "should return false if the layer doesn't have cpc value greater than or equal to 0.0" do
191
+ layer_impr = { "validitytype" => "2", "cpc" => -1.2, "advertiserid" => 55, "ad_id" => -1}
192
+ is_valid_layer_impr?(layer_impr).should == false
193
+ end
194
+
195
+ it "should raise ArgumentError if cpc doesn't exist" do
196
+ layer_impr = { "validitytype" => "2", "advertiserid" => 55, "ad_id" => -1}
197
+ lambda {is_valid_layer_impr?(layer_impr)}.should raise_error(ArgumentError)
198
+ end
199
+
200
+ it "should raise ArgumentError if advertiserid doesn't exist" do
201
+ layer_impr = { "valid" => "1", "cpc" => 0.2, "ad_id" => 121212}
202
+ lambda {is_valid_layer_impr?(layer_impr)}.should raise_error(ArgumentError)
203
+ end
204
+
205
+ it "should raise ArgumentError if ad_id doesn't exist" do
206
+ layer_impr = { "cpc" => 0.2, "advertiserid" => 303, "validitytype" => 1}
207
+ lambda {is_valid_layer_impr?(layer_impr)}.should raise_error(ArgumentError)
208
+ end
209
+
210
+ end
211
+
212
+ context "is_valid_click#" do
213
+
214
+ it "should return true if all field values are correct and there are no missing values" do
215
+ click = { "validitytype" => "1", "cpc" => 0.8, "advertiser_id" => 1234, "clicktype" => 5, "publisher_id" => 131821, "ad_id" => -1}
216
+ is_valid_click?(click).should == true
217
+ click = { "valid" => "1", "cpc" => 0.9, "advertiser_id" => 8, "clicktype" => 1, "p" => 55452, "ad_id" => 150231}
218
+ is_valid_click?(click).should == true
219
+ click = { "validitytype" => "1", "cpc" => 0.4, "advertiser_id" => 7, "ct" => 1005, "p" => 653351, "ad_id" => -1}
220
+ is_valid_click?(click).should == true
221
+ click = { "validitytype" => "1", "cpc" => 0.8, "advertiser_id" => 8, "clicktype" => 2, "publisher_id" => 884223, "ad_id" => 54544}
222
+ is_valid_click?(click).should == true
223
+ click = { "valid" => "1", "cpc" => 1.2, "advertiser_id" => 61, "ct" => 6, "publisher_id" => 131821, "ad_id" => -1}
224
+ is_valid_click?(click).should == true
225
+ end
226
+
227
+ it "should return false if validitytype is not 1" do
228
+ click = { "valid" => "2", "cpc" => 1.2, "advertiser_id" => 61, "clicktype" => 6, "publisher_id" => 131821, "ad_id" => -1}
229
+ is_valid_click?(click).should == false
230
+ click = { "validitytype" => "2", "cpc" => 1.2, "advertiser_id" => 61, "clicktype" => 6, "publisher_id" => 131821, "ad_id" => -1}
231
+ is_valid_click?(click).should == false
232
+ end
233
+
234
+
235
+ it "should return false if the clicktype is not allowed" do
236
+ click = { "valid" => "1", "cpc" => 1.2, "advertiser_id" => 61, "clicktype" => 7, "p" => 131821, "ad_id" => -1}
237
+ is_valid_click?(click).should == false
238
+ click = { "validitytype" => "1", "cpc" => 1.2, "advertiser_id" => 8, "ct" => 1006, "publisher_id" => 131821, "ad_id" => -1}
239
+ is_valid_click?(click).should == false
240
+ end
241
+
242
+ it "should return false if the cpc is below 0.0" do
243
+ click = { "valid" => "1", "cpc" => -0.5, "advertiser_id" => 61, "clicktype" => 5, "p" => 131821, "ad_id" => -1}
244
+ is_valid_click?(click).should == false
245
+ end
246
+
247
+ it "should raise ArgumentError if cpc doesn't exist" do
248
+ click = { "valid" => "1", "advertiser_id" => 61, "clicktype" => 5, "p" => 131821, "ad_id" => -1}
249
+ lambda {is_valid_click?(click)}.should raise_error(ArgumentError)
250
+ end
251
+
252
+ it "should raise ArgumentError if advertiser_id doesn't exist" do
253
+ click = { "valid" => "1", "cpc" => 0.55, "ct" => 5, "p" => 131821, "ad_id" => -1}
254
+ lambda {is_valid_click?(click)}.should raise_error(ArgumentError)
255
+ end
256
+
257
+ it "should raise ArgumentError if publisher_id doesn't exist" do
258
+ click = { "valid" => "1", "cpc" => 0.55, "clicktype" => 2,"advertiser_id" => 3216, "ad_id" => -1}
259
+ lambda {is_valid_click?(click)}.should raise_error(ArgumentError)
260
+ end
261
+
262
+ it "should raise ArgumentError if ad_id doesn't exist" do
263
+ click = { "validitytype" => "1", "cpc" => 0.55, "clicktype" => 1005,"advertiser_id" => 3216, "publisher_id" => 4042}
264
+ lambda {is_valid_click?(click)}.should raise_error(ArgumentError)
265
+ end
266
+
267
+ it "should raise ArgumentError if validitytype doesn't exist" do
268
+ click = { "ad_id" => 55422, "cpc" => 0.55, "ct" => 5,"advertiser_id" => 8, "p" => 4042}
269
+ lambda {is_valid_click?(click)}.should raise_error(ArgumentError)
270
+ end
271
+
272
+ it "should return invalid click if no click type and no clickurl" do
273
+ click = { "valid" => 1, "advertiser_id" => 8, "cpc" => "0.1", "ad_id" => 1, "p" => 4}
274
+ is_valid_click?(click).should == false
275
+ end
276
+
277
+ end
278
+
279
+ context "is_valid_impression#" do
280
+
281
+ it "should return true if all field values are correct and there are no missing values" do
282
+ imp = { "pid" => 131821, "itid" => 3}
283
+ is_valid_impression?(imp).should == true
284
+
285
+ end
286
+
287
+ it "should return false if impression type id is not 3" do
288
+ imp = { "pid" => 131821, "itid" => 2}
289
+ is_valid_impression?(imp).should == false
290
+ imp = { "pid" => 131821, "itid" => 12}
291
+ is_valid_impression?(imp).should == false
292
+ end
293
+
294
+ it "should raise ArgumentError if pid doesn't exist" do
295
+ imp = { "pid2" => 131821, "itid" => 3}
296
+ lambda { is_valid_impression?(imp)}.should raise_error(ArgumentError)
297
+ end
298
+
299
+ it "should raise ArgumentError if itid doesn't exist" do
300
+ imp = { "pid" => 131821, "itid2" => 3}
301
+ lambda { is_valid_impression?(imp)}.should raise_error(ArgumentError)
302
+ end
303
+ end
304
+
305
+ context "is_valid_inimage_report#" do
306
+
307
+ it "should return true if value exists and there is an account_id" do
308
+ click = { "value" => {"account_id" => "119b99ec63b", "campaign_data" => {"iid" => "1234", "kid" => "56342"}}}
309
+ is_valid_inimage_report?(click).should == true
310
+ end
311
+
312
+ it "should return false if account_id is an empty string" do
313
+ click = { "value" => {"account_id" => "", "campaign_data" => {"iid" => "1234", "kid" => "56342"}}}
314
+ is_valid_inimage_report?(click).should == false
315
+ end
316
+
317
+ it "should raise ArgumentError if value exists and account_id is nil" do
318
+ click = { "value" => {"campaign_data" => {"iid" => "1234", "kid" => "56342"}}}
319
+ lambda { is_valid_impression?(click)}.should raise_error(ArgumentError)
320
+ end
321
+
322
+ it "should raise ArgumentError if value doesn't exist'" do
323
+ imp = {"category" => "inimage", "campaign_data" => {"iid" => "1234", "kid" => "56342"}}
324
+ lambda { is_valid_impression?(imp)}.should raise_error(ArgumentError)
325
+ end
326
+
327
+ end
328
+ end