neuron-client 0.2.6 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. data/README.md +11 -8
  2. data/lib/neuron-client/api.rb +5 -0
  3. data/lib/neuron-client/model/ad.rb +142 -0
  4. data/lib/neuron-client/model/ad_calculations.rb +325 -0
  5. data/lib/neuron-client/model/ad_zone.rb +45 -0
  6. data/lib/neuron-client/model/base.rb +233 -18
  7. data/lib/neuron-client/model/blocked_referer.rb +20 -0
  8. data/lib/neuron-client/model/blocked_user_agent.rb +21 -0
  9. data/lib/neuron-client/model/geo_target.rb +36 -0
  10. data/lib/neuron-client/model/pixel.rb +22 -0
  11. data/lib/neuron-client/model/report.rb +35 -0
  12. data/lib/neuron-client/model/s3_file.rb +30 -0
  13. data/lib/neuron-client/model/zone.rb +64 -0
  14. data/lib/neuron-client/model/zone_calculations.rb +37 -0
  15. data/lib/neuron-client/schema/ad.rb +406 -0
  16. data/lib/neuron-client/schema/ad_zone.rb +49 -0
  17. data/lib/neuron-client/schema/blocked_referer.rb +52 -0
  18. data/lib/neuron-client/schema/blocked_user_agent.rb +64 -0
  19. data/lib/neuron-client/schema/common.rb +220 -0
  20. data/lib/neuron-client/schema/event.rb +17 -0
  21. data/lib/neuron-client/schema/geo_target.rb +33 -0
  22. data/lib/neuron-client/schema/pixel.rb +39 -0
  23. data/lib/neuron-client/schema/report.rb +59 -0
  24. data/lib/neuron-client/schema/s3_file.rb +87 -0
  25. data/lib/neuron-client/schema/zone.rb +214 -0
  26. data/lib/neuron-client/version.rb +1 -1
  27. data/lib/neuron-client.rb +24 -59
  28. data/neuron-client.gemspec +3 -0
  29. data/spec/lib/admin_connection_spec.rb +234 -0
  30. data/spec/lib/api_spec.rb +41 -63
  31. data/spec/lib/model/ad_calculations_spec.rb +1146 -0
  32. data/spec/lib/model/ad_spec.rb +253 -0
  33. data/spec/lib/model/ad_zone_spec.rb +15 -0
  34. data/spec/lib/model/base_spec.rb +5 -83
  35. data/spec/lib/model/blocked_referer_spec.rb +36 -0
  36. data/spec/lib/model/blocked_user_agent_spec.rb +36 -0
  37. data/spec/lib/model/geo_target_spec.rb +28 -0
  38. data/spec/lib/model/pixel_spec.rb +36 -0
  39. data/spec/lib/model/report_spec.rb +17 -0
  40. data/spec/lib/{s3_file_spec.rb → model/s3_file_spec.rb} +6 -5
  41. data/spec/lib/model/zone_calculations_spec.rb +49 -0
  42. data/spec/lib/model/zone_spec.rb +155 -0
  43. data/spec/lib/schema/ad_spec.rb +515 -0
  44. data/spec/lib/schema/ad_zone_spec.rb +149 -0
  45. data/spec/lib/schema/blocked_referer_spec.rb +136 -0
  46. data/spec/lib/schema/blocked_user_agent_spec.rb +147 -0
  47. data/spec/lib/schema/geo_target_spec.rb +92 -0
  48. data/spec/lib/schema/pixel_spec.rb +125 -0
  49. data/spec/lib/schema/report_spec.rb +129 -0
  50. data/spec/lib/schema/s3_file_spec.rb +164 -0
  51. data/spec/lib/schema/zone_spec.rb +243 -0
  52. data/spec/spec_helper.rb +2 -1
  53. metadata +141 -121
  54. data/lib/neuron-client/model/admin/ad.rb +0 -22
  55. data/lib/neuron-client/model/admin/ad_zone.rb +0 -15
  56. data/lib/neuron-client/model/admin/base.rb +0 -91
  57. data/lib/neuron-client/model/admin/blocked_referer.rb +0 -12
  58. data/lib/neuron-client/model/admin/blocked_user_agent.rb +0 -12
  59. data/lib/neuron-client/model/admin/geo_target.rb +0 -16
  60. data/lib/neuron-client/model/admin/pixel.rb +0 -12
  61. data/lib/neuron-client/model/admin/report.rb +0 -15
  62. data/lib/neuron-client/model/admin/s3_file.rb +0 -12
  63. data/lib/neuron-client/model/admin/zone.rb +0 -15
  64. data/lib/neuron-client/model/common/ad.rb +0 -42
  65. data/lib/neuron-client/model/common/ad_calculations.rb +0 -329
  66. data/lib/neuron-client/model/common/ad_zone.rb +0 -17
  67. data/lib/neuron-client/model/common/base.rb +0 -67
  68. data/lib/neuron-client/model/common/blocked_referer.rb +0 -16
  69. data/lib/neuron-client/model/common/blocked_user_agent.rb +0 -16
  70. data/lib/neuron-client/model/common/geo_target.rb +0 -16
  71. data/lib/neuron-client/model/common/pixel.rb +0 -18
  72. data/lib/neuron-client/model/common/report.rb +0 -21
  73. data/lib/neuron-client/model/common/s3_file.rb +0 -16
  74. data/lib/neuron-client/model/common/zone.rb +0 -22
  75. data/lib/neuron-client/model/common/zone_calculations.rb +0 -41
  76. data/lib/neuron-client/model/membase/ad.rb +0 -49
  77. data/lib/neuron-client/model/membase/ad_zone.rb +0 -11
  78. data/lib/neuron-client/model/membase/blocked_referer.rb +0 -20
  79. data/lib/neuron-client/model/membase/blocked_user_agent.rb +0 -20
  80. data/lib/neuron-client/model/membase/geo_target.rb +0 -11
  81. data/lib/neuron-client/model/membase/pixel.rb +0 -22
  82. data/lib/neuron-client/model/membase/report.rb +0 -11
  83. data/lib/neuron-client/model/membase/s3_file.rb +0 -11
  84. data/lib/neuron-client/model/membase/zone.rb +0 -30
  85. data/lib/neuron-client/model/models.rb +0 -15
  86. data/spec/lib/model/admin/ad_spec.rb +0 -34
  87. data/spec/lib/model/admin/ad_zone_spec.rb +0 -19
  88. data/spec/lib/model/admin/base_spec.rb +0 -11
  89. data/spec/lib/model/admin/blocked_referer_spec.rb +0 -11
  90. data/spec/lib/model/admin/blocked_user_agent_spec.rb +0 -11
  91. data/spec/lib/model/admin/geo_target_spec.rb +0 -30
  92. data/spec/lib/model/admin/report_spec.rb +0 -21
  93. data/spec/lib/model/admin/s3_spec.rb +0 -11
  94. data/spec/lib/model/admin/zone_spec.rb +0 -21
  95. data/spec/lib/model/common/ad_calculations_spec.rb +0 -1151
  96. data/spec/lib/model/common/ad_spec.rb +0 -11
  97. data/spec/lib/model/common/ad_zone_spec.rb +0 -11
  98. data/spec/lib/model/common/base_spec.rb +0 -11
  99. data/spec/lib/model/common/blocked_referer_spec.rb +0 -11
  100. data/spec/lib/model/common/blocked_user_agent_spec.rb +0 -11
  101. data/spec/lib/model/common/geo_target_spec.rb +0 -11
  102. data/spec/lib/model/common/report_spec.rb +0 -11
  103. data/spec/lib/model/common/s3_spec.rb +0 -11
  104. data/spec/lib/model/common/zone_calculations_spec.rb +0 -54
  105. data/spec/lib/model/common/zone_spec.rb +0 -11
  106. data/spec/lib/model/membase/ad_spec.rb +0 -54
  107. data/spec/lib/model/membase/ad_zone_spec.rb +0 -11
  108. data/spec/lib/model/membase/base_spec.rb +0 -11
  109. data/spec/lib/model/membase/blocked_referer_spec.rb +0 -34
  110. data/spec/lib/model/membase/blocked_user_agent_spec.rb +0 -34
  111. data/spec/lib/model/membase/geo_target_spec.rb +0 -11
  112. data/spec/lib/model/membase/pixel_spec.rb +0 -34
  113. data/spec/lib/model/membase/report_spec.rb +0 -11
  114. data/spec/lib/model/membase/s3_spec.rb +0 -11
  115. data/spec/lib/model/membase/zone_spec.rb +0 -32
  116. data/spec/lib/old_spec.rb +0 -437
@@ -0,0 +1,253 @@
1
+ module Neuron
2
+ module Client
3
+ describe Ad do
4
+ before(:each) do
5
+ @datetime = "2011-11-11T11:11:11Z"
6
+ @minimal_attributes = {
7
+ 'acudeo_program_id' => nil,
8
+ 'approved' => 'Yes',
9
+ 'clickthru_url' => nil,
10
+ 'companion_ad_html' => nil,
11
+ 'daily_cap' => nil,
12
+ 'day_partitions' => nil,
13
+ 'end_datetime' => nil,
14
+ 'frequency_cap' => nil,
15
+ 'geo_target_netacuity_ids' => {},
16
+ 'ideal_impressions_per_hour' => nil,
17
+ 'name' => nil,
18
+ 'overall_cap' => nil,
19
+ 'pixel_ids' => [],
20
+ 'redirect_url' => nil,
21
+ 'response_type' => nil,
22
+ 'social_urls' => nil,
23
+ 'start_datetime' => @datetime,
24
+ 'time_zone' => "UTC",
25
+ 'vast_tracker_urls' => nil,
26
+ 'vast_url' => nil,
27
+ 'video_flv_url' => nil,
28
+ 'zone_links' => {},
29
+ }
30
+ end
31
+ context "when connected to the admin server" do
32
+ before(:each) do
33
+ @connection = stub(:connection)
34
+ API.stub(:default_api).and_return(stub(:default_api, :connection => @connection, :connection_type => :admin, :validate? => true))
35
+ end
36
+
37
+ describe "all" do
38
+ before(:each) do
39
+ @response = [{'ad' => {
40
+ 'id' => 1,
41
+ 'name' => nil
42
+ }}]
43
+ end
44
+ it "returns a list of Ads" do
45
+ @connection.stub(:get).with("ads").and_return(@response)
46
+ ads = Ad.all
47
+ ads.should be_a(Array)
48
+ ads.length.should be > 0
49
+ ads.first.should be_a(Ad)
50
+ end
51
+
52
+ it "makes a get call" do
53
+ @connection.should_receive(:get).with("ads").once.and_return(@response)
54
+ Ad.all
55
+ end
56
+ end
57
+
58
+ describe "find" do
59
+ before(:each) do
60
+ @response = {'ad' => @minimal_attributes.merge(
61
+ 'id' => 1,
62
+ 'name' => "Ad 1",
63
+ 'response_type' => 'Redirect',
64
+ 'redirect_url' => 'http://example.com/',
65
+ 'created_at' => @datetime,
66
+ 'updated_at' => @datetime,
67
+ 'today_impressed' => 0,
68
+ 'total_impressed' => 0
69
+ )}
70
+ end
71
+
72
+ it "returns a Ad" do
73
+ @connection.stub(:get).with("ads/1").and_return(@response)
74
+ ad = Ad.find(1)
75
+ ad.should be_a(Ad)
76
+ end
77
+
78
+ it "makes a get call" do
79
+ @connection.should_receive(:get).with("ads/1").once.and_return(@response)
80
+ Ad.find(1)
81
+ end
82
+ end
83
+
84
+ describe "create" do
85
+ before(:each) do
86
+ @attrs = @minimal_attributes.merge(
87
+ 'name' => "Ad 1",
88
+ 'response_type' => 'VideoAd',
89
+ 'video_flv_url' => 'http://example.com/ad.flv',
90
+ 'clickthru_url' => 'http://example.com/buycrap',
91
+ 'companion_ad_html' => '<a href="http://example.com/">nana!</a>',
92
+ 'social_urls' => {},
93
+ 'vast_tracker_urls' => {}
94
+ )
95
+ @response = {'ad' => @attrs.merge({
96
+ 'id' => 1,
97
+ 'created_at' => @datetime,
98
+ 'updated_at' => @datetime,
99
+ 'total_impressed' => 0,
100
+ 'today_impressed' => 0
101
+ })}
102
+ end
103
+
104
+ it "posts json" do
105
+ @connection.should_receive(:post).with("ads", {'ad' => @attrs}).once.and_return(@response)
106
+ Ad.create(@attrs)
107
+ end
108
+
109
+ it "returns the created Ad" do
110
+ @connection.should_receive(:post).and_return(@response)
111
+ ad = Ad.create(@attrs)
112
+ ad.id.should == 1
113
+ ad.name.should == "Ad 1"
114
+ end
115
+
116
+ it "returns the created Ad with vast_tracker_urls" do
117
+ trackers = {"impression" => ["http://www.google.com"]}
118
+ @attrs.merge!('vast_tracker_urls' => trackers)
119
+ response = {'ad' => @attrs.merge({
120
+ 'id' => 1,
121
+ 'created_at' => @datetime,
122
+ 'updated_at' => @datetime,
123
+ 'total_impressed' => 0,
124
+ 'today_impressed' => 0
125
+ })}
126
+ @connection.should_receive(:post).and_return(response)
127
+ ad = Ad.create(@attrs)
128
+ ad.id.should == 1
129
+ ad.vast_tracker_urls.should == trackers
130
+ end
131
+ end
132
+
133
+ describe "update_attributes" do
134
+ it "makes a put call" do
135
+ attrs = @minimal_attributes.merge(
136
+ 'id' => 1,
137
+ 'name' => "Ad 1",
138
+ 'response_type' => 'Redirect',
139
+ 'redirect_url' => 'http://example.com'
140
+ )
141
+ ad = Ad.new(attrs)
142
+ updated_attrs = attrs.merge('name' => 'Ad 2')
143
+ @connection.should_receive(:put).with("ads/1", {'ad' => updated_attrs}).and_return({'ad' => updated_attrs.merge(
144
+ 'created_at' => @datetime,
145
+ 'updated_at' => @datetime,
146
+ 'total_impressed' => 0,
147
+ 'today_impressed' => 0
148
+ )})
149
+ ad.update_attributes('name' => "Ad 2")
150
+ end
151
+
152
+ it "makes a put call with vast_tracker_urls" do
153
+ trackers = {'impression' => ["http://testurl.com"]}
154
+ updated_trackers = {'impression' => ['http://testurl.com/new']}
155
+ attrs = @minimal_attributes.merge(
156
+ 'id' => 1,
157
+ 'response_type' => 'VideoAd',
158
+ 'video_flv_url' => 'http://example.com/ad.flv',
159
+ 'clickthru_url' => 'http://example.com/buycrap',
160
+ 'companion_ad_html' => '<a href="http://example.com/">nana!</a>',
161
+ 'social_urls' => {},
162
+ 'vast_tracker_urls' => trackers
163
+ )
164
+ updated_attrs = attrs.merge('vast_tracker_urls' => updated_trackers)
165
+ ad = Ad.new(attrs)
166
+ @connection.should_receive(:put).with("ads/1", {'ad' => updated_attrs}).and_return({'ad' => updated_attrs.merge(
167
+ 'created_at' => @datetime,
168
+ 'updated_at' => @datetime,
169
+ 'total_impressed' => 0,
170
+ 'today_impressed' => 0
171
+ )})
172
+ ad.update_attributes(updated_attrs)
173
+ end
174
+ end
175
+
176
+ describe "recent(statistic, by=nil)" do
177
+ it "should call the expected method and return the expected result" do
178
+ ad = Ad.new(@minimal_attributes.merge('id' => 7))
179
+ @connection.should_receive(:get).with('ads/7/recent/impressions', {'by' => 'zone'}).and_return('return_value')
180
+
181
+ ad.recent('impressions', 'zone').should == 'return_value'
182
+ end
183
+ end
184
+
185
+ describe "unlink(zone_id)" do
186
+ it "should call the expected method and return the expected result" do
187
+ ad = Ad.new(@minimal_attributes.merge('id' => 7))
188
+ @connection.should_receive(:delete).with('ads/7/zones/z33').and_return('return_value')
189
+
190
+ ad.unlink('z33').should == 'return_value'
191
+ end
192
+ end
193
+ end
194
+
195
+ context "when connected to the membase server" do
196
+ before(:each) do
197
+ @connection = stub(:connection)
198
+ API.stub(:default_api).and_return(stub(:default_api, :connection => @connection, :connection_type => :membase, :validate? => true))
199
+ end
200
+ describe "total_impressed" do
201
+ it "should call the expected methods and return the expected value" do
202
+ ad = Ad.new(@minimal_attributes.merge('id' => 7))
203
+ @connection.stub(:get).with('count_delivery_ad_7',1).and_return('999.999')
204
+
205
+ ad.total_impressed.should == 999.999
206
+ end
207
+ end
208
+
209
+ describe "today_impressed" do
210
+ it "should call the expected methods and return the expected value" do
211
+ ad = Ad.new(@minimal_attributes.merge('id' => 7, 'time_zone' => 'time_zone_value'))
212
+ Time.stub_chain(:now, :in_time_zone).with('time_zone_value').and_return(Time.parse("2011-05-06 07:08"))
213
+ @connection.stub(:get).with('count_delivery_20110506_ad_7',1).and_return('99.99')
214
+
215
+ ad.today_impressed.should == 99.99
216
+ end
217
+ end
218
+
219
+ describe "Ad.find(id)" do
220
+ context "when the connection returns a value" do
221
+ it "should call the expected methods and return the expected value" do
222
+ connection = MembaseConnection.new("example.com:11211")
223
+ Ad.stub(:connection).and_return(connection)
224
+ attrs = @minimal_attributes.merge(
225
+ 'id' => 7,
226
+ 'response_type' => 'Redirect',
227
+ 'redirect_url' => 'http://example.com/',
228
+ 'created_at' => @datetime,
229
+ 'updated_at' => @datetime,
230
+ 'total_impressed' => 0,
231
+ 'today_impressed' => 0
232
+ )
233
+ connection.stub(:get).with('Ad:7').and_return({'ad' => attrs}.to_json)
234
+ a = stub(:ad)
235
+ Ad.should_receive(:new).with(attrs).and_return(a)
236
+
237
+ Ad.find(7).should == a
238
+ end
239
+ end
240
+ context "when the connection returns nil" do
241
+ it "should call the expected methods and return nil" do
242
+ connection = MembaseConnection.new("example.com:11211")
243
+ Ad.stub(:connection).and_return(connection)
244
+ connection.stub(:get).with('Ad:7').and_return(nil)
245
+
246
+ Ad.find(7).should be_nil
247
+ end
248
+ end
249
+ end
250
+ end
251
+ end
252
+ end
253
+ end
@@ -0,0 +1,15 @@
1
+ module Neuron
2
+ module Client
3
+ describe AdZone do
4
+ describe "self.unlink(ad_id, zone_id)" do
5
+ it "should call the expected method and return the expected value" do
6
+ c = stub(:connection)
7
+ AdZone.stub(:connection).and_return(c)
8
+ c.should_receive(:delete).with('zones/z1/ads/2').and_return('return_value')
9
+
10
+ AdZone.unlink(2, "z1").should == 'return_value'
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,89 +1,11 @@
1
1
  module Neuron
2
2
  module Client
3
- module Model
4
- module Mock
5
- class BaseMockModel; end
6
- end
7
-
8
- class BaseMockModel < Base
9
-
10
- end
11
-
12
- describe Base do
13
- describe "instance methods" do
14
- describe "initialize(attrs=nil)" do
15
- it "should set @proxied_model appropriately" do
16
- pending "Not sure what the deal is here, it works outside of unit testing"
17
-
18
- ctp = stub(:class_to_proxy)
19
- Base.any_instance.should_receive(:class_to_proxy).and_return(ctp)
20
- p = stub(:proxy)
21
- ctp.should_receive(:new).with('attributes').and_return(p)
22
- b = Base.new('attributes')
23
-
24
- b.instance_variable_get(:@proxied_model).should == p
25
- end
26
- end
27
-
28
- describe "method_missing(meth, *args, &block)" do
29
- context "when method exists on the proxied model" do
30
- it "should call the method on the proxied model"
31
- end
32
- context "when method does not exist on the proxied model" do
33
- it "should call super.method_missing"
34
- end
35
- end
36
- end
37
-
38
- describe "class methods" do
39
- describe "api" do
40
- context "when @api exists" do
41
- it "should return the expected value" do
42
- a = stub(:api)
43
- Base.instance_variable_set(:@api, a)
44
-
45
- Base.api.should == a
46
- end
47
- end
48
- context "when @api does not exist" do
49
- it "should return the expected value" do
50
- Base.instance_variable_set(:@api, nil)
51
- a = stub(:default_api)
52
- Neuron::Client::API.should_receive(:default_api).and_return(a)
53
-
54
- Base.api.should == a
55
- end
56
- end
57
- end
58
-
59
- describe "connection" do
60
- it "should call the expected methods and return the expected result" do
61
- a = stub(:api)
62
- Base.should_receive(:api).and_return(a)
63
- c = stub(:connection)
64
- a.should_receive(:connection).and_return(c)
65
-
66
- Base.connection.should == c
67
- end
68
- end
69
-
70
- describe "class_to_proxy" do
71
- it "should call the expected methods and return the expected result" do
72
- BaseMockModel.stub_chain(:api, :connection_type).and_return(:mock)
73
- BaseMockModel.class_to_proxy.should == Neuron::Client::Model::Mock::BaseMockModel
74
- end
75
- end
3
+ class BaseMockModel
4
+ include Base
5
+ end
76
6
 
77
- describe "method_missing(meth, *args, &block)" do
78
- context "when method exists on the class to proxy" do
79
- it "should call the method on the proxied model"
80
- end
81
- context "when method does not exist on the class to proxy" do
82
- it "should call super.method_missing"
83
- end
84
- end
85
- end
86
- end
7
+ describe Base do
8
+ it "should have specs"
87
9
  end
88
10
  end
89
11
  end
@@ -0,0 +1,36 @@
1
+ module Neuron
2
+ module Client
3
+ describe BlockedReferer do
4
+ context "when connected to the membase server" do
5
+ before(:each) do
6
+ @connection = stub(:connection)
7
+ API.stub(:default_api).and_return(stub(:default_api, :connection => @connection, :connection_type => :membase, :validate? => true))
8
+ end
9
+ describe "BlockedReferer.all" do
10
+ context "when connection returns a value" do
11
+ it "should call the expected methods and return the expected value" do
12
+ conn = MembaseConnection.new("example.com:11211")
13
+ BlockedReferer.stub(:connection).and_return(conn)
14
+ conn.stub(:get).with('blocked_referers').and_return('[{"blocked_referer":{"id": 42, "referer": "127.0.0.1"}}, {"blocked_referer":{"id": 82, "referer": "an.example.com"}}]')
15
+ br = stub(:blocked_referer)
16
+ br2 = stub(:blocked_referer2)
17
+ BlockedReferer.should_receive(:new).with("id"=>42, "referer"=>"127.0.0.1").and_return(br)
18
+ BlockedReferer.should_receive(:new).with("id"=>82, "referer"=>"an.example.com").and_return(br2)
19
+
20
+ BlockedReferer.all.should == [br, br2]
21
+ end
22
+ end
23
+ context "when connection returns nil" do
24
+ it "should call the expected methods and return the expected value" do
25
+ conn = MembaseConnection.new("example.com:11211")
26
+ BlockedReferer.stub(:connection).and_return(conn)
27
+ conn.stub(:get).with('blocked_referers').and_return(nil)
28
+
29
+ BlockedReferer.all.should == []
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,36 @@
1
+ module Neuron
2
+ module Client
3
+ describe BlockedUserAgent do
4
+ context "when connected to the membase server" do
5
+ before(:each) do
6
+ @connection = stub(:connection)
7
+ API.stub(:default_api).and_return(stub(:default_api, :connection => @connection, :connection_type => :membase, :validate? => true))
8
+ end
9
+ describe "BlockedUserAgent.all" do
10
+ context "when connection returns a value" do
11
+ it "should call the expected methods and return the expected value" do
12
+ conn = MembaseConnection.new("example.com:11211")
13
+ BlockedUserAgent.stub(:connection).and_return(conn)
14
+ conn.stub(:get).with('blocked_user_agents').and_return('[{"blocked_user_agent":{"id":42,"description":null,"user_agent":".*robot.*"}},{"blocked_user_agent":{"id":82,"description":null,"user_agent":"^Badbot"}}]')
15
+ bua = stub(:blocked_user_agent)
16
+ bua2 = stub(:blocked_user_agent2)
17
+ BlockedUserAgent.should_receive(:new).with("id"=>42, "description"=>nil, "user_agent"=>".*robot.*").and_return(bua)
18
+ BlockedUserAgent.should_receive(:new).with("id"=>82, "description"=>nil, "user_agent"=>"^Badbot").and_return(bua2)
19
+
20
+ BlockedUserAgent.all.should == [bua, bua2]
21
+ end
22
+ end
23
+ context "when connection returns nil" do
24
+ it "should call the expected methods and return the expected value" do
25
+ conn = MembaseConnection.new("example.com:11211")
26
+ BlockedUserAgent.stub(:connection).and_return(conn)
27
+ conn.stub(:get).with('blocked_user_agents').and_return(nil)
28
+
29
+ BlockedUserAgent.all.should == []
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,28 @@
1
+ module Neuron
2
+ module Client
3
+ describe GeoTarget do
4
+ context "when connected to the admin server" do
5
+ describe "self.query(parameters)" do
6
+ it "should call the expected methods and return the expected value" do
7
+ c = stub(:connection)
8
+ GeoTarget.should_receive(:connection).and_return(c)
9
+ parameters = {:geo_type => 'COUNTRY', :search => 'USA', :limit => '10'}
10
+ gta = {'id' => 1, 'abbreviation' => 'XYZ', 'full_name' => 'XYZ', 'name' => 'XYZ', 'geo_type' => 'METRO', 'netacuity_id' => 1}
11
+ gta2 = gta.merge({'id' => 2})
12
+ r = [
13
+ {'geo_target' => gta},
14
+ {'geo_target' => gta2}
15
+ ]
16
+ c.should_receive(:get).with('geo_targets', parameters).and_return(r)
17
+ g = stub(:geo_target)
18
+ g2 = stub(:geo_target2)
19
+ GeoTarget.should_receive(:new).with(gta).and_return(g)
20
+ GeoTarget.should_receive(:new).with(gta2).and_return(g2)
21
+
22
+ GeoTarget.query(parameters).should == [g, g2]
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,36 @@
1
+ module Neuron
2
+ module Client
3
+ describe Pixel do
4
+ context "when connected to the membase server" do
5
+ before(:each) do
6
+ @connection = stub(:connection)
7
+ API.stub(:default_api).and_return(stub(:default_api, :connection => @connection, :connection_type => :membase, :validate? => true))
8
+ end
9
+ describe "Pixel.find(id)" do
10
+ context "when the connection returns a value" do
11
+ it "should call the expected methods and return the expected value" do
12
+ p = stub(:pixel)
13
+ attrs = {
14
+ "id" => 7,
15
+ "ad_ids" => []
16
+ }
17
+ @connection.stub_chain(:local_cache, :fetch).with('Pixel:7').and_yield.and_return(p)
18
+ @connection.should_receive(:get).with('Pixel:7').and_return({'pixel' => attrs}.to_json)
19
+ Pixel.should_receive(:new).with(attrs).and_return(p)
20
+
21
+ Pixel.find(7).should == p
22
+ end
23
+ end
24
+ context "when the connection returns nil" do
25
+ it "should call the expected methods and return nil" do
26
+ @connection.stub_chain(:local_cache, :fetch).with('Pixel:7').and_yield.and_return(nil)
27
+ @connection.should_receive(:get).with('Pixel:7').and_return(nil)
28
+
29
+ Pixel.find(7).should be_nil
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,17 @@
1
+ module Neuron
2
+ module Client
3
+ describe Report do
4
+ describe "result" do
5
+ it "should call the expected methods and return the expected result" do
6
+ r = Report.allocate
7
+ c = stub(:connection)
8
+ r.stub(:connection).and_return(c)
9
+ r.should_receive(:id).and_return(7)
10
+ c.should_receive(:get).with('reports/7/result', :format => '').and_return('result_value')
11
+
12
+ r.result.should == 'result_value'
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,10 +1,10 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
  require 'yajl'
3
3
 
4
4
  module Neuron
5
5
  module Client
6
- module Model
7
- describe S3File do
6
+ describe S3File do
7
+ context "when connected to the admin server" do
8
8
  before(:all) do
9
9
  API.default_api.configure do |config|
10
10
  config.connection_type = :admin
@@ -23,6 +23,7 @@ module Neuron
23
23
  it "returns the created S3File" do
24
24
  attrs = {:bucket => 'test',
25
25
  :filename => "filename",
26
+ :filesize => nil,
26
27
  :purpose => 'RAW_EVENT_LOG'}
27
28
  s3file = S3File.create(attrs)
28
29
  s3file.id.should_not be_nil
@@ -38,14 +39,14 @@ module Neuron
38
39
  s3files = S3File.all
39
40
  s3files.should be_a(Array)
40
41
  s3files.length.should be > 0
41
- s3files.first.should be_a(Admin::S3File)
42
+ s3files.first.should be_a(S3File)
42
43
  end
43
44
  end
44
45
 
45
46
  describe "find" do
46
47
  it "returns a S3File" do
47
48
  s3file = S3File.find(@@created_id)
48
- s3file.should be_a(Admin::S3File)
49
+ s3file.should be_a(S3File)
49
50
  end
50
51
  end
51
52
 
@@ -0,0 +1,49 @@
1
+ module Neuron
2
+ module Client
3
+ class FakeZone
4
+ include ZoneCalculations
5
+ def initialize(ads, ad_links)
6
+ @ads = ads
7
+ @ad_links = ad_links
8
+ end
9
+ attr_reader :ad_links
10
+ def find_ad(ad_id)
11
+ @ads[ad_id]
12
+ end
13
+ end
14
+
15
+ class ZoneCalculationsSpecAd
16
+ def initialize(active, pressure)
17
+ @active = active
18
+ @pressure = pressure
19
+ end
20
+ attr_reader :pressure, :active
21
+ alias_method :active?, :active
22
+ end
23
+
24
+ describe ZoneCalculations do
25
+ describe ".calculate_ads_by_priority" do
26
+ it "should generate the expected result" do
27
+ ads = {
28
+ "0" => ZoneCalculationsSpecAd.new(false, 42.0),
29
+ "1" => ZoneCalculationsSpecAd.new(true, 11.1),
30
+ "2" => ZoneCalculationsSpecAd.new(true, 11.1),
31
+ "3" => ZoneCalculationsSpecAd.new(true, 22.2),
32
+ "4" => ZoneCalculationsSpecAd.new(true, 1000),
33
+ "5" => ZoneCalculationsSpecAd.new(true, 828282)
34
+ }
35
+ ad_links = {
36
+ "0" => {"priority" => 1, "weight" => 50},
37
+ "1" => {"priority" => 1, "weight" => 4},
38
+ "2" => {"priority" => 1, "weight" => 2},
39
+ "3" => {"priority" => 1, "weight" => 2},
40
+ "4" => {"priority" => 2, "weight" => 99.9}
41
+ }
42
+ zone = FakeZone.new(ads, ad_links)
43
+
44
+ zone.calculate_ads_by_priority.should == [[["1", 44.4], ["2", 22.2], ["3", 44.4]], [["4", 99900.0]]]
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end