citygrid_api 0.0.5 → 0.0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.sass-cache/7a5a675d951455410512a59af5ab2d160bd1735c/test.scssc +0 -0
- data/Gemfile +10 -8
- data/Gemfile.lock +24 -9
- data/README +21 -0
- data/citygrid_api.gemspec +77 -17
- data/citygrid_api.yml.sample +33 -0
- data/config.ru +2 -0
- data/dashboard.rb +110 -0
- data/lib/citygrid/abstraction/collection.rb +1 -1
- data/lib/citygrid/abstraction/super_hash.rb +2 -0
- data/lib/citygrid/api/ad_center/account.rb +26 -0
- data/lib/citygrid/api/ad_center/account_manager.rb +8 -0
- data/lib/citygrid/api/ad_center/ad_group.rb +8 -0
- data/lib/citygrid/api/ad_center/ad_group_ad.rb +8 -0
- data/lib/citygrid/api/ad_center/ad_group_criterion.rb +8 -0
- data/lib/citygrid/api/ad_center/ad_group_geo.rb +8 -0
- data/lib/citygrid/api/ad_center/authentication.rb +20 -0
- data/lib/citygrid/api/ad_center/billing.rb +8 -0
- data/lib/citygrid/api/ad_center/budget.rb +9 -0
- data/lib/citygrid/api/ad_center/call_detail.rb +25 -0
- data/lib/citygrid/api/ad_center/campaign.rb +8 -0
- data/lib/citygrid/api/ad_center/category.rb +9 -0
- data/lib/citygrid/api/ad_center/geolocation.rb +9 -0
- data/lib/citygrid/api/ad_center/image.rb +30 -0
- data/lib/citygrid/api/ad_center/method_of_payment.rb +10 -0
- data/lib/citygrid/api/ad_center/performance.rb +17 -0
- data/lib/citygrid/api/ad_center/places.rb +8 -0
- data/lib/citygrid/api/ad_center/user.rb +8 -0
- data/lib/citygrid/api/ad_center.rb +20 -0
- data/lib/citygrid/api/content/offers.rb +14 -9
- data/lib/citygrid/api/content/places/detail.rb +5 -11
- data/lib/citygrid/api/content/places/search.rb +5 -11
- data/lib/citygrid/api/content/places.rb +30 -14
- data/lib/citygrid/api/content/reviews.rb +5 -10
- data/lib/citygrid/api/content.rb +12 -3
- data/lib/citygrid/api/response.rb +2 -2
- data/lib/citygrid/api.rb +190 -3
- data/lib/citygrid/details.rb +1 -1
- data/lib/citygrid/listing.rb +7 -2
- data/lib/citygrid/offers.rb +4 -0
- data/lib/citygrid/reviews.rb +4 -0
- data/lib/citygrid/search.rb +6 -0
- data/lib/citygrid.rb +117 -12
- data/lib/dashboard/sinatra_partial.rb +17 -0
- data/lib/dashboard/stored_reporter.rb +101 -0
- data/lib/dashboard/test_result.rb +8 -0
- data/lib/request_ext.rb +32 -0
- data/public/javascript/dashboard.js +5 -0
- data/test/api/ad_center/test_account.rb +120 -0
- data/test/api/ad_center/test_ad_group.rb +50 -0
- data/test/api/ad_center/test_ad_group_ad.rb +27 -0
- data/test/api/ad_center/test_ad_group_criterion.rb +37 -0
- data/test/api/ad_center/test_ad_group_geo.rb +19 -0
- data/test/api/ad_center/test_authentication.rb +22 -0
- data/test/api/ad_center/test_billing.rb +14 -0
- data/test/api/ad_center/test_budget.rb +13 -0
- data/test/api/ad_center/test_call_detail.rb +36 -0
- data/test/api/ad_center/test_campaign.rb +27 -0
- data/test/api/ad_center/test_category.rb +37 -0
- data/test/api/ad_center/test_geolocation.rb +19 -0
- data/test/api/ad_center/test_image.rb +17 -0
- data/test/api/ad_center/test_method_of_payment.rb +51 -0
- data/test/api/ad_center/test_places.rb +79 -0
- data/test/api/ad_center/test_reports.rb +37 -0
- data/test/api/content/test_offers.rb +28 -0
- data/test/api/content/test_places.rb +66 -0
- data/test/helper.rb +67 -14
- data/test/test_config.rb +11 -0
- data/test/test_details.rb +14 -5
- data/test/test_img.jpg +0 -0
- data/test/test_img_big.png +0 -0
- data/test/test_listing.rb +64 -64
- data/test/test_search.rb +21 -1
- data/test/test_super_array.rb +1 -1
- data/test/test_super_hash.rb +1 -1
- data/views/_context_result.haml +25 -0
- data/views/_request.haml +3 -0
- data/views/_test_result.haml +4 -0
- data/views/stylesheets/test.scss +53 -0
- data/views/test.haml +8 -0
- metadata +145 -114
- data/lib/citygrid/api/base.rb +0 -60
- data/test/test_citygrid.rb +0 -7
@@ -0,0 +1,101 @@
|
|
1
|
+
class StoredReporter < Riot::SilentReporter
|
2
|
+
class ContextResult
|
3
|
+
attr_accessor :desc, :children, :passes, :fails, :requests
|
4
|
+
|
5
|
+
def initialize context
|
6
|
+
@fails = []
|
7
|
+
@passes = []
|
8
|
+
@requests = []
|
9
|
+
@children = []
|
10
|
+
|
11
|
+
@desc = context.description
|
12
|
+
end
|
13
|
+
|
14
|
+
def fail fail
|
15
|
+
@fails << fail
|
16
|
+
end
|
17
|
+
|
18
|
+
def pass pass
|
19
|
+
@passes << pass
|
20
|
+
end
|
21
|
+
|
22
|
+
def passed?
|
23
|
+
return false unless fails.empty?
|
24
|
+
|
25
|
+
children.each do |c|
|
26
|
+
return false unless c.passed?
|
27
|
+
end
|
28
|
+
|
29
|
+
return true
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
class Fail
|
35
|
+
attr_accessor :desc, :result, :a, :b
|
36
|
+
|
37
|
+
def initialize desc, result, a = nil, b = nil
|
38
|
+
self.desc = desc
|
39
|
+
self.result = result
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
class Pass
|
44
|
+
attr_accessor :desc, :result
|
45
|
+
|
46
|
+
def initialize desc, result
|
47
|
+
self.desc = desc
|
48
|
+
self.result = result
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
attr_accessor :context_results
|
53
|
+
|
54
|
+
def initialize string_io
|
55
|
+
@string_io = string_io
|
56
|
+
|
57
|
+
# lookup hash for contexts to handle nesting
|
58
|
+
@contexts = {}
|
59
|
+
@context_results = []
|
60
|
+
super()
|
61
|
+
end
|
62
|
+
|
63
|
+
def context_finished
|
64
|
+
return unless @current_result
|
65
|
+
|
66
|
+
@current_result.requests = RequestTrap.trap.clone
|
67
|
+
RequestTrap.trap.clear
|
68
|
+
#
|
69
|
+
# str = @string_io.string
|
70
|
+
# # puts "flushing with #{str} inside #{@current_result.desc}"
|
71
|
+
# # @current_result.curls = str.split(/\n/).select{|x| x.index("curl") == 0} if @current_result
|
72
|
+
# @string_io.truncate 0
|
73
|
+
end
|
74
|
+
|
75
|
+
def describe_context context
|
76
|
+
context_finished
|
77
|
+
@current_result = ContextResult.new context
|
78
|
+
@contexts[context] = @current_result
|
79
|
+
|
80
|
+
if context.parent && @contexts[context.parent]
|
81
|
+
@contexts[context.parent].children << @current_result
|
82
|
+
else
|
83
|
+
# it's a top level result
|
84
|
+
@context_results << @current_result
|
85
|
+
end
|
86
|
+
|
87
|
+
super context
|
88
|
+
end
|
89
|
+
|
90
|
+
def pass *args
|
91
|
+
@current_result.pass Pass.new *args
|
92
|
+
end
|
93
|
+
|
94
|
+
def error *args
|
95
|
+
@current_result.fail Fail.new *args
|
96
|
+
end
|
97
|
+
|
98
|
+
def fail *args
|
99
|
+
@current_result.fail Fail.new *args
|
100
|
+
end
|
101
|
+
end
|
data/lib/request_ext.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
module HTTParty
|
2
|
+
class Request
|
3
|
+
|
4
|
+
def get_uri
|
5
|
+
if (self.respond_to?('last_uri') && last_uri)
|
6
|
+
return last_uri
|
7
|
+
else
|
8
|
+
return uri
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_json
|
13
|
+
{
|
14
|
+
"requestUrl" => get_uri,
|
15
|
+
"requestMethod" => http_method.to_s.split("::").last.upcase,
|
16
|
+
"requestBody" => send(:body) || "",
|
17
|
+
"headers" => options[:headers].to_a.flatten || []
|
18
|
+
}.to_json
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_curl
|
22
|
+
args = ["curl -X #{http_method.to_s.split("::").last.upcase}"]
|
23
|
+
args << "-d #{send(:body).to_json}" if self.send(:body)
|
24
|
+
|
25
|
+
args << "#{(options[:headers] || []).map{|k, v| "--header \"#{k}:#{v}\""}.join(" ")}" if options[:headers]
|
26
|
+
|
27
|
+
args << "\"#{get_uri}\""
|
28
|
+
|
29
|
+
return args.join(" ")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'helper'))
|
2
|
+
|
3
|
+
token = AuthToken.generate
|
4
|
+
context "Search for a user" do
|
5
|
+
context "by name" do
|
6
|
+
setup do
|
7
|
+
run_with_rescue do
|
8
|
+
CityGrid::API::AdCenter::Account.search(
|
9
|
+
:token => AuthToken.sales_coord,
|
10
|
+
:userName => '25-1'
|
11
|
+
)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
should("not be empty"){ !topic.empty? }
|
15
|
+
should("return message OK"){ topic.accountResources.first.response.message }.equals("OK")
|
16
|
+
should("return response code OK"){ topic.accountResources.first.response.code.to_i }.equals(200)
|
17
|
+
end
|
18
|
+
|
19
|
+
context "Search by id" do
|
20
|
+
setup do
|
21
|
+
run_with_rescue do
|
22
|
+
CityGrid::API::AdCenter::Account.search(
|
23
|
+
:token => AuthToken.sales_coord,
|
24
|
+
:id => 1250702
|
25
|
+
)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
should("not be empty"){ !topic.empty? }
|
29
|
+
should("return message OK"){ topic.accountResources.first.response.message }.equals("OK")
|
30
|
+
should("return response code OK"){ topic.accountResources.first.response.code.to_i }.equals(200)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
context "Search for account type" do
|
36
|
+
context "Search by id" do
|
37
|
+
setup do
|
38
|
+
run_with_rescue do
|
39
|
+
CityGrid::API::AdCenter::Account.account_type(
|
40
|
+
:token => token,
|
41
|
+
:id => 1250702
|
42
|
+
)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
should("not be empty"){ !topic.empty? }
|
46
|
+
should("return message OK"){ topic.response.message }.equals("OK")
|
47
|
+
should("return response code OK"){ topic.response.code.to_i }.equals(200)
|
48
|
+
should("return type s CYB code OK"){ topic.accountType }.equals("CYB")
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context "Import a cg account" do
|
53
|
+
setup do
|
54
|
+
run_with_rescue do
|
55
|
+
auth_token = CityGrid.login(
|
56
|
+
:username => 'GARYTEST',
|
57
|
+
:password => 'pppppp'
|
58
|
+
).authToken
|
59
|
+
|
60
|
+
CityGrid::API::AdCenter::Account.import_to_cg(
|
61
|
+
:token => auth_token,
|
62
|
+
"mutateOperationListResource" => [{
|
63
|
+
"operator" => "ADD",
|
64
|
+
"operand" => {
|
65
|
+
"firstName" => "nico-api",
|
66
|
+
"lastName" => "gomez-api",
|
67
|
+
"phone" => "9001111112",
|
68
|
+
"businessName" =>"businessProveApi",
|
69
|
+
"address1" =>"dir-api",
|
70
|
+
"city" =>"montevideo",
|
71
|
+
"state" =>"Montevideo",
|
72
|
+
"zipCode" =>"90069"
|
73
|
+
}
|
74
|
+
}]
|
75
|
+
)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
should("not be empty"){ !topic.empty? }
|
79
|
+
should("return message OK"){ topic.accountResources.first.response.message }.equals("OK")
|
80
|
+
should("return response code OK"){ topic.accountResources.first.response.code.to_i }.equals(200)
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
context "Creating an account" do
|
85
|
+
setup do
|
86
|
+
run_with_rescue do
|
87
|
+
CityGrid::API::AdCenter::Account.mutate(
|
88
|
+
:token => token,
|
89
|
+
"mutateOperationListResource" => [{
|
90
|
+
"operator" => "ADD",
|
91
|
+
"operand" => {
|
92
|
+
"firstName" => "nico-api",
|
93
|
+
"lastName" => "gomez-api",
|
94
|
+
"phone" => "9001111112",
|
95
|
+
"email" => "goodtry#{rand(1000000)}@a.com",
|
96
|
+
"userName" => "goodtry#{rand(1000000)}",
|
97
|
+
"password" => "pppppp",
|
98
|
+
"businessName" => "businessProveApi",
|
99
|
+
"address1" => "dir-api",
|
100
|
+
"city" => "montevideo",
|
101
|
+
"state" => "Montevideo",
|
102
|
+
"zipCode" => "90069"
|
103
|
+
}
|
104
|
+
}]
|
105
|
+
)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
should("not be empty"){ !topic.empty? }
|
109
|
+
should("return message OK"){ topic.accountResources.first.response.message }.equals("OK")
|
110
|
+
should("return response code OK"){ topic.accountResources.first.response.code.to_i }.equals(200)
|
111
|
+
end
|
112
|
+
|
113
|
+
context "Logging in" do
|
114
|
+
setup do
|
115
|
+
run_with_rescue do
|
116
|
+
CityGrid.login(:username => "goodtry#{AuthToken.rand_number}", :password => 'pppppp')
|
117
|
+
end
|
118
|
+
end
|
119
|
+
should("return an authToken"){ topic.authToken }
|
120
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'helper'))
|
2
|
+
|
3
|
+
token = AuthToken.generate
|
4
|
+
|
5
|
+
context "Mutating Ad Group" do
|
6
|
+
setup do
|
7
|
+
run_with_rescue do
|
8
|
+
CityGrid::API::AdCenter::AdGroup.search(:token => token, :adGroupIds => 30966312)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
should("not be empty"){ !topic.empty? }
|
12
|
+
should("have campaignId"){ !topic.adGroups.first.campaignId.nil? }
|
13
|
+
end
|
14
|
+
|
15
|
+
context "Search Ad Group by Campaign Id" do
|
16
|
+
setup do
|
17
|
+
run_with_rescue do
|
18
|
+
CityGrid::API::AdCenter::AdGroup.search(:token => AuthToken.sales_coord, :campaignId => 2434702)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
should("not be empty"){ !topic.empty? }
|
22
|
+
should("have campaignId"){ !topic.adGroups.first.campaignId.nil? }
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
context "Mutating Ad Group" do
|
27
|
+
setup do
|
28
|
+
run_with_rescue do
|
29
|
+
CityGrid::API::AdCenter::AdGroup.mutate(
|
30
|
+
:token => token,
|
31
|
+
"mutateOperationListResource" => [{
|
32
|
+
"operator" => "ADD",
|
33
|
+
"operand" => {
|
34
|
+
"placeId" => "10728522",
|
35
|
+
"campaignId" => "2435332",
|
36
|
+
"contractTermMonths" =>"12",
|
37
|
+
"monthlyServiceFee" => "19.95",
|
38
|
+
"bids" => [{
|
39
|
+
"actionTargetName" => "map & directions",
|
40
|
+
"ppe" => "1.80"
|
41
|
+
}]
|
42
|
+
}
|
43
|
+
}]
|
44
|
+
)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
should("not be empty"){ !topic.empty? }
|
48
|
+
should("have campaignId"){ !topic.adGroups.first.campaignId.nil? }
|
49
|
+
end
|
50
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'helper'))
|
2
|
+
|
3
|
+
token = AuthToken.generate
|
4
|
+
|
5
|
+
context "Mutating AdGroup Ads" do
|
6
|
+
setup do
|
7
|
+
run_with_rescue do
|
8
|
+
CityGrid::API::AdCenter::AdGroupAd.mutate(
|
9
|
+
:token => token,
|
10
|
+
"mutateOperationListResource" => [{
|
11
|
+
"operator" => "ADD",
|
12
|
+
"operand" => {
|
13
|
+
"groupId" => "31919852",
|
14
|
+
"ad"=>{
|
15
|
+
"type" =>"PERFORMANCE_AD",
|
16
|
+
"tagline" => "ad_tagline",
|
17
|
+
"imageUrl" => "ad_photo.com"
|
18
|
+
}
|
19
|
+
}
|
20
|
+
}]
|
21
|
+
)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
should("not be empty"){ !topic.empty? }
|
25
|
+
should("return code OK"){ topic.adResources.first.response.code }.equals(200)
|
26
|
+
should("return message OK") { topic.adResources.first.response.message }.equals("OK")
|
27
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'helper'))
|
2
|
+
token = AuthToken.generate
|
3
|
+
context "AdGroupCriterion" do
|
4
|
+
context "search" do
|
5
|
+
setup do
|
6
|
+
run_with_rescue do
|
7
|
+
CityGrid::API::AdCenter::AdGroupCriterion.search(:token => AuthToken.sales_coord, :adGroupId => 6)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
should("not be empty?"){ !topic.empty? }
|
11
|
+
should("return code OK"){ topic.adGroupCriterionResources.first.response.code }.equals(200)
|
12
|
+
should("return message OK") { topic.adGroupCriterionResources.first.response.message }.equals("OK")
|
13
|
+
end
|
14
|
+
|
15
|
+
context "mutate" do
|
16
|
+
setup do
|
17
|
+
run_with_rescue do
|
18
|
+
CityGrid::API::AdCenter::AdGroupCriterion.mutate(
|
19
|
+
:token => token,
|
20
|
+
"mutateOperationListResource" => [{
|
21
|
+
"operator" => "ADD",
|
22
|
+
"operand" => {
|
23
|
+
"adGroupId" => "31919852",
|
24
|
+
"adGroupAdId" => "87768542",
|
25
|
+
"adGroupCriterionId" =>
|
26
|
+
"1722",
|
27
|
+
"type" => "2"
|
28
|
+
}
|
29
|
+
}]
|
30
|
+
)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
should("not be empty"){ !topic.empty? }
|
34
|
+
should("return code OK"){ topic.adGroupCriterionResources.first.response.code }.equals(200)
|
35
|
+
should("return message OK") { topic.adGroupCriterionResources.first.response.message }.equals("OK")
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'helper'))
|
2
|
+
|
3
|
+
context "Searching AdGroup Geo" do
|
4
|
+
setup do
|
5
|
+
run_with_rescue do
|
6
|
+
CityGrid::API::AdCenter::AdGroupGeo.search(
|
7
|
+
:token => AuthToken.sales_coord,
|
8
|
+
"adGroupId" => 78,
|
9
|
+
"streetAddress" => "200 Robertson Blvd",
|
10
|
+
"city" => "Beverly Hills",
|
11
|
+
"state" => "CA",
|
12
|
+
"zipCode" => "90211"
|
13
|
+
)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
should("not be empty"){ !topic.empty? }
|
17
|
+
should("have entries"){ topic.totalNumEntries > 0}
|
18
|
+
should("have adGroupGeos"){ !topic.adGroupGeos.empty? }
|
19
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'helper'))
|
2
|
+
|
3
|
+
context "Logging in" do
|
4
|
+
setup do
|
5
|
+
run_with_rescue do
|
6
|
+
CityGrid.login(:username => 'GARYTEST', :password => 'pppppp')
|
7
|
+
end
|
8
|
+
end
|
9
|
+
should("return an authToken"){ topic.authToken }
|
10
|
+
end
|
11
|
+
|
12
|
+
context "Valiate user" do
|
13
|
+
setup do
|
14
|
+
run_with_rescue do
|
15
|
+
token = AuthToken.kunimom
|
16
|
+
CityGrid::API::AdCenter::Authentication.validate :oauth_token => token
|
17
|
+
end
|
18
|
+
end
|
19
|
+
should("have id"){ topic.id }
|
20
|
+
should("have status"){ topic.status }
|
21
|
+
should("have display_name"){ topic.display_name }
|
22
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'helper'))
|
2
|
+
|
3
|
+
|
4
|
+
context "Search Billing by Campaign Id" do
|
5
|
+
setup do
|
6
|
+
run_with_rescue do
|
7
|
+
CityGrid::API::AdCenter::Billing.search(:token => AuthToken.sales_coord, :campaignId => 16631)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
should("not be empty"){ !topic.empty? }
|
11
|
+
should("have campaignId"){ !topic.campaignId.nil? }
|
12
|
+
end
|
13
|
+
|
14
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'helper'))
|
2
|
+
|
3
|
+
token = AuthToken.generate
|
4
|
+
|
5
|
+
context "Searching budgets" do
|
6
|
+
setup do
|
7
|
+
run_with_rescue do
|
8
|
+
CityGrid::API::AdCenter::Budget.search(:listingId => 833372, :token => token)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
should("not be empty"){ !topic.empty? }
|
12
|
+
should("have budget suggestions"){ topic.budgetSuggestionResources.length > 0 }
|
13
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'helper'))
|
2
|
+
|
3
|
+
token = AuthToken.sales_coord
|
4
|
+
|
5
|
+
context "Call Detail" do
|
6
|
+
context "by campaign" do
|
7
|
+
setup do
|
8
|
+
run_with_rescue do
|
9
|
+
CityGrid::API::AdCenter::CallDetail.get(
|
10
|
+
:campaign,
|
11
|
+
:campaignId => 786,
|
12
|
+
:period => 'last30Days',
|
13
|
+
:token => token
|
14
|
+
)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
should("not be empty"){ !topic.empty? }
|
18
|
+
should("have call detail resources"){
|
19
|
+
topic.callDetailsResources.length > 0
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
# context "note" do
|
24
|
+
# setup do
|
25
|
+
# run_with_rescue do
|
26
|
+
# CityGrid::API::AdCenter::CallDetail.note(
|
27
|
+
# :campaignId => 786,
|
28
|
+
# :period => 'last30Days',
|
29
|
+
# :token => token
|
30
|
+
# )
|
31
|
+
# end
|
32
|
+
# end
|
33
|
+
# should("not be empty"){ !topic.empty? }
|
34
|
+
# should("have user actions"){ topic.userActions.length > 0 }
|
35
|
+
# end
|
36
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'helper'))
|
2
|
+
|
3
|
+
token = AuthToken.generate
|
4
|
+
|
5
|
+
context "Adding a campaign" do
|
6
|
+
setup do
|
7
|
+
run_with_rescue do
|
8
|
+
CityGrid::API::AdCenter::Campaign.mutate(
|
9
|
+
:token => token,
|
10
|
+
:mutateOperationListResource => [{
|
11
|
+
:operator => "ADD",
|
12
|
+
:operand => {
|
13
|
+
:name => "PleaseWork6",
|
14
|
+
:startDate => (Date.today+1).to_s.gsub("-", ""),
|
15
|
+
:endDate => (Date.today + 10).to_s.gsub("-", ""),
|
16
|
+
:product => "PERFORMANCE",
|
17
|
+
:budget => {:amount => 30000},
|
18
|
+
:mopId => 387552
|
19
|
+
}
|
20
|
+
}]
|
21
|
+
)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
should("not be empty"){ !topic.empty? }
|
25
|
+
should("return code OK"){ topic.campaignResources.first.response.code }.equals(200)
|
26
|
+
should("return message OK") { topic.campaignResources.first.response.message }.equals("OK")
|
27
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'helper'))
|
2
|
+
|
3
|
+
token = AuthToken.generate
|
4
|
+
|
5
|
+
context "Searching categories" do
|
6
|
+
context "by listing id" do
|
7
|
+
setup do
|
8
|
+
run_with_rescue do
|
9
|
+
CityGrid::API::AdCenter::Category.search(
|
10
|
+
:token => token,
|
11
|
+
:listingId => 3680332,
|
12
|
+
:startIndex => 0,
|
13
|
+
:numberResults => 10
|
14
|
+
)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
should("not be empty"){ !topic.empty? }
|
18
|
+
should("respond with OK"){ topic.response.code == 200 }
|
19
|
+
should("have resources"){ !topic.resources.empty? }
|
20
|
+
end
|
21
|
+
|
22
|
+
context "by query" do
|
23
|
+
setup do
|
24
|
+
run_with_rescue do
|
25
|
+
CityGrid::API::AdCenter::Category.search(
|
26
|
+
:keywords => "pizza",
|
27
|
+
:startIndex => 0,
|
28
|
+
:numberResults => 10,
|
29
|
+
:token => token
|
30
|
+
)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
should("not be empty"){ !topic.empty? }
|
34
|
+
should("respond with OK"){ topic.response.code == 200 }
|
35
|
+
should("have resources"){ !topic.resources.empty? }
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'helper'))
|
2
|
+
|
3
|
+
context "Geo" do
|
4
|
+
setup do
|
5
|
+
run_with_rescue do
|
6
|
+
CityGrid::API::AdCenter::GeoLocation.search(
|
7
|
+
"streetAddress" => "720 3rd ave",
|
8
|
+
"city" => "seattle",
|
9
|
+
"state" => "wa",
|
10
|
+
"zipCode" => "98007",
|
11
|
+
:token => ""
|
12
|
+
)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
should("not be empty") { !topic.empty? }
|
17
|
+
should("return message OK") { topic.message }.equals("OK")
|
18
|
+
should("return code 200") { !topic.geocodeResponse.first.geoAccuracy.nil? }
|
19
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'helper'))
|
2
|
+
|
3
|
+
context "Upload an image" do
|
4
|
+
context "Add a preview" do
|
5
|
+
setup do
|
6
|
+
run_with_rescue do
|
7
|
+
image_path = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'test_img.jpg'))
|
8
|
+
resp = CityGrid::API::AdCenter::Image.upload(68, "a pic", "PROFILE_IMAGE", image_path, :token => AuthToken.sales_coord)
|
9
|
+
ap resp
|
10
|
+
resp
|
11
|
+
end
|
12
|
+
end
|
13
|
+
should("not be empty"){ !topic.empty? }
|
14
|
+
should("return message OK"){ topic.resources.first.response.message }.equals("OK")
|
15
|
+
should("return response code OK"){ topic.resources.first.response.code.to_i }.equals(200)
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'helper'))
|
2
|
+
|
3
|
+
token = AuthToken.generate
|
4
|
+
|
5
|
+
context "Method of Payment" do
|
6
|
+
context "search" do
|
7
|
+
setup do
|
8
|
+
run_with_rescue do
|
9
|
+
CityGrid::API::AdCenter::MethodOfPayment.search(:accountId => 111, :token => token)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
should("not be empty"){ !topic.empty?}
|
13
|
+
should("have MOP resources"){ !topic.mopResources.empty? }
|
14
|
+
end
|
15
|
+
|
16
|
+
# API not working here
|
17
|
+
context "mutate" do
|
18
|
+
setup do
|
19
|
+
run_with_rescue do
|
20
|
+
CityGrid::API::AdCenter::MethodOfPayment.mutate(
|
21
|
+
:token => token,
|
22
|
+
"mutateOperationListResource" => [{
|
23
|
+
"operator" => "ADD",
|
24
|
+
"operand" => {
|
25
|
+
"cardNumber" => "4112344112344113",
|
26
|
+
"expirationMonth" => 12,
|
27
|
+
"expirationYear" => 2012,
|
28
|
+
"nameOnAccount" => "Ara Tatous",
|
29
|
+
"cardType" => "Visa",
|
30
|
+
"state" => "NY" ,
|
31
|
+
"description" => "test addMOP",
|
32
|
+
"firstName" => "Ara",
|
33
|
+
"lastName" => "Tatous",
|
34
|
+
"phoneNumber" => "4252838811",
|
35
|
+
"address1" => "3131 Montrose Ave",
|
36
|
+
"address2" => "Apt. 9",
|
37
|
+
"city" => "LaCrescenta",
|
38
|
+
"postalCode" => "10016",
|
39
|
+
"accountId" => 2458392,
|
40
|
+
"securityCode" => "719",
|
41
|
+
"paymentType" => "Credit Card"
|
42
|
+
}
|
43
|
+
}]
|
44
|
+
)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
should("not be empty"){ !topic.empty? }
|
48
|
+
should("return code OK"){ topic.resources.first.response.code }.equals(200)
|
49
|
+
should("return message OK") { topic.resources.first.response.message }.equals("OK")
|
50
|
+
end
|
51
|
+
end
|