sipwizard 0.0.1 → 0.1.0
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.
- data/.gitignore +1 -0
- data/Gemfile +9 -3
- data/Guardfile +6 -5
- data/lib/sipwizard.rb +3 -0
- data/lib/sipwizard/account.rb +101 -0
- data/lib/sipwizard/binding.rb +40 -0
- data/lib/sipwizard/cdr.rb +59 -0
- data/lib/sipwizard/connection.rb +31 -7
- data/lib/sipwizard/customer.rb +81 -0
- data/lib/sipwizard/dial_plan.rb +91 -0
- data/lib/sipwizard/provider.rb +99 -0
- data/lib/sipwizard/provider_binding.rb +53 -0
- data/lib/sipwizard/rate.rb +81 -0
- data/lib/sipwizard/relation.rb +27 -0
- data/lib/sipwizard/version.rb +1 -1
- data/sipwizard.gemspec +6 -4
- data/spec/lib/sipwizard/account_spec.rb +80 -0
- data/spec/lib/sipwizard/binding_spec.rb +22 -0
- data/spec/lib/sipwizard/cdr_spec.rb +21 -0
- data/spec/lib/sipwizard/configuration_spec.rb +1 -1
- data/spec/lib/sipwizard/connection_spec.rb +19 -25
- data/spec/lib/sipwizard/customer_spec.rb +80 -0
- data/spec/lib/sipwizard/dial_plan_spec.rb +95 -0
- data/spec/lib/sipwizard/provider_binding_spec.rb +22 -0
- data/spec/lib/sipwizard/provider_spec.rb +107 -0
- data/spec/lib/sipwizard/rate_spec.rb +83 -0
- data/spec/lib/sipwizard_spec.rb +1 -1
- data/spec/spec.yml.sample +7 -0
- data/spec/spec_helper.rb +32 -9
- data/spec/vcr/sipsorcery/cdr/count.yml +70 -0
- data/spec/vcr/sipsorcery/cdr/get.yml +38 -0
- data/spec/vcr/sipsorcery/customeraccount/add.yml +73 -0
- data/spec/vcr/sipsorcery/customeraccount/count.yml +36 -0
- data/spec/vcr/sipsorcery/customeraccount/delete.yml +36 -0
- data/spec/vcr/sipsorcery/customeraccount/get.yml +36 -0
- data/spec/vcr/sipsorcery/customeraccount/update.yml +38 -0
- data/spec/vcr/sipsorcery/dialplan/add.yml +75 -0
- data/spec/vcr/sipsorcery/dialplan/copy.yml +36 -0
- data/spec/vcr/sipsorcery/dialplan/count.yml +36 -0
- data/spec/vcr/sipsorcery/dialplan/delete.yml +36 -0
- data/spec/vcr/sipsorcery/dialplan/get.yml +37 -0
- data/spec/vcr/sipsorcery/dialplan/update.yml +39 -0
- data/spec/vcr/sipsorcery/rate/add.yml +73 -0
- data/spec/vcr/sipsorcery/rate/count.yml +36 -0
- data/spec/vcr/sipsorcery/rate/delete.yml +36 -0
- data/spec/vcr/sipsorcery/rate/get.yml +36 -0
- data/spec/vcr/sipsorcery/rate/update.yml +38 -0
- data/spec/vcr/sipsorcery/sipaccount/add.yml +74 -0
- data/spec/vcr/sipsorcery/sipaccount/count.yml +36 -0
- data/spec/vcr/sipsorcery/sipaccount/delete.yml +69 -0
- data/spec/vcr/sipsorcery/sipaccount/get.yml +36 -0
- data/spec/vcr/sipsorcery/sipaccount/update.yml +37 -0
- data/spec/vcr/sipsorcery/sipaccountbinding/count.yml +36 -0
- data/spec/vcr/sipsorcery/sipaccountbinding/get.yml +36 -0
- data/spec/vcr/sipsorcery/sipprovider/add.yml +74 -0
- data/spec/vcr/sipsorcery/sipprovider/count.yml +36 -0
- data/spec/vcr/sipsorcery/sipprovider/delete.yml +36 -0
- data/spec/vcr/sipsorcery/sipprovider/get.yml +36 -0
- data/spec/vcr/sipsorcery/sipprovider/update.yml +38 -0
- data/spec/vcr/sipsorcery/sipproviderbinding/count.yml +36 -0
- data/spec/vcr/sipsorcery/sipproviderbinding/get.yml +69 -0
- metadata +129 -6
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sipwizard::Customer do
|
4
|
+
describe '.count(params={})' do
|
5
|
+
subject{ described_class.count }
|
6
|
+
it 'returns a result' do
|
7
|
+
expect(subject).to be_instance_of Fixnum
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '.create(params)' do
|
12
|
+
let(:params) do
|
13
|
+
{
|
14
|
+
account_name: "foo",
|
15
|
+
credit: 4.0
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
subject{ described_class.create(params) }
|
20
|
+
|
21
|
+
it 'creates a new account' do
|
22
|
+
response = subject
|
23
|
+
expect(response).not_to be_nil
|
24
|
+
expect(response).to be_instance_of String
|
25
|
+
expect(response).to match(/(?:\w|-)+/)
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'if the account_name already exists' do
|
29
|
+
it 'raise an argument error' do
|
30
|
+
expect do
|
31
|
+
described_class.create(params)
|
32
|
+
described_class.create({account_name: 'foo', credit: 3.0})
|
33
|
+
end.to raise_exception(ArgumentError)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe '.find(id)' do
|
39
|
+
let(:id){ settings['sensitive_data']['CUSTOMER_ID'] }
|
40
|
+
|
41
|
+
subject{ described_class.find(id) }
|
42
|
+
|
43
|
+
it 'returns an account' do
|
44
|
+
subject.should be_instance_of Sipwizard::Customer
|
45
|
+
subject.id.should eq id
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe '.save' do
|
50
|
+
let(:id){ settings['sensitive_data']['CUSTOMER_ID'] }
|
51
|
+
let(:customer){ described_class.find(id) }
|
52
|
+
|
53
|
+
before{ customer.should be_instance_of Sipwizard::Customer }
|
54
|
+
|
55
|
+
subject{ customer.save }
|
56
|
+
|
57
|
+
it 'updates the account' do
|
58
|
+
customer.pin = "1234"
|
59
|
+
response = subject
|
60
|
+
expect(response).not_to be_nil
|
61
|
+
expect(response).to be_instance_of String
|
62
|
+
expect(response).to match(/(?:\w|-)+/)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe 'delete' do
|
67
|
+
let(:id){ settings['sensitive_data']['CUSTOMER_ID'] }
|
68
|
+
|
69
|
+
let(:customer){ described_class.find(id) }
|
70
|
+
|
71
|
+
before{ customer.should be_instance_of Sipwizard::Customer }
|
72
|
+
|
73
|
+
subject{ customer.delete }
|
74
|
+
|
75
|
+
it 'delete the customer' do
|
76
|
+
response = subject
|
77
|
+
expect(response).to be_true
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sipwizard::DialPlan do
|
4
|
+
describe '.count(params={})' do
|
5
|
+
subject{ described_class.count }
|
6
|
+
it 'returns a result' do
|
7
|
+
expect(subject).to be_instance_of Fixnum
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '.find(id)' do
|
12
|
+
let(:id){ settings['sensitive_data']['DIALPLAN_ID'] }
|
13
|
+
|
14
|
+
subject{ described_class.find(id) }
|
15
|
+
|
16
|
+
it 'returns an account' do
|
17
|
+
subject.should be_instance_of Sipwizard::DialPlan
|
18
|
+
subject.id.should eq id
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '.create(params)' do
|
23
|
+
let(:params) do
|
24
|
+
{
|
25
|
+
dial_plan_name: "foo",
|
26
|
+
dial_plan_script: "sys.Dial(\"music@iptel.org\"); sys.Respond(404, \"No one home\")"
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
subject{ described_class.create(params) }
|
31
|
+
|
32
|
+
it 'creates a new dial_plan' do
|
33
|
+
response = subject
|
34
|
+
expect(response).not_to be_nil
|
35
|
+
expect(response).to be_instance_of String
|
36
|
+
expect(response).to match(/(?:\w|-)+/)
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'if the username already exists' do
|
40
|
+
it 'raise an argument error' do
|
41
|
+
expect do
|
42
|
+
described_class.create(params)
|
43
|
+
described_class.create({dial_plan_name: 'foo', dial_plan_script: 'bra'})
|
44
|
+
end.to raise_exception(ArgumentError)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe 'delete' do
|
50
|
+
let(:id){ settings['sensitive_data']['DIALPLAN_ID'] }
|
51
|
+
|
52
|
+
let(:dial_plan){ described_class.find(id) }
|
53
|
+
|
54
|
+
before{ dial_plan.should be_instance_of Sipwizard::DialPlan }
|
55
|
+
|
56
|
+
subject{ dial_plan.delete }
|
57
|
+
|
58
|
+
it 'delete the account' do
|
59
|
+
response = subject
|
60
|
+
expect(response).to be_true
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe 'copy' do
|
65
|
+
let(:id){ settings['sensitive_data']['DIALPLAN_ID'] }
|
66
|
+
|
67
|
+
let(:dial_plan){ described_class.find(id) }
|
68
|
+
|
69
|
+
before{ dial_plan.should be_instance_of Sipwizard::DialPlan }
|
70
|
+
|
71
|
+
subject{ dial_plan.copy }
|
72
|
+
|
73
|
+
it 'delete the account' do
|
74
|
+
response = subject
|
75
|
+
expect(response).to be_true
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe '.save' do
|
80
|
+
let(:id){ settings['sensitive_data']['DIALPLAN_ID'] }
|
81
|
+
let(:dial_plan){ described_class.find(id) }
|
82
|
+
|
83
|
+
before{ dial_plan.should be_instance_of Sipwizard::DialPlan }
|
84
|
+
|
85
|
+
subject{ dial_plan.save }
|
86
|
+
|
87
|
+
it 'updates the account' do
|
88
|
+
dial_plan.trace_email_address = "foo@bar.com"
|
89
|
+
response = subject
|
90
|
+
expect(response).not_to be_nil
|
91
|
+
expect(response).to be_instance_of String
|
92
|
+
expect(response).to match(/(?:\w|-)+/)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sipwizard::ProviderBinding do
|
4
|
+
describe '.count' do
|
5
|
+
subject{ described_class.count }
|
6
|
+
|
7
|
+
it 'returns a result' do
|
8
|
+
expect(subject).to be_instance_of Fixnum
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '.find(id)' do
|
13
|
+
let(:id){ settings['sensitive_data']['PROVIDER_BINDING_ID'] }
|
14
|
+
|
15
|
+
subject{ described_class.find(id) }
|
16
|
+
|
17
|
+
it 'returns an provider binding' do
|
18
|
+
subject.should be_instance_of Sipwizard::ProviderBinding
|
19
|
+
subject.id.should eq id
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sipwizard::Provider do
|
4
|
+
describe '.count' do
|
5
|
+
subject{ described_class.count }
|
6
|
+
|
7
|
+
it 'returns a result' do
|
8
|
+
expect(subject).to be_instance_of Fixnum
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '.find(id)' do
|
13
|
+
let(:id){ settings['sensitive_data']['PROVIDER_ID'] }
|
14
|
+
|
15
|
+
subject{ described_class.find(id) }
|
16
|
+
|
17
|
+
it 'returns an provider' do
|
18
|
+
subject.should be_instance_of Sipwizard::Provider
|
19
|
+
subject.id.should eq id
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '.create(params)' do
|
24
|
+
let(:params) do
|
25
|
+
{
|
26
|
+
provider_name: "foo",
|
27
|
+
provider_username: "bar",
|
28
|
+
provider_password: 'provider_password',
|
29
|
+
provider_server: 'provider_server',
|
30
|
+
provider_type: 'provider_type',
|
31
|
+
register_contact: 'register_contact'
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
subject{ described_class.create(params) }
|
36
|
+
|
37
|
+
it 'creates a new provider and return an id' do
|
38
|
+
response = subject
|
39
|
+
expect(response).not_to be_nil
|
40
|
+
expect(response).to be_instance_of String
|
41
|
+
expect(response).to match(/(?:\w|-)+/)
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'if the username already exists' do
|
45
|
+
it 'raise an argument error' do
|
46
|
+
expect do
|
47
|
+
described_class.create(params)
|
48
|
+
described_class.create(params.merge({provider_username: 'bar', provider_password: 'bra'}))
|
49
|
+
end.to raise_exception(ArgumentError)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '.save' do
|
55
|
+
let(:id){ settings['sensitive_data']['PROVIDER_ID'] }
|
56
|
+
let(:provider){ described_class.find(id) }
|
57
|
+
|
58
|
+
before{ provider.should be_instance_of Sipwizard::Provider }
|
59
|
+
|
60
|
+
subject{ provider.save }
|
61
|
+
|
62
|
+
it 'updates the provider' do
|
63
|
+
provider.provider_name = "barbar"
|
64
|
+
response = subject
|
65
|
+
expect(response).not_to be_nil
|
66
|
+
expect(response).to be_instance_of String
|
67
|
+
expect(response).to match(/(?:\w|-)+/)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe 'delete' do
|
72
|
+
let(:id){ settings['sensitive_data']['PROVIDER_ID'] }
|
73
|
+
|
74
|
+
let(:provider){ described_class.find(id) }
|
75
|
+
|
76
|
+
before{ provider.should be_instance_of Sipwizard::Provider }
|
77
|
+
|
78
|
+
subject{ provider.delete }
|
79
|
+
|
80
|
+
it 'delete the provider' do
|
81
|
+
response = subject
|
82
|
+
expect(response).to be_true
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe 'binding(cache=true)' do
|
87
|
+
let(:id){ settings['sensitive_data']['PROVIDER_ID'] }
|
88
|
+
|
89
|
+
let(:provider){ described_class.find(id) }
|
90
|
+
|
91
|
+
before{ provider.should be_instance_of Sipwizard::Provider }
|
92
|
+
|
93
|
+
subject{ provider.binding }
|
94
|
+
|
95
|
+
it 'return the binding of a provider' do
|
96
|
+
Sipwizard::ProviderBinding.should_receive(:find_by_provider_id).once.and_call_original
|
97
|
+
expect(subject).to be_instance_of Sipwizard::ProviderBinding
|
98
|
+
subject.provider_id.should eq provider.id
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'can skip the cache response' do
|
102
|
+
Sipwizard::ProviderBinding.should_receive(:find_by_provider_id).twice.and_call_original
|
103
|
+
expect(subject).to be_instance_of Sipwizard::ProviderBinding
|
104
|
+
provider.binding(false).provider_id.should eq provider.id
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sipwizard::Rate do
|
4
|
+
describe '.count(params={})' do
|
5
|
+
subject{ described_class.count }
|
6
|
+
it 'returns a result' do
|
7
|
+
expect(subject).to be_instance_of Fixnum
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '.create(params)' do
|
12
|
+
let(:params) do
|
13
|
+
{
|
14
|
+
description: "foo",
|
15
|
+
prefix: "777",
|
16
|
+
rate: 2.0,
|
17
|
+
setup_cost: 0,
|
18
|
+
increment_seconds: 1
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
22
|
+
subject{ described_class.create(params) }
|
23
|
+
|
24
|
+
it 'creates a new rate' do
|
25
|
+
response = subject
|
26
|
+
expect(response).not_to be_nil
|
27
|
+
expect(response).to be_instance_of String
|
28
|
+
expect(response).to match(/(?:\w|-)+/)
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'if the prefix already exists' do
|
32
|
+
it 'raise an argument error' do
|
33
|
+
expect do
|
34
|
+
described_class.create(params)
|
35
|
+
described_class.create({description: 'bar', prefix: "777", rate: 1.0, setup_cost: 0, increment_seconds: 1})
|
36
|
+
end.to raise_exception(ArgumentError)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe '.find(id)' do
|
42
|
+
let(:id){ settings['sensitive_data']['RATE_ID'] }
|
43
|
+
|
44
|
+
subject{ described_class.find(id) }
|
45
|
+
|
46
|
+
it 'returns an account' do
|
47
|
+
subject.should be_instance_of Sipwizard::Rate
|
48
|
+
subject.id.should eq id
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe '.save' do
|
53
|
+
let(:id){ settings['sensitive_data']['RATE_ID'] }
|
54
|
+
let(:rate){ described_class.find(id) }
|
55
|
+
|
56
|
+
before{ rate.should be_instance_of Sipwizard::Rate }
|
57
|
+
|
58
|
+
subject{ rate.save }
|
59
|
+
|
60
|
+
it 'updates the rate' do
|
61
|
+
rate.prefix = "1234"
|
62
|
+
response = subject
|
63
|
+
expect(response).not_to be_nil
|
64
|
+
expect(response).to be_instance_of String
|
65
|
+
expect(response).to match(/(?:\w|-)+/)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe 'delete' do
|
70
|
+
let(:id){ settings['sensitive_data']['RATE_ID'] }
|
71
|
+
|
72
|
+
let(:rate){ described_class.find(id) }
|
73
|
+
|
74
|
+
before{ rate.should be_instance_of Sipwizard::Rate }
|
75
|
+
|
76
|
+
subject{ rate.delete }
|
77
|
+
|
78
|
+
it 'delete the customer' do
|
79
|
+
response = subject
|
80
|
+
expect(response).to be_true
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
data/spec/lib/sipwizard_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -3,17 +3,40 @@ require 'bundler/setup'
|
|
3
3
|
Bundler.require(:test)
|
4
4
|
|
5
5
|
require_relative '../lib/sipwizard'
|
6
|
+
$LOAD_PATH << File.dirname(__FILE__)
|
6
7
|
|
7
|
-
|
8
|
-
|
8
|
+
Spork.prefork do
|
9
|
+
RSpec.configure do |config|
|
10
|
+
config.before :suite do
|
11
|
+
Sipwizard.configure do |sip_config|
|
12
|
+
sip_config.api_key = settings['sensitive_data']['SIPSORCERY_API_KEY']
|
13
|
+
end
|
14
|
+
end
|
9
15
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
end
|
16
|
+
def settings
|
17
|
+
@settings ||= YAML::load_file(File.join(File.dirname(File.expand_path(__FILE__)), 'spec.yml'))
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
VCR.configure do |config|
|
22
|
+
config.cassette_library_dir = "spec/vcr"
|
23
|
+
config.hook_into :faraday
|
24
|
+
config.default_cassette_options = { serialize_with: :psych , record: :new_episodes} #record: :new_episodes
|
25
|
+
|
26
|
+
settings['sensitive_data'].each do |k, v|
|
27
|
+
config.filter_sensitive_data("<#{k}>"){ |interactive| v }
|
28
|
+
end
|
29
|
+
|
30
|
+
config.around_http_request do |request|
|
31
|
+
case request.uri
|
32
|
+
when Regexp.new(Sipwizard::Connection::BASE_REST_API)
|
33
|
+
#endpoint_test = /rest/v0.1/provisioning.svc/cdr/count" => cdr/count
|
34
|
+
#endpoint_test = /rest/v0.1/accounting.svc/cdr/count" => cdr/count
|
35
|
+
endpoint_test = URI(request.uri).path[/\/rest\/v0.1\/(?:provisioning|accounting).svc\/([A-z|\/]*)/, 1]
|
36
|
+
vcr_options = { match_requests_on: [:method, :path, :body, :headers, :query], allow_playback_repeats: true }
|
14
37
|
|
15
|
-
|
16
|
-
|
17
|
-
|
38
|
+
VCR.use_cassette("sipsorcery/#{endpoint_test}", vcr_options, &request)
|
39
|
+
end
|
40
|
+
end
|
18
41
|
end
|
19
42
|
end
|