ac-summarization-utils 0.0.47.rc1

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.
@@ -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