routengn-client 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +34 -0
- data/Rakefile +1 -0
- data/lib/routengn_client/connection.rb +77 -0
- data/lib/routengn_client/exceptions.rb +8 -0
- data/lib/routengn_client/logging.rb +23 -0
- data/lib/routengn_client/middleware/routengn_response_middleware.rb +23 -0
- data/lib/routengn_client/model.rb +177 -0
- data/lib/routengn_client/models/account.rb +23 -0
- data/lib/routengn_client/models/allow_list.rb +38 -0
- data/lib/routengn_client/models/carrier.rb +14 -0
- data/lib/routengn_client/models/code.rb +32 -0
- data/lib/routengn_client/models/code_sheet.rb +11 -0
- data/lib/routengn_client/models/contact.rb +124 -0
- data/lib/routengn_client/models/end_point.rb +18 -0
- data/lib/routengn_client/models/inbound_end_point_group.rb +70 -0
- data/lib/routengn_client/models/inbound_rate.rb +13 -0
- data/lib/routengn_client/models/outbound_end_point_group.rb +51 -0
- data/lib/routengn_client/models/outbound_rate.rb +13 -0
- data/lib/routengn_client/models/rate_sheet.rb +13 -0
- data/lib/routengn_client/models/record.rb +231 -0
- data/lib/routengn_client/models/route.rb +42 -0
- data/lib/routengn_client/models/route_block.rb +7 -0
- data/lib/routengn_client/models/route_container.rb +18 -0
- data/lib/routengn_client/models/route_ordering_override.rb +7 -0
- data/lib/routengn_client/models/route_table.rb +30 -0
- data/lib/routengn_client/models/system_admin_account.rb +5 -0
- data/lib/routengn_client/models/uri_matcher.rb +72 -0
- data/lib/routengn_client/models/user.rb +20 -0
- data/lib/routengn_client/remote_model.rb +69 -0
- data/lib/routengn_client/request.rb +34 -0
- data/lib/routengn_client/response.rb +108 -0
- data/lib/routengn_client/utils.rb +20 -0
- data/lib/routengn_client/version.rb +3 -0
- data/lib/routengn_client.rb +72 -0
- data/routengn-client.gemspec +37 -0
- data/spec/lib/routengn_client/connection_spec.rb +44 -0
- data/spec/lib/routengn_client/logging_spec.rb +9 -0
- data/spec/lib/routengn_client/model_spec.rb +82 -0
- data/spec/lib/routengn_client/models/account_spec.rb +28 -0
- data/spec/lib/routengn_client/models/carrier_spec.rb +20 -0
- data/spec/lib/routengn_client/models/code_spec.rb +32 -0
- data/spec/lib/routengn_client/models/contact_spec.rb +57 -0
- data/spec/lib/routengn_client/models/inbound_end_point_group_spec.rb +33 -0
- data/spec/lib/routengn_client/models/inbound_rate_spec.rb +10 -0
- data/spec/lib/routengn_client/models/outbound_end_point_group_spec.rb +52 -0
- data/spec/lib/routengn_client/models/outbound_rate_spec.rb +10 -0
- data/spec/lib/routengn_client/models/rate_sheet_spec.rb +0 -0
- data/spec/lib/routengn_client/models/record_spec.rb +59 -0
- data/spec/lib/routengn_client/models/route_container_spec.rb +10 -0
- data/spec/lib/routengn_client/models/route_spec.rb +228 -0
- data/spec/lib/routengn_client/models/route_table_spec.rb +87 -0
- data/spec/lib/routengn_client/remote_model_spec.rb +60 -0
- data/spec/lib/routengn_client/request_spec.rb +14 -0
- data/spec/lib/routengn_client/response_spec.rb +29 -0
- data/spec/lib/routengn_client_spec.rb +5 -0
- data/spec/spec_helper.rb +34 -0
- data/spec/support/blueprints.rb +157 -0
- metadata +351 -0
File without changes
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RouteNGNClient::Record do
|
4
|
+
|
5
|
+
let(:iepg1) {
|
6
|
+
InboundEndPointGroup.new({ "name"=>"IEPG 1",
|
7
|
+
"contact_template"=>"<sip:${ruri.dialcode}${ruri.user_params}${oepg.uri_user_params}@${oep.host}${oep.port}${ruri.params}${oepg.uri_params}>",
|
8
|
+
"multi_line_contacts"=>true,
|
9
|
+
"color_code"=>"#a4f379",
|
10
|
+
"route_on_type"=>"DN",
|
11
|
+
"min_percent_price_margin"=>nil,
|
12
|
+
"min_absolute_price_margin"=>nil,
|
13
|
+
"min_route_weight"=>nil,
|
14
|
+
"dialcode_expression"=>"([0-9]*)$",
|
15
|
+
"dialcode_prefix_expression"=>"^(.*D+)",
|
16
|
+
"ani_expression"=>"([0-9]*)$",
|
17
|
+
"ani_prefix_expression"=>"^(.*D+)",
|
18
|
+
"destination_billing_type"=>"DN",
|
19
|
+
"external_lrn_lookup_enabled"=>false,
|
20
|
+
"created_at"=>"2013-03-05T00:11:29Z",
|
21
|
+
"updated_at"=>"2013-03-05T00:35:24Z",
|
22
|
+
"id"=>"513538316f1cc9a140000010",
|
23
|
+
"carrier_id"=>"513538316f1cc9a140000011",
|
24
|
+
"primary_route_table_id"=>"513538666f1cc9a14000001b",
|
25
|
+
"secondary_route_table_id"=>"",
|
26
|
+
"allow_list" => {"id"=>"513538316f1cc9a14000000e",
|
27
|
+
"uri_matchers" => [{"header"=>"request",
|
28
|
+
"prefix"=>"",
|
29
|
+
"user_params"=>"tgrp=foo",
|
30
|
+
"uri_params"=>"",
|
31
|
+
"created_at"=>"2013-03-05T00:11:29Z",
|
32
|
+
"updated_at"=>"2013-03-05T00:11:29Z",
|
33
|
+
"id"=>"513538316f1cc9a14000000f"}]},
|
34
|
+
"end_points"=> [{"end_point"=> {"host"=>"127.0.0.1",
|
35
|
+
"port"=>5060,
|
36
|
+
"priority"=>nil,
|
37
|
+
"created_at"=>nil,
|
38
|
+
"updated_at"=>nil,
|
39
|
+
"id"=>"51353dcc6f1cc9f910000006"}}]
|
40
|
+
})
|
41
|
+
}
|
42
|
+
|
43
|
+
it "can be instanstiated" do
|
44
|
+
r = Record.new
|
45
|
+
r.should be_an_instance_of(Record)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "can be json serialized" do
|
49
|
+
r = Record.new
|
50
|
+
r.set_inbound_end_point_group iepg1
|
51
|
+
r.inbound_end_point_group.should be_an_instance_of(InboundEndPointGroup)
|
52
|
+
j = r.to_json
|
53
|
+
j.should be_an_instance_of(String)
|
54
|
+
r2 = Record.from_json j
|
55
|
+
r2.should be_an_instance_of(Record)
|
56
|
+
r2.inbound_end_point_group.should be_an_instance_of(InboundEndPointGroup)
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
@@ -0,0 +1,228 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RouteNGNClient::Route do
|
4
|
+
|
5
|
+
before do
|
6
|
+
RouteNGNClient.connect(:uri => 'http://127.0.0.1')
|
7
|
+
end
|
8
|
+
|
9
|
+
let(:iepg1) {
|
10
|
+
InboundEndPointGroup.new({ "name"=>"IEPG 1",
|
11
|
+
"contact_template"=>"<sip:${ruri.dialcode}${ruri.user_params}${oepg.uri_user_params}@${oep.host}${oep.port}${ruri.params}${oepg.uri_params}>",
|
12
|
+
"multi_line_contacts"=>true,
|
13
|
+
"color_code"=>"#a4f379",
|
14
|
+
"route_on_type"=>"DN",
|
15
|
+
"min_percent_price_margin"=>nil,
|
16
|
+
"min_absolute_price_margin"=>nil,
|
17
|
+
"min_route_weight"=>nil,
|
18
|
+
"dialcode_expression"=>"([0-9]*)$",
|
19
|
+
"dialcode_prefix_expression"=>"^(.*D+)",
|
20
|
+
"ani_expression"=>"([0-9]*)$",
|
21
|
+
"ani_prefix_expression"=>"^(.*D+)",
|
22
|
+
"destination_billing_type"=>"DN",
|
23
|
+
"external_lrn_lookup_enabled"=>false,
|
24
|
+
"created_at"=>"2013-03-05T00:11:29Z",
|
25
|
+
"updated_at"=>"2013-03-05T00:35:24Z",
|
26
|
+
"id"=>"513538316f1cc9a140000010",
|
27
|
+
"carrier_id"=>"513538316f1cc9a140000011",
|
28
|
+
"primary_route_table_id"=>"513538666f1cc9a14000001b",
|
29
|
+
"secondary_route_table_id"=>"",
|
30
|
+
"allow_list" => {"id"=>"513538316f1cc9a14000000e",
|
31
|
+
"uri_matchers" => [{"header"=>"request",
|
32
|
+
"prefix"=>"",
|
33
|
+
"user_params"=>"tgrp=foo",
|
34
|
+
"uri_params"=>"",
|
35
|
+
"created_at"=>"2013-03-05T00:11:29Z",
|
36
|
+
"updated_at"=>"2013-03-05T00:11:29Z",
|
37
|
+
"id"=>"513538316f1cc9a14000000f"}]},
|
38
|
+
"end_points"=> [{"end_point"=> {"host"=>"127.0.0.1",
|
39
|
+
"port"=>5060,
|
40
|
+
"priority"=>nil,
|
41
|
+
"created_at"=>nil,
|
42
|
+
"updated_at"=>nil,
|
43
|
+
"id"=>"51353dcc6f1cc9f910000006"}}]
|
44
|
+
})
|
45
|
+
}
|
46
|
+
|
47
|
+
let(:oepg1) {
|
48
|
+
OutboundEndPointGroup.new({
|
49
|
+
"id"=>"513538546f1cc9a140000016",
|
50
|
+
"carrier_id"=>"513538546f1cc9a140000017",
|
51
|
+
"color_code"=>"#f379de",
|
52
|
+
"created_at"=>"2013-03-05 00:12:04 UTC",
|
53
|
+
"default_route_weight"=>nil,
|
54
|
+
"destination_billing_type"=>"DN",
|
55
|
+
"dialcode_expression"=>"([0-9]*)$",
|
56
|
+
"dialcode_template"=>"${dialcode_match}",
|
57
|
+
"end_points"=>
|
58
|
+
[{"_id"=>"513538546f1cc9a140000018",
|
59
|
+
"port"=>5060,
|
60
|
+
"host"=>"1.1.1.1",
|
61
|
+
"priority"=>nil}],
|
62
|
+
"max_contact_end_points"=>nil,
|
63
|
+
"name"=>"OEPG 1",
|
64
|
+
"rate_link_types"=>["dialcode"],
|
65
|
+
"route_table_ids"=>["513538666f1cc9a14000001b"],
|
66
|
+
"updated_at"=>"2013-03-05 00:12:04 UTC",
|
67
|
+
"uri_params"=>"",
|
68
|
+
"uri_params_blacklist"=>[],
|
69
|
+
"uri_user_params"=>"abc=123",
|
70
|
+
"uri_user_params_blacklist"=>[]
|
71
|
+
})
|
72
|
+
}
|
73
|
+
|
74
|
+
let(:outbound_rate1) {
|
75
|
+
OutboundRate.new({
|
76
|
+
"id"=>"51353a256f1cc98978000007",
|
77
|
+
"price"=>0.572,
|
78
|
+
"type"=>"inter",
|
79
|
+
"effective_at"=>"2013-03-05 00:12:37 UTC",
|
80
|
+
"created_at"=>"2013-03-05 00:19:49 UTC",
|
81
|
+
"updated_at"=>"2013-03-05 00:19:49 UTC",
|
82
|
+
"line_number"=>1,
|
83
|
+
"dialcode"=>"3217689",
|
84
|
+
"account_id"=>"5135354e6f1cc9a140000004",
|
85
|
+
"rate_sheet_id"=>"5135388c6f1cc9a14000001f",
|
86
|
+
"outbound_end_point_group_id"=>"513538546f1cc9a140000016"
|
87
|
+
})
|
88
|
+
}
|
89
|
+
|
90
|
+
let(:oepg2) {
|
91
|
+
OutboundEndPointGroup.new({
|
92
|
+
"id"=>"513538546f1cc9a140000028",
|
93
|
+
"carrier_id"=>"513538546f1cc9a140000017",
|
94
|
+
"color_code"=>"#f379de",
|
95
|
+
"created_at"=>"2013-03-05 00:12:04 UTC",
|
96
|
+
"default_route_weight"=>nil,
|
97
|
+
"destination_billing_type"=>"DN",
|
98
|
+
"dialcode_expression"=>"([0-9]*)$",
|
99
|
+
"dialcode_template"=>"${dialcode_match}",
|
100
|
+
"end_points"=>
|
101
|
+
[{"_id"=>"513538546f1cc9a140000019",
|
102
|
+
"port"=>5060,
|
103
|
+
"host"=>"2.2.2.2",
|
104
|
+
"priority"=>nil}],
|
105
|
+
"max_contact_end_points"=>nil,
|
106
|
+
"name"=>"OEPG 1",
|
107
|
+
"rate_link_types"=>["dialcode"],
|
108
|
+
"route_table_ids"=>["513538666f1cc9a14000001b"],
|
109
|
+
"updated_at"=>"2013-03-05 00:12:04 UTC",
|
110
|
+
"uri_params"=>"",
|
111
|
+
"uri_params_blacklist"=>[],
|
112
|
+
"uri_user_params"=>"",
|
113
|
+
"uri_user_params_blacklist"=>[]
|
114
|
+
})
|
115
|
+
}
|
116
|
+
|
117
|
+
let(:outbound_rate2) {
|
118
|
+
OutboundRate.new({
|
119
|
+
"id"=>"51353a256f1cc98973234320000f",
|
120
|
+
"price"=>0.9,
|
121
|
+
"type"=>"inter",
|
122
|
+
"effective_at"=>"2013-03-05 00:12:37 UTC",
|
123
|
+
"created_at"=>"2013-03-05 00:19:49 UTC",
|
124
|
+
"updated_at"=>"2013-03-05 00:19:49 UTC",
|
125
|
+
"line_number"=>1,
|
126
|
+
"dialcode"=>"3217689",
|
127
|
+
"account_id"=>"5135354e6f1cc9a140000004",
|
128
|
+
"rate_sheet_id"=>"5135388c6f1cc9a14000001f",
|
129
|
+
"outbound_end_point_group_id"=>"513538546f1cc9a140000028"
|
130
|
+
})
|
131
|
+
}
|
132
|
+
|
133
|
+
it "can be instantiated" do
|
134
|
+
Route.new.should be_an_instance_of(Route)
|
135
|
+
end
|
136
|
+
|
137
|
+
it "can return contacts" do
|
138
|
+
route = Route.new(:outbound_rate => outbound_rate1, :outbound_end_point_group => oepg1)
|
139
|
+
sip_request = RSIP::Message.parse(INVITE)
|
140
|
+
a = route.contacts
|
141
|
+
a.should be_an_instance_of(Array)
|
142
|
+
a.length.should == 1
|
143
|
+
c = a.first
|
144
|
+
c.should be_an_instance_of(Contact)
|
145
|
+
aor = c.build_aor(sip_request, iepg1)
|
146
|
+
aor.should == '<sip:50246380762;abc=123@1.1.1.1:5060;otg=3;npdi=yes;rn=2123334545>'
|
147
|
+
end
|
148
|
+
|
149
|
+
it "can build contacts with inbound host and inbound port" do
|
150
|
+
iepg2 = iepg1.dup
|
151
|
+
iepg2.attributes.contact_template = "<sip:${ruri.dialcode}${ruri.user_params}${oepg.uri_user_params}@${iep.host}${iep.port}${ruri.params}${oepg.uri_params}>"
|
152
|
+
route = Route.new(:outbound_rate => outbound_rate1, :outbound_end_point_group => oepg1)
|
153
|
+
sip_request = RSIP::Message.parse(INVITE)
|
154
|
+
a = route.contacts
|
155
|
+
a.should be_an_instance_of(Array)
|
156
|
+
a.length.should == 1
|
157
|
+
c = a.first
|
158
|
+
c.should be_an_instance_of(Contact)
|
159
|
+
aor = c.build_aor(sip_request, iepg1, :inbound_end_point_host => '2.2.2.2', :inbound_end_point_port => 5060)
|
160
|
+
aor.should == '<sip:50246380762;abc=123@2.2.2.2:5060;otg=3;npdi=yes;rn=2123334545>'
|
161
|
+
end
|
162
|
+
|
163
|
+
it "can build contacts with outbound rate" do
|
164
|
+
iepg2 = iepg1.dup
|
165
|
+
iepg2.attributes.contact_template = "<sip:${ruri.dialcode}${ruri.user_params}${oepg.uri_user_params}@${iep.host}${iep.port}${ruri.params}${oepg.uri_params};or_price=${or.price}>"
|
166
|
+
route = Route.new(:outbound_rate => outbound_rate1, :outbound_end_point_group => oepg1)
|
167
|
+
sip_request = RSIP::Message.parse(INVITE)
|
168
|
+
a = route.contacts
|
169
|
+
a.should be_an_instance_of(Array)
|
170
|
+
a.length.should == 1
|
171
|
+
c = a.first
|
172
|
+
c.should be_an_instance_of(Contact)
|
173
|
+
aor = c.build_aor(sip_request, iepg1, :inbound_end_point_host => '2.2.2.2', :inbound_end_point_port => 5060)
|
174
|
+
aor.should == '<sip:50246380762;abc=123@2.2.2.2:5060;otg=3;npdi=yes;rn=2123334545;or_price=0.572>'
|
175
|
+
end
|
176
|
+
|
177
|
+
it "can build contacts with inbound rate" do
|
178
|
+
iepg2 = iepg1.dup
|
179
|
+
iepg2.attributes.contact_template = "<sip:${ruri.dialcode}${ruri.user_params}${oepg.uri_user_params}@${iep.host}${iep.port}${ruri.params}${oepg.uri_params};ir_price=${ir.price}>"
|
180
|
+
route = Route.new(:inbound_rate => outbound_rate1, :outbound_end_point_group => oepg1)
|
181
|
+
sip_request = RSIP::Message.parse(INVITE)
|
182
|
+
a = route.contacts
|
183
|
+
a.should be_an_instance_of(Array)
|
184
|
+
a.length.should == 1
|
185
|
+
c = a.first
|
186
|
+
c.should be_an_instance_of(Contact)
|
187
|
+
aor = c.build_aor(sip_request, iepg1, :inbound_end_point_host => '2.2.2.2', :inbound_end_point_port => 5060)
|
188
|
+
aor.should == '<sip:50246380762;abc=123@2.2.2.2:5060;otg=3;npdi=yes;rn=2123334545;ir_price=0.572>'
|
189
|
+
end
|
190
|
+
|
191
|
+
context "reactor not running" do
|
192
|
+
it "can build aors" do
|
193
|
+
route = Route.new(:outbound_rate => outbound_rate1, :outbound_end_point_group => oepg1)
|
194
|
+
sip_request = RSIP::Message.parse(INVITE)
|
195
|
+
r = route.build_aors(sip_request, IEPG1)
|
196
|
+
r.should be_an_instance_of(Array)
|
197
|
+
route.contacts.first.aor.should be_an_instance_of(String)
|
198
|
+
expect { aors2 = route.build_aors(sip_request, nil) }.to raise_error
|
199
|
+
end
|
200
|
+
|
201
|
+
it "can build multiple aors" do
|
202
|
+
route1 = Route.new(:outbound_rate => outbound_rate1, :outbound_end_point_group => oepg1)
|
203
|
+
route2 = Route.new(:outbound_rate => outbound_rate2, :outbound_end_point_group => oepg2)
|
204
|
+
sip_request = RSIP::Message.parse(INVITE)
|
205
|
+
aors1 = route1.build_aors(sip_request, IEPG1)
|
206
|
+
aors2 = route2.build_aors(sip_request, IEPG1)
|
207
|
+
aors1.should == ["<sip:50246380762;abc=123@1.1.1.1:5060;otg=3;npdi=yes;rn=2123334545>"]
|
208
|
+
aors2.should == ["<sip:50246380762@2.2.2.2:5060;otg=3;npdi=yes;rn=2123334545>"]
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
context "reactor running" do
|
213
|
+
it "can build aors" do
|
214
|
+
route = Route.new(:outbound_rate => outbound_rate1, :outbound_end_point_group => oepg1)
|
215
|
+
sip_request = RSIP::Message.parse(INVITE)
|
216
|
+
aors = nil
|
217
|
+
aors2 = nil
|
218
|
+
|
219
|
+
aors = route.build_aors(sip_request, IEPG1)
|
220
|
+
expect { aors2 = route.build_aors(sip_request, nil) }.to raise_error
|
221
|
+
|
222
|
+
aors.should be_an_instance_of(Array)
|
223
|
+
route.contacts.first.aor.should be_an_instance_of(String)
|
224
|
+
end
|
225
|
+
|
226
|
+
end
|
227
|
+
|
228
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RouteNGNClient::RouteTable do
|
4
|
+
|
5
|
+
before do
|
6
|
+
RouteNGNClient.connect(:uri => 'http://127.0.0.1')
|
7
|
+
# RouteTables
|
8
|
+
body = '{"total_count":1,"current_page":1,"per_page":25,"offset":0,"total_pages":1,"route_tables":[{"route_table":{"name":"Test","rate_types":["undefined","inter","intra","local"],"ordering_method":"lowest_price","max_route_depth":null,"created_at":"2013-03-05T00:12:22Z","updated_at":"2013-03-05T00:12:22Z","id":"513538666f1cc9a14000001b","account_id":"5135354e6f1cc9a140000004","outbound_end_point_group_ids":["513538546f1cc9a140000016"]}}]}'
|
9
|
+
stub_request(:get, /^http:\/\/127\.0\.0\.1\/metallic\/route_tables\.json.*/).to_return(:body => body,
|
10
|
+
:status => 200,
|
11
|
+
:headers => { 'Content-Type' => 'application/json; charset=utf-8' })
|
12
|
+
# RouteContainers
|
13
|
+
body = '{"route_containers":[{"route_container":{"route_table_id":"513538666f1cc9a14000001b","rate_type":"undefined","destination_code_id":"5135425c165c882a3efc0849","inbound_rate":{"dialcode":"6","lata":null,"ocn":null,"price":0.5,"type":"undefined","weight":null,"effective_at":"2013-03-21T22:43:18Z","ineffective_at":null,"line_number":null,"minimum_duration":null,"billing_increment":null,"min_percent_price_margin":null,"min_absolute_price_margin":null,"min_route_weight":null,"id":"514b8d076f1cc973bd0000c7","inbound_end_point_group_id":"513538316f1cc9a140000010","outbound_end_point_group_id":null,"rate_sheet_id":null},"routes":[{"route":{"outbound_end_point_group_id":"513538546f1cc9a140000016","outbound_rate":{"dialcode":"6076623","lata":null,"ocn":null,"price":0.958,"type":"undefined","weight":null,"effective_at":"2013-03-05T00:12:37Z","ineffective_at":null,"line_number":27319,"minimum_duration":null,"billing_increment":null,"min_percent_price_margin":null,"min_absolute_price_margin":null,"min_route_weight":null,"id":"51353a2e6f1cc98978006b45","inbound_end_point_group_id":null,"outbound_end_point_group_id":"513538546f1cc9a140000016","rate_sheet_id":"5135388c6f1cc9a14000001f"}}}]}}]}'
|
14
|
+
stub_request(:get, /^http:\/\/127\.0\.0\.1\/metallic\/route_tables\/513538666f1cc9a14000001b\/route_containers\.json.*/).to_return(:body => body,
|
15
|
+
:status => 200,
|
16
|
+
:headers => { 'Content-Type' => 'application/json; charset=utf-8' })
|
17
|
+
|
18
|
+
# OEPG
|
19
|
+
body = '{"outbound_end_point_group":{"id":"513538546f1cc9a140000016","carrier_id":"513538546f1cc9a140000017","color_code":"#f379de","created_at":"2013-03-05 00:12:04 UTC","default_route_weight":null,"destination_billing_type":"DN","dialcode_expression":"([0-9]*)$","dialcode_template":"${dialcode_match}","end_points":[{"_id":"513538546f1cc9a140000018","port":5060,"host":"1.1.1.1","priority":null}],"max_contact_end_points":null,"name":"OEPG 1","rate_link_types":["dialcode"],"route_table_ids":["513538666f1cc9a14000001b"],"updated_at":"2013-03-05 00:12:04 UTC","uri_params":"","uri_params_blacklist":[],"uri_user_params":"","uri_user_params_blacklist":[]}}'
|
20
|
+
stub_request(:get, /^http:\/\/127\.0\.0\.1\/metallic\/outbound_end_point_groups\/513538546f1cc9a140000016\.json.*/).to_return(:body => body,
|
21
|
+
:status => 200,
|
22
|
+
:headers => { 'Content-Type' => 'application/json; charset=utf-8' })
|
23
|
+
end
|
24
|
+
|
25
|
+
it "can be instanstiated" do
|
26
|
+
rt = RouteTable.new
|
27
|
+
rt.should be_an_instance_of(RouteTable)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "can get all via callback" do
|
31
|
+
route_tables = nil
|
32
|
+
|
33
|
+
RouteNGNClient::RouteTable.all({}, :account_id => 'foofoo') do |models|
|
34
|
+
route_tables = models
|
35
|
+
end
|
36
|
+
|
37
|
+
route_tables.length.should == 1
|
38
|
+
route_tables.first.should be_an_instance_of RouteNGNClient::RouteTable
|
39
|
+
end
|
40
|
+
|
41
|
+
it "can get all via fibers" do
|
42
|
+
route_tables = nil
|
43
|
+
|
44
|
+
route_tables = RouteNGNClient::RouteTable.all({}, :account_id => 'foofoo')
|
45
|
+
|
46
|
+
route_tables.length.should == 1
|
47
|
+
route_tables.first.should be_an_instance_of RouteNGNClient::RouteTable
|
48
|
+
end
|
49
|
+
|
50
|
+
it "can get route_containers" do
|
51
|
+
route_containers = nil
|
52
|
+
rc = nil
|
53
|
+
e_routes = nil
|
54
|
+
|
55
|
+
route_tables = RouteNGNClient::RouteTable.all({}, :account_id => 'foofoo')
|
56
|
+
|
57
|
+
route_table = route_tables.first
|
58
|
+
route_table.should be_an_instance_of RouteNGNClient::RouteTable
|
59
|
+
|
60
|
+
params = {}
|
61
|
+
params[:env] = { :account_id => 'foofoo' }
|
62
|
+
params[:destination_code_id] = '5135425c165c882a3efc0849'
|
63
|
+
params[:origination_code_id] = '5135425c165c882a3efc0849'
|
64
|
+
params[:destination_dialcode] = '6076623'
|
65
|
+
params[:origination_dialcode] = '6076623'
|
66
|
+
params[:inbound_end_point_group_id] = '513538316f1cc9a140000010'
|
67
|
+
params[:rate_type] = 'undefined'
|
68
|
+
|
69
|
+
route_table.route_containers(params) do |models|
|
70
|
+
route_containers = models
|
71
|
+
end
|
72
|
+
|
73
|
+
rc = route_containers.first
|
74
|
+
e_routes = rc.enhanced_routes
|
75
|
+
|
76
|
+
route_containers.length.should == 1
|
77
|
+
rc.should be_an_instance_of RouteNGNClient::RouteContainer
|
78
|
+
rc.routes.length.should == 1
|
79
|
+
rc.inbound_rate.should be_an_instance_of RouteNGNClient::InboundRate
|
80
|
+
e_routes.length.should == 1
|
81
|
+
route = e_routes.first
|
82
|
+
route.should be_an_instance_of RouteNGNClient::Route
|
83
|
+
route.inbound_rate.should be_an_instance_of RouteNGNClient::InboundRate
|
84
|
+
route.outbound_end_point_group.should be_an_instance_of RouteNGNClient::OutboundEndPointGroup
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RouteNGNClient::RemoteModel do
|
4
|
+
|
5
|
+
before do
|
6
|
+
RouteNGNClient.connect(:uri => 'http://127.0.0.1')
|
7
|
+
|
8
|
+
bodya = '{"total_count":1,"current_page":1,"per_page":200,"offset":0,"total_pages":1,"testas":[{"testa":{}}]}'
|
9
|
+
stub_request(:get, /^http:\/\/127\.0\.0\.1\/testas\.json.*/).to_return(:body => bodya,
|
10
|
+
:status => 200,
|
11
|
+
:headers => { 'Content-Type' => 'application/json; charset=utf-8' })
|
12
|
+
|
13
|
+
stub_request(:get, /^http:\/\/127\.0\.0\.1\/testa_with_acct\.json\?env%5Baccount_id%5D=abcd.*/).to_return(:body => bodya,
|
14
|
+
:status => 200,
|
15
|
+
:headers => { 'Content-Type' => 'application/json; charset=utf-8' })
|
16
|
+
|
17
|
+
bodyb = '{"testb":{}}'
|
18
|
+
stub_request(:get, /^http:\/\/127\.0\.0\.1\/testb\/1\.json.*/).to_return(:body => bodyb,
|
19
|
+
:status => 200,
|
20
|
+
:headers => { 'Content-Type' => 'application/json; charset=utf-8' })
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should create a new instance given valid attributes" do
|
24
|
+
m = RemoteModel.new
|
25
|
+
m.should be_an_instance_of(RemoteModel)
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '#set_resource_attributes' do
|
29
|
+
it "should set resource_attributes" do
|
30
|
+
rm = Class.new(RemoteModel)
|
31
|
+
rm.set_resource_attributes({:path_ext => '.foo'})
|
32
|
+
rm.path_ext.should == '.foo'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '#all' do
|
37
|
+
it "should return an Array instance" do
|
38
|
+
rm = Class.new(RemoteModel)
|
39
|
+
rm.set_resource_attributes(:path_base => 'testas', :collection_name => 'testas')
|
40
|
+
rm.all.should be_an_instance_of(Array)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should use :account_id in options" do
|
44
|
+
rm = Class.new(RemoteModel)
|
45
|
+
rm.set_resource_attributes(:path_base => 'testa_with_acct', :collection_name => 'testas')
|
46
|
+
models = rm.all({}, :account_id => 'abcd')
|
47
|
+
models.should be_an_instance_of(Array)
|
48
|
+
models.first.request_account_id.should == 'abcd'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe '#find' do
|
53
|
+
it "should return an RemoteModel instance" do
|
54
|
+
rm = Class.new(RemoteModel)
|
55
|
+
rm.set_resource_attributes(:path_base => 'testb', :collection_name => 'testb')
|
56
|
+
rm.find(1).should be_an_instance_of(rm)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RouteNGNClient::Response do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@env1 = { :status => 200,
|
7
|
+
:body => {
|
8
|
+
:total_count => 1,
|
9
|
+
:current_page => 1,
|
10
|
+
:per_page => 10,
|
11
|
+
:offset => 0,
|
12
|
+
:total_pages => 1
|
13
|
+
}
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should create a new instance given valid attributes" do
|
18
|
+
c = Response.new(nil, nil)
|
19
|
+
c.should be_an_instance_of(Response)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should have paging information" do
|
23
|
+
fr = OpenStruct.new(:env => @env1)
|
24
|
+
r = Response.new(nil, fr)
|
25
|
+
r.total_pages.should == 1
|
26
|
+
r.pages_left?.should == false
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
$:.push File.expand_path('../lib', __FILE__)
|
2
|
+
require 'bundler/setup'
|
3
|
+
require 'webmock/rspec'
|
4
|
+
require 'simplecov'
|
5
|
+
require 'rspec'
|
6
|
+
require 'ffaker'
|
7
|
+
require 'rsip'
|
8
|
+
require 'routengn_client'
|
9
|
+
|
10
|
+
include RouteNGNClient
|
11
|
+
|
12
|
+
SimpleCov.start do
|
13
|
+
add_filter 'spec'
|
14
|
+
end
|
15
|
+
|
16
|
+
RSpec.configure do |config|
|
17
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
18
|
+
config.run_all_when_everything_filtered = true
|
19
|
+
#config.filter_run :focus
|
20
|
+
|
21
|
+
# Use color in STDOUT
|
22
|
+
config.color_enabled = true
|
23
|
+
|
24
|
+
# Use color not only in STDOUT but also in pagers and files
|
25
|
+
config.tty = true
|
26
|
+
|
27
|
+
config.before(:suite) do
|
28
|
+
end
|
29
|
+
|
30
|
+
config.after(:suite) do
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each{|f| require f}
|