pokitdok-ruby 0.8.1 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Dockerfile-1.9 +2 -0
- data/Dockerfile-2.0 +2 -0
- data/Dockerfile-2.1 +2 -0
- data/Dockerfile-2.2 +2 -0
- data/Dockerfile-2.3 +2 -0
- data/Dockerfile-J9.1 +2 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +46 -8
- data/README.md +49 -10
- data/VERSION +1 -1
- data/examples/quick_start.rb +45 -0
- data/lib/OAuthApplicationClient.rb +2 -3
- data/lib/pokitdok.rb +259 -126
- data/pokitdok-ruby.gemspec +15 -7
- data/run_tests_in_docker.sh +6 -0
- data/spec/fixtures/test_claim.837 +1 -0
- data/spec/pokitdok_spec.rb +567 -631
- data/spec/spec_helper.rb +0 -1
- metadata +25 -17
- data/.travis.yml +0 -11
data/pokitdok-ruby.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: pokitdok-ruby 0.
|
5
|
+
# stub: pokitdok-ruby 0.9.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "pokitdok-ruby"
|
9
|
-
s.version = "0.
|
9
|
+
s.version = "0.9.0"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["PokitDok, Inc."]
|
14
|
-
s.date = "2017-
|
14
|
+
s.date = "2017-02-24"
|
15
15
|
s.description = "Gem for easy access to the PokitDok Platform APIs."
|
16
16
|
s.email = "platform@pokitdok.com"
|
17
17
|
s.extra_rdoc_files = [
|
@@ -20,7 +20,12 @@ Gem::Specification.new do |s|
|
|
20
20
|
]
|
21
21
|
s.files = [
|
22
22
|
".document",
|
23
|
-
".
|
23
|
+
"Dockerfile-1.9",
|
24
|
+
"Dockerfile-2.0",
|
25
|
+
"Dockerfile-2.1",
|
26
|
+
"Dockerfile-2.2",
|
27
|
+
"Dockerfile-2.3",
|
28
|
+
"Dockerfile-J9.1",
|
24
29
|
"Gemfile",
|
25
30
|
"Gemfile.lock",
|
26
31
|
"Guardfile",
|
@@ -28,9 +33,11 @@ Gem::Specification.new do |s|
|
|
28
33
|
"README.md",
|
29
34
|
"Rakefile",
|
30
35
|
"VERSION",
|
36
|
+
"examples/quick_start.rb",
|
31
37
|
"lib/OAuthApplicationClient.rb",
|
32
38
|
"lib/pokitdok.rb",
|
33
39
|
"pokitdok-ruby.gemspec",
|
40
|
+
"run_tests_in_docker.sh",
|
34
41
|
"spec/fixtures/acme_inc_supplemental_identifiers.834",
|
35
42
|
"spec/fixtures/authorizations.json",
|
36
43
|
"spec/fixtures/chiropractic_example.837",
|
@@ -40,6 +47,7 @@ Gem::Specification.new do |s|
|
|
40
47
|
"spec/fixtures/identity_match.json",
|
41
48
|
"spec/fixtures/referrals.json",
|
42
49
|
"spec/fixtures/sample.270",
|
50
|
+
"spec/fixtures/test_claim.837",
|
43
51
|
"spec/pokitdok_spec.rb",
|
44
52
|
"spec/spec_helper.rb"
|
45
53
|
]
|
@@ -54,6 +62,7 @@ Gem::Specification.new do |s|
|
|
54
62
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
55
63
|
s.add_runtime_dependency(%q<oauth2>, ["~> 1.0"])
|
56
64
|
s.add_runtime_dependency(%q<multipart-post>, ["~> 2.0"])
|
65
|
+
s.add_development_dependency(%q<dotenv-rails>, [">= 0"])
|
57
66
|
s.add_development_dependency(%q<bundler>, ["~> 1.0"])
|
58
67
|
s.add_development_dependency(%q<minitest>, ["~> 5.3"])
|
59
68
|
s.add_development_dependency(%q<mocha>, ["~> 1.0"])
|
@@ -63,7 +72,6 @@ Gem::Specification.new do |s|
|
|
63
72
|
s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
|
64
73
|
s.add_development_dependency(%q<ansi>, ["~> 1.4"])
|
65
74
|
s.add_development_dependency(%q<minitest-reporters>, ["~> 1.0"])
|
66
|
-
s.add_development_dependency(%q<webmock>, ["~> 1.17"])
|
67
75
|
s.add_development_dependency(%q<guard>, ["~> 2.6"])
|
68
76
|
s.add_development_dependency(%q<guard-minitest>, ["~> 2.2"])
|
69
77
|
s.add_development_dependency(%q<terminal-notifier>, [">= 0"])
|
@@ -73,6 +81,7 @@ Gem::Specification.new do |s|
|
|
73
81
|
else
|
74
82
|
s.add_dependency(%q<oauth2>, ["~> 1.0"])
|
75
83
|
s.add_dependency(%q<multipart-post>, ["~> 2.0"])
|
84
|
+
s.add_dependency(%q<dotenv-rails>, [">= 0"])
|
76
85
|
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
77
86
|
s.add_dependency(%q<minitest>, ["~> 5.3"])
|
78
87
|
s.add_dependency(%q<mocha>, ["~> 1.0"])
|
@@ -82,7 +91,6 @@ Gem::Specification.new do |s|
|
|
82
91
|
s.add_dependency(%q<jeweler>, ["~> 2.0"])
|
83
92
|
s.add_dependency(%q<ansi>, ["~> 1.4"])
|
84
93
|
s.add_dependency(%q<minitest-reporters>, ["~> 1.0"])
|
85
|
-
s.add_dependency(%q<webmock>, ["~> 1.17"])
|
86
94
|
s.add_dependency(%q<guard>, ["~> 2.6"])
|
87
95
|
s.add_dependency(%q<guard-minitest>, ["~> 2.2"])
|
88
96
|
s.add_dependency(%q<terminal-notifier>, [">= 0"])
|
@@ -93,6 +101,7 @@ Gem::Specification.new do |s|
|
|
93
101
|
else
|
94
102
|
s.add_dependency(%q<oauth2>, ["~> 1.0"])
|
95
103
|
s.add_dependency(%q<multipart-post>, ["~> 2.0"])
|
104
|
+
s.add_dependency(%q<dotenv-rails>, [">= 0"])
|
96
105
|
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
97
106
|
s.add_dependency(%q<minitest>, ["~> 5.3"])
|
98
107
|
s.add_dependency(%q<mocha>, ["~> 1.0"])
|
@@ -102,7 +111,6 @@ Gem::Specification.new do |s|
|
|
102
111
|
s.add_dependency(%q<jeweler>, ["~> 2.0"])
|
103
112
|
s.add_dependency(%q<ansi>, ["~> 1.4"])
|
104
113
|
s.add_dependency(%q<minitest-reporters>, ["~> 1.0"])
|
105
|
-
s.add_dependency(%q<webmock>, ["~> 1.17"])
|
106
114
|
s.add_dependency(%q<guard>, ["~> 2.6"])
|
107
115
|
s.add_dependency(%q<guard-minitest>, ["~> 2.2"])
|
108
116
|
s.add_dependency(%q<terminal-notifier>, [">= 0"])
|
@@ -0,0 +1 @@
|
|
1
|
+
ISA*00* *00* *01*9012345720000 *01*9088877320000 *151004*2235*U*00501*000000007*0*T*:~GS*HC*901234572000*908887732000*20151004*2235*7*X*005010X222~ST*837*0001~BHT*0019*00*2KYXDRE61GU20TFMBPA*20151004*2231*CH~NM1*41*2*Pokitdok, Inc.*****46*12345~PER*IC**EM*x12info@pokitdok.com~NM1*40*2*MOCKPAYER*****46*12345~HL*1**20*1~PRV*BI*PXC*207Q00000X~NM1*85*1*Aya-Ay*Jerome****XX*1467560003~N3*8311 WARREN H ABERNATHY HWY~N4*SPARTANBURG*SC*293010000~REF*EI*123456789~HL*2*1*22*0~SBR*P*18*******ZZ~NM1*IL*1*Doe*Jane****MI*W000000000~N3*123 N MAIN ST~N4*SPARTANBURG*SC*29301~DMG*D8*19700101*F~NM1*PR*2*MOCKPAYER*****PI*12345~CLM*0f17b46dd39a4bb0add152e99633adbc*60***11:B:1*Y*A*Y*I~HI*BK:4871~LX*1~SV1*HC:99213*60*UN*1.0***1~DTP*472*D8*20140601~SE*24*0001~GE*1*905~IEA*1*000000905~
|
data/spec/pokitdok_spec.rb
CHANGED
@@ -1,689 +1,625 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
|
+
require 'dotenv'
|
5
|
+
Dotenv.load
|
4
6
|
|
5
|
-
CLIENT_ID =
|
6
|
-
CLIENT_SECRET =
|
7
|
-
SCHEDULE_AUTH_CODE = 'KmCCkuYkSmPEf7AxaCIUApX1pUFedJx9CrDWPMD8'
|
8
|
-
BASE_URL = 'https://platform.pokitdok.com/v4/api'
|
9
|
-
MATCH_NETWORK_LOCATION = /(.*\.)?pokitdok\.com/
|
10
|
-
MATCH_OAUTH2_PATH = /[\/]oauth2[\/]token/
|
11
|
-
TEST_REQUEST_PATH = '/endpoint'
|
7
|
+
CLIENT_ID = ENV["POKITDOK_CLIENT_ID"]
|
8
|
+
CLIENT_SECRET = ENV["POKITDOK_CLIENT_SECRET"]
|
12
9
|
|
13
10
|
class PokitDokTest < MiniTest::Test
|
14
11
|
@@pokitdok = nil
|
15
12
|
@@current_request = nil
|
13
|
+
@identity_request = {
|
14
|
+
prefix: "Mr.",
|
15
|
+
first_name: "Oscar",
|
16
|
+
middle_name: "Harold",
|
17
|
+
last_name: "Whitmire",
|
18
|
+
suffix: "IV",
|
19
|
+
birth_date: "2000-05-01",
|
20
|
+
gender: "male",
|
21
|
+
email: "oscar@pokitdok.com",
|
22
|
+
phone: "555-555-5555",
|
23
|
+
secondary_phone: "333-333-4444",
|
24
|
+
address: {
|
25
|
+
address_lines: ["1400 Anyhoo Avenue"],
|
26
|
+
city: "Springfield",
|
27
|
+
state: "IL",
|
28
|
+
zipcode: "90210"
|
29
|
+
},
|
30
|
+
identifiers: [
|
31
|
+
{
|
32
|
+
provider_uuid: "1917f12b-fb6a-4016-93bc-adeb83204c83",
|
33
|
+
system_uuid: "967d207f-b024-41cc-8cac-89575a1f6fef",
|
34
|
+
value: "W90100-IG-88",
|
35
|
+
location: [-121.93831, 37.53901]
|
36
|
+
}
|
37
|
+
]
|
38
|
+
}
|
16
39
|
|
17
40
|
describe PokitDok do
|
18
41
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
{
|
23
|
-
:'User-Agent' => "#{@@pokitdok.user_agent}"
|
24
|
-
}
|
25
|
-
}
|
26
|
-
let(:json_headers) {
|
27
|
-
{
|
28
|
-
:'User-Agent' => "#{@@pokitdok.user_agent}",
|
29
|
-
:'Content-Type'=> 'application/json'
|
30
|
-
}
|
31
|
-
}
|
32
|
-
|
33
|
-
let(:snub_auth) {
|
34
|
-
stub_request(:post, /#{MATCH_NETWORK_LOCATION}#{MATCH_OAUTH2_PATH}/).
|
35
|
-
to_return(
|
36
|
-
:status => 200,
|
37
|
-
:body => '{
|
38
|
-
"access_token": "s8KYRJGTO0rWMy0zz1CCSCwsSesDyDlbNdZoRqVR",
|
39
|
-
"token_type": "bearer",
|
40
|
-
"expires": 1393350569,
|
41
|
-
"expires_in": 3600
|
42
|
-
}',
|
43
|
-
:headers => {
|
44
|
-
'Server'=> 'nginx',
|
45
|
-
'Date' => Time.now(),
|
46
|
-
'Content-type' => 'application/json;charset=UTF-8',
|
47
|
-
'Connection' => 'keep-alive',
|
48
|
-
'Pragma' => 'no-cache',
|
49
|
-
'Cache-Control' => 'no-store'
|
50
|
-
}).times(2)
|
51
|
-
}
|
52
|
-
|
53
|
-
before do
|
54
|
-
if @@pokitdok.nil?
|
55
|
-
snub_auth
|
56
|
-
|
57
|
-
@@pokitdok = PokitDok::PokitDok.new(CLIENT_ID, CLIENT_SECRET)
|
58
|
-
end
|
42
|
+
before do
|
43
|
+
if @@pokitdok.nil?
|
44
|
+
@@pokitdok = PokitDok::PokitDok.new(CLIENT_ID, CLIENT_SECRET)
|
59
45
|
end
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
end
|
46
|
+
end
|
47
|
+
#
|
48
|
+
# ******************************
|
49
|
+
# client set up tests
|
50
|
+
# ******************************
|
51
|
+
#
|
52
|
+
describe 'Test token reuse' do
|
53
|
+
it 'should work with existing token' do
|
54
|
+
pokitdok_for_token = PokitDok::PokitDok.new(CLIENT_ID, CLIENT_SECRET)
|
55
|
+
first_token = pokitdok_for_token.token
|
56
|
+
|
57
|
+
pokitdok_with_old_token = PokitDok::PokitDok.new(CLIENT_ID, CLIENT_SECRET, nil, nil, nil, nil, nil, token=first_token)
|
58
|
+
second_token = pokitdok_with_old_token.token
|
59
|
+
|
60
|
+
assert first_token == second_token
|
61
|
+
results = pokitdok_with_old_token.activities
|
62
|
+
refute_nil(results)
|
63
|
+
|
64
|
+
pokitdok_for_new_token = PokitDok::PokitDok.new(CLIENT_ID, CLIENT_SECRET)
|
65
|
+
third_token = pokitdok_for_new_token.token
|
66
|
+
assert (first_token != third_token) && (second_token != third_token)
|
82
67
|
end
|
68
|
+
end
|
83
69
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
70
|
+
describe 'Test Connection' do
|
71
|
+
it 'should instantiate the api_client' do
|
72
|
+
refute_nil(@@pokitdok)
|
73
|
+
assert @@pokitdok.user_agent.include? "pokitdok-ruby#"
|
88
74
|
end
|
75
|
+
end
|
89
76
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
body: '{ "string" : "" }'
|
117
|
-
}
|
118
|
-
})
|
119
|
-
|
120
|
-
@@pokitdok.request(TEST_REQUEST_PATH, 'PUT', nil, {param: 'value'})
|
121
|
-
json_headers.each do |key, value|
|
122
|
-
assert_equal(value, @@current_request.headers["#{key}"])
|
123
|
-
end
|
124
|
-
|
125
|
-
# NOTE: Currently this shows as an error in an IDE. I believe this is because it's
|
126
|
-
# a reserved property in Ruby
|
127
|
-
assert_equal('put', "#{@@current_request.method}")
|
128
|
-
end
|
129
|
-
it 'should test request get' do
|
130
|
-
stub_request(:get, MATCH_NETWORK_LOCATION).
|
131
|
-
to_return(lambda { |request|
|
132
|
-
@@current_request = request
|
133
|
-
{
|
134
|
-
status: 200,
|
135
|
-
body: '{ "string" : "" }'
|
136
|
-
}
|
137
|
-
})
|
138
|
-
|
139
|
-
@@pokitdok.request(TEST_REQUEST_PATH, 'GET', nil, {param: 'value'})
|
140
|
-
base_headers.each do |key, value|
|
141
|
-
assert_equal(value, @@current_request.headers["#{key}"])
|
142
|
-
end
|
143
|
-
|
144
|
-
# NOTE: Currently this shows as an error in an IDE. I believe this is because it's
|
145
|
-
# a reserved property in Ruby
|
146
|
-
assert_equal('get', "#{@@current_request.method}")
|
147
|
-
end
|
148
|
-
it 'should test request delete' do
|
149
|
-
stub_request(:delete, MATCH_NETWORK_LOCATION).
|
150
|
-
to_return(lambda { |request|
|
151
|
-
@@current_request = request
|
152
|
-
{
|
153
|
-
status: 200,
|
154
|
-
body: '{ "string" : "" }'
|
155
|
-
}
|
156
|
-
})
|
157
|
-
|
158
|
-
@@pokitdok.request(TEST_REQUEST_PATH, 'DELETE', nil, {param: 'value'})
|
159
|
-
base_headers.each do |key, value|
|
160
|
-
assert_equal(value, @@current_request.headers["#{key}"])
|
161
|
-
end
|
162
|
-
|
163
|
-
# NOTE: Currently this shows as an error in an IDE. I believe this is because it's
|
164
|
-
# a reserved property in Ruby
|
165
|
-
assert_equal('delete', "#{@@current_request.method}")
|
166
|
-
end
|
77
|
+
#
|
78
|
+
# ******************************
|
79
|
+
# error tests
|
80
|
+
# ******************************
|
81
|
+
#
|
82
|
+
describe 'Error Test: Missing Trading Partner ID' do
|
83
|
+
it 'make a call to eligibility without a Trading partner' do
|
84
|
+
@eligibility_query_2 = {
|
85
|
+
member: {
|
86
|
+
birth_date: '1970-01-01',
|
87
|
+
first_name: 'Jane',
|
88
|
+
last_name: 'Doe',
|
89
|
+
id: 'W000000000'
|
90
|
+
},
|
91
|
+
provider: {
|
92
|
+
first_name: 'JEROME',
|
93
|
+
last_name: 'AYA-AY',
|
94
|
+
npi: '1467560003'
|
95
|
+
},
|
96
|
+
service_types: ['health_benefit_plan_coverage'],
|
97
|
+
}
|
98
|
+
response = @@pokitdok.eligibility @eligibility_query_2
|
99
|
+
refute_nil(response["meta"].keys, msg="the response[meta] section is empty")
|
100
|
+
refute_nil(response["data"].keys, msg="the response[data] section is empty")
|
101
|
+
assert response["data"]["errors"]["query"].to_s.include? "Unable to find configuration for trading_partner_id: None, transaction_set_name: eligibility"
|
102
|
+
assert @@pokitdok.status_code == 400, "Status Code assertion failure. Tested for 400, Observed status code: #{@@pokitdok.status_code}"
|
167
103
|
end
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
it 'should expose the activities endpoint with an id parameter' do
|
179
|
-
stub_request(:get, MATCH_NETWORK_LOCATION).
|
180
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
181
|
-
|
182
|
-
@activities = @@pokitdok.activities(activity_id: 'activity_id')
|
183
|
-
refute_nil(@activities)
|
184
|
-
end
|
104
|
+
end
|
105
|
+
describe 'Validation Error Test: Malformed Request' do
|
106
|
+
it 'make a call to eligibility with bad data' do
|
107
|
+
@bad_request = "bad request"
|
108
|
+
response = @@pokitdok.eligibility @bad_request
|
109
|
+
refute_nil(response["meta"].keys, msg="the response[meta] section is empty")
|
110
|
+
refute_nil(response["data"].keys, msg="the response[data] section is empty")
|
111
|
+
assert response["data"]["errors"]["validation"].to_s.include? "This endpoint only accepts JSON requests of <type 'dict'>. Request provided was of <type 'unicode'>."
|
112
|
+
assert @@pokitdok.status_code == 422, "Status Code assertion failure. Tested for 422, Observed status code: #{@@pokitdok.status_code}"
|
185
113
|
end
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
114
|
+
end
|
115
|
+
describe 'Validation Error Test: Malformed Request' do
|
116
|
+
it 'make a call to eligibility with bad data' do
|
117
|
+
@bad_request = {
|
118
|
+
member: {
|
119
|
+
birth_date: '1970-01-01',
|
120
|
+
first_name: 'Jane',
|
121
|
+
last_name: 'Doe',
|
122
|
+
id: '1'
|
123
|
+
},
|
124
|
+
trading_partner_id: 'MOCKPAYER'
|
125
|
+
}
|
126
|
+
response = @@pokitdok.eligibility @bad_request
|
127
|
+
refute_nil(response["meta"].keys, msg="the response[meta] section is empty")
|
128
|
+
refute_nil(response["data"].keys, msg="the response[data] section is empty")
|
129
|
+
assert response["data"]["errors"]["validation"]["member"]["id"].to_s.include? "String value is too short."
|
130
|
+
assert @@pokitdok.status_code == 422, "Status Code assertion failure. Tested for 422, Observed status code: #{@@pokitdok.status_code}"
|
197
131
|
end
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
132
|
+
end
|
133
|
+
describe 'Validation Error Test: Malformed Request' do
|
134
|
+
it 'make a call to eligibility with bad data' do
|
135
|
+
@bad_request = {
|
136
|
+
member: {
|
137
|
+
birth_date: '1970-01-01',
|
138
|
+
first_name: 'Jane',
|
139
|
+
last_name: 'Doe',
|
140
|
+
id: '100000000000'
|
141
|
+
},
|
142
|
+
provider: {
|
143
|
+
first_name: 'JEROME',
|
144
|
+
last_name: 'AYA-AY',
|
145
|
+
npi: '2'
|
146
|
+
},
|
147
|
+
trading_partner_id: 'MOCKPAYER'
|
148
|
+
}
|
149
|
+
response = @@pokitdok.eligibility @bad_request
|
150
|
+
refute_nil(response["meta"].keys, msg="the response[meta] section is empty")
|
151
|
+
refute_nil(response["data"].keys, msg="the response[data] section is empty")
|
152
|
+
assert response["data"]["errors"]["validation"]["provider"]["npi"].to_s.include? "String value is too short."
|
153
|
+
assert @@pokitdok.status_code == 422, "Status Code assertion failure. Tested for 422, Observed status code: #{@@pokitdok.status_code}"
|
209
154
|
end
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
155
|
+
end
|
156
|
+
#
|
157
|
+
# ******************************
|
158
|
+
# get/post/put tests
|
159
|
+
# ******************************
|
160
|
+
#
|
161
|
+
describe 'test the POST method' do
|
162
|
+
it 'should make a real eligibility via the POST method' do
|
163
|
+
@eligibility_query = {
|
164
|
+
member: {
|
165
|
+
birth_date: '1970-01-01',
|
166
|
+
first_name: 'Jane',
|
167
|
+
last_name: 'Doe',
|
168
|
+
id: 'W000000000'
|
169
|
+
},
|
170
|
+
provider: {
|
171
|
+
first_name: 'JEROME',
|
172
|
+
last_name: 'AYA-AY',
|
173
|
+
npi: '1467560003'
|
174
|
+
},
|
175
|
+
service_types: ['health_benefit_plan_coverage'],
|
176
|
+
trading_partner_id: 'MOCKPAYER'
|
177
|
+
}
|
178
|
+
response = @@pokitdok.post('eligibility/', @eligibility_query)
|
179
|
+
refute_nil(response["meta"].keys, msg="the response[meta] section is empty")
|
180
|
+
refute_nil(response["data"].keys, msg="the response[data] section is empty")
|
181
|
+
assert @@pokitdok.status_code == 200, "Status Code assertion failure. Tested for 200, Observed status code: #{@@pokitdok.status_code}"
|
221
182
|
end
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
183
|
+
end
|
184
|
+
describe 'Live test of PUT, DELETE, CLAIMS, ACTIVITIES' do
|
185
|
+
it 'Exercise the workflow of submitting a and deleting a claim' do
|
186
|
+
# this claim body represents the minimal amount of data needed to submit a claim via the claims endpoint
|
187
|
+
@test_claim = {
|
188
|
+
transaction_code: "chargeable",
|
189
|
+
trading_partner_id: "MOCKPAYER",
|
190
|
+
billing_provider: {
|
191
|
+
taxonomy_code: "207Q00000X",
|
192
|
+
first_name: "Jerome",
|
193
|
+
last_name: "Aya-Ay",
|
194
|
+
npi: "1467560003",
|
195
|
+
address: {
|
196
|
+
address_lines: [
|
197
|
+
"8311 WARREN H ABERNATHY HWY"
|
198
|
+
],
|
199
|
+
city: "SPARTANBURG",
|
200
|
+
state: "SC",
|
201
|
+
zipcode: "29301"
|
202
|
+
},
|
203
|
+
tax_id: "123456789"
|
204
|
+
},
|
205
|
+
subscriber: {
|
206
|
+
first_name: "Jane",
|
207
|
+
last_name: "Doe",
|
208
|
+
member_id: "W000000000",
|
209
|
+
address: {
|
210
|
+
address_lines: ["123 N MAIN ST"],
|
211
|
+
city: "SPARTANBURG",
|
212
|
+
state: "SC",
|
213
|
+
zipcode: "29301"
|
214
|
+
},
|
215
|
+
birth_date: "1970-01-25",
|
216
|
+
gender: "female"
|
217
|
+
},
|
218
|
+
claim: {
|
219
|
+
total_charge_amount: 60.0,
|
220
|
+
service_lines: [
|
221
|
+
{
|
222
|
+
procedure_code: "99213",
|
223
|
+
charge_amount: 60.0,
|
224
|
+
unit_count: 1.0,
|
225
|
+
diagnosis_codes: [
|
226
|
+
"J10.1"
|
227
|
+
],
|
228
|
+
service_date: "2016-01-25"
|
229
|
+
}
|
230
|
+
]
|
231
|
+
}
|
232
|
+
}
|
233
|
+
# assert success of the claim post
|
234
|
+
claim_response = @@pokitdok.claims(@test_claim)
|
235
|
+
refute_nil(claim_response["meta"].keys, msg="the response[meta] section is empty")
|
236
|
+
refute_nil(claim_response["data"].keys, msg="the response[data] section is empty")
|
237
|
+
assert @@pokitdok.status_code == 200, "Status Code assertion failure. Tested for 200 on use of claims endpoint, Observed status code: #{@@pokitdok.status_code}"
|
238
|
+
|
239
|
+
# use the activities endpoint via a GET to analyze the current status of this claim
|
240
|
+
activity_id = claim_response["meta"]["activity_id"]
|
241
|
+
activity_url = "/activities/#{activity_id}"
|
242
|
+
get_response = @@pokitdok.get(activity_url, data={})
|
243
|
+
refute_nil(get_response["data"]["history"], msg="the response[data][history] section is empty")
|
244
|
+
assert @@pokitdok.status_code == 200, "Status Code assertion failure. Tested for 200 on the first get to activities, Observed status code: #{@@pokitdok.status_code}"
|
245
|
+
|
246
|
+
# look in the history to see if it has transitioned from state "init" to "canceled"
|
247
|
+
history = get_response["data"]["history"]
|
248
|
+
if history.length != 1
|
249
|
+
# this means that the claim is been picked up and is processing within the internal pokitdok system
|
250
|
+
# we aim to test out the put functionality by deleting the claim,
|
251
|
+
# so we need to resubmit a claim to get one that is going to stay in the INIT stage
|
252
|
+
claim_response = @@pokitdok.claims(@test_claim)
|
253
|
+
refute_nil(claim_response["meta"].keys, msg="the response[meta] section is empty")
|
254
|
+
refute_nil(claim_response["data"].keys, msg="the response[data] section is empty")
|
255
|
+
assert @@pokitdok.status_code == 200, "Status Code assertion failure. Tested for 200 on the second use of claims endpoint, Observed status code: #{@@pokitdok.status_code}"
|
256
|
+
activity_id = claim_response["meta"]["activity_id"]
|
257
|
+
activity_url = "/activities/#{activity_id}"
|
258
|
+
end
|
259
|
+
|
260
|
+
# exercise the PUT functionality to delete the claim from its INIT status
|
261
|
+
put_data = @@pokitdok.put(activity_url, data={transition: "cancel"})
|
262
|
+
assert @@pokitdok.status_code == 200, "Status Code assertion failure. Tested for 200 on put to cancel the activity, Observed status code: #{@@pokitdok.status_code}"
|
263
|
+
refute_nil(put_data, msg="the respones body is empty")
|
264
|
+
refute_nil(put_data["data"], msg="the responesbody[data] is empty")
|
265
|
+
assert put_data["data"].kind_of?(Hash), "Error grabbing the activity data; try running the test suite again. Full response: #{put_data}"
|
266
|
+
|
267
|
+
# look in the history to see if it has transitioned from state "init" to "canceled"
|
268
|
+
assert put_data["data"]["history"].kind_of?(Array), "Error grabbing the activity data; try running the test suite again. Full response: #{assert put_data["data"]["history"]}"
|
269
|
+
history = put_data["data"]["history"]
|
270
|
+
assert history.length == 3, "Tested for cancelled claim, but recived the following claim history: #{history.to_s}"
|
271
|
+
|
272
|
+
# exercise the PUT functionality to delete an already deleted claim
|
273
|
+
put_data = @@pokitdok.put(activity_url, data={transition: "cancel"})
|
274
|
+
refute_nil(put_data["data"]["errors"], msg="The response[data][errors] is empty")
|
275
|
+
assert @@pokitdok.status_code == 422, "Status Code assertion failure. Tested for 422 on put to cancel the activity, Observed status code: #{@@pokitdok.status_code}"
|
276
|
+
|
277
|
+
# exercise the activities endpoint to get the status of this claims transaction
|
278
|
+
updated_get_response = @@pokitdok.activities(claim_response["meta"]["activity_id"])
|
279
|
+
refute_nil(updated_get_response["meta"], msg="the response[meta] section is empty. The full response: #{updated_get_response.to_s}")
|
280
|
+
refute_nil(updated_get_response["data"], msg="the response[data] section is empty")
|
281
|
+
assert @@pokitdok.status_code == 404, "Status Code assertion failure. Tested for 200 on the last use of the activities endpoint, Observed status code: #{@@pokitdok.status_code} #{updated_get_response}"
|
282
|
+
assert updated_get_response["data"]["errors"]["query"].include?("is not a valid Activity Id"), "Failed test for error message. Observed payload: #{updated_get_response}"
|
242
283
|
end
|
284
|
+
end
|
285
|
+
#
|
286
|
+
# ******************************
|
287
|
+
# X12 API tests
|
288
|
+
# ******************************
|
289
|
+
#
|
290
|
+
describe 'X12 API Convenience function test: authorizations' do
|
291
|
+
it 'make a call to the live endpoint for: authorizations' do
|
292
|
+
@params = {
|
293
|
+
event: {
|
294
|
+
category: "health_services_review",
|
295
|
+
certification_type: "initial",
|
296
|
+
delivery: {
|
297
|
+
quantity: 1,
|
298
|
+
quantity_qualifier: "visits"
|
299
|
+
},
|
300
|
+
diagnoses: [
|
301
|
+
{
|
302
|
+
code: "R10.9",
|
303
|
+
date: "2016-01-25"
|
304
|
+
}
|
305
|
+
],
|
306
|
+
place_of_service: "office",
|
307
|
+
provider: {
|
308
|
+
organization_name: "KELLY ULTRASOUND CENTER, LLC",
|
309
|
+
npi: "1760779011",
|
310
|
+
phone: "8642341234"
|
311
|
+
},
|
312
|
+
services: [
|
313
|
+
{
|
314
|
+
cpt_code: "76700",
|
315
|
+
measurement: "unit",
|
316
|
+
quantity: 1
|
317
|
+
}
|
318
|
+
],
|
319
|
+
type: "diagnostic_medical"
|
320
|
+
},
|
321
|
+
patient: {
|
322
|
+
birth_date: "1970-01-25",
|
323
|
+
first_name: "JANE",
|
324
|
+
last_name: "DOE",
|
325
|
+
id: "1234567890"
|
326
|
+
},
|
327
|
+
provider: {
|
328
|
+
first_name: "JEROME",
|
329
|
+
npi: "1467560003",
|
330
|
+
last_name: "AYA-AY"
|
331
|
+
},
|
332
|
+
trading_partner_id: "MOCKPAYER"
|
333
|
+
}
|
334
|
+
response = @@pokitdok.authorizations @params
|
335
|
+
refute_nil(response["meta"], msg="the response[meta] section is empty")
|
336
|
+
refute_nil(response["data"], msg="the response[data] section is empty")
|
337
|
+
assert @@pokitdok.status_code == 200, "Status Code assertion failure. Tested for 200, Observed status code: #{@@pokitdok.status_code}"
|
243
338
|
|
244
|
-
describe 'ICD Convert endpoint' do
|
245
|
-
it 'should expose the icd convert endpoint' do
|
246
|
-
stub_request(:get, MATCH_NETWORK_LOCATION).
|
247
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
248
|
-
|
249
|
-
@icd = @@pokitdok.icd_convert({code: '250.12'})
|
250
|
-
refute_nil(@icd)
|
251
|
-
end
|
252
339
|
end
|
340
|
+
end
|
341
|
+
describe 'X12 API Convenience function test: claims_status' do
|
342
|
+
it 'make a call to the live endpoint for: claims_status' do
|
343
|
+
@params = {
|
344
|
+
patient: {
|
345
|
+
birth_date: "1970-01-25",
|
346
|
+
first_name: "JANE",
|
347
|
+
last_name: "DOE",
|
348
|
+
id: "1234567890"
|
349
|
+
},
|
350
|
+
provider: {
|
351
|
+
first_name: "Jerome",
|
352
|
+
last_name: "Aya-Ay",
|
353
|
+
npi: "1467560003"
|
354
|
+
},
|
355
|
+
service_date: "2014-01-25",
|
356
|
+
trading_partner_id: "MOCKPAYER"
|
357
|
+
}
|
358
|
+
response = @@pokitdok.claims_status @params
|
359
|
+
refute_nil(response["meta"].keys, msg="the response[meta] section is empty")
|
360
|
+
refute_nil(response["data"].keys, msg="the response[data] section is empty")
|
361
|
+
assert @@pokitdok.status_code == 200, "Status Code assertion failure. Tested for 200, Observed status code: #{@@pokitdok.status_code}"
|
253
362
|
|
254
|
-
describe 'Claims convert endpoint' do
|
255
|
-
it 'should expose the claims convert endpoint' do
|
256
|
-
stub_request(:post, MATCH_NETWORK_LOCATION).
|
257
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
258
|
-
|
259
|
-
@converted_claim = @@pokitdok.claims_convert('spec/fixtures/chiropractic_example.837')
|
260
|
-
|
261
|
-
refute_nil(@converted_claim)
|
262
|
-
end
|
263
363
|
end
|
364
|
+
end
|
365
|
+
describe 'X12 API Convenience function test: claims_convert' do
|
366
|
+
it 'make a call to the live endpoint for: claims_convert' do
|
367
|
+
response = @@pokitdok.claims_convert('spec/fixtures/test_claim.837')
|
368
|
+
refute_nil(response["meta"].keys, msg="the response[meta] section is empty")
|
369
|
+
refute_nil(response["data"].keys, msg="the response[data] section is empty")
|
370
|
+
assert @@pokitdok.status_code == 200, "Status Code assertion failure. Tested for 200, Observed status code: #{@@pokitdok.status_code}"
|
264
371
|
|
265
|
-
describe 'Eligibility endpoint' do
|
266
|
-
it 'should expose the eligibility endpoint' do
|
267
|
-
stub_request(:post, MATCH_NETWORK_LOCATION).
|
268
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
269
|
-
|
270
|
-
@eligibility_query = {
|
271
|
-
member: {
|
272
|
-
birth_date: '1970-01-01',
|
273
|
-
first_name: 'Jane',
|
274
|
-
last_name: 'Doe',
|
275
|
-
id: 'W000000000'
|
276
|
-
},
|
277
|
-
provider: {
|
278
|
-
first_name: 'JEROME',
|
279
|
-
last_name: 'AYA-AY',
|
280
|
-
npi: '1467560003'
|
281
|
-
},
|
282
|
-
service_types: ['health_benefit_plan_coverage'],
|
283
|
-
trading_partner_id: 'MOCKPAYER'
|
284
|
-
}
|
285
|
-
@eligibility = @@pokitdok.eligibility(@eligibility_query)
|
286
|
-
|
287
|
-
refute_nil(@eligibility)
|
288
|
-
end
|
289
372
|
end
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
373
|
+
end
|
374
|
+
describe 'X12 API Convenience function test: eligibility' do
|
375
|
+
it 'make a call to the live endpoint for: eligibility' do
|
376
|
+
params = {
|
377
|
+
member: {
|
378
|
+
birth_date: '1970-01-01',
|
379
|
+
first_name: 'Jane',
|
380
|
+
last_name: 'Doe',
|
381
|
+
id: 'W000000000'
|
382
|
+
},
|
383
|
+
provider: {
|
384
|
+
first_name: 'JEROME',
|
385
|
+
last_name: 'AYA-AY',
|
386
|
+
npi: '1467560003'
|
387
|
+
},
|
388
|
+
service_types: ['health_benefit_plan_coverage'],
|
389
|
+
trading_partner_id: 'MOCKPAYER'
|
390
|
+
}
|
391
|
+
response = @@pokitdok.eligibility params
|
392
|
+
refute_nil(response["meta"].keys, msg="the response[meta] section is empty")
|
393
|
+
refute_nil(response["data"].keys, msg="the response[data] section is empty")
|
394
|
+
assert @@pokitdok.status_code == 200, "Status Code assertion failure. Tested for 200, Observed status code: #{@@pokitdok.status_code}"
|
301
395
|
end
|
396
|
+
end
|
397
|
+
describe 'X12 API Convenience function test: referrals' do
|
398
|
+
it 'make a call to the live endpoint for: referrals' do
|
399
|
+
@params = {
|
400
|
+
event: {
|
401
|
+
category: "specialty_care_review",
|
402
|
+
certification_type: "initial",
|
403
|
+
delivery: {
|
404
|
+
quantity: 1,
|
405
|
+
quantity_qualifier: "visits"
|
406
|
+
},
|
407
|
+
diagnoses: [
|
408
|
+
{
|
409
|
+
code: "H72.90",
|
410
|
+
date: "2014-09-25"
|
411
|
+
}
|
412
|
+
],
|
413
|
+
place_of_service: "office",
|
414
|
+
provider: {
|
415
|
+
first_name: "JOHN",
|
416
|
+
npi: "1154387751",
|
417
|
+
last_name: "FOSTER",
|
418
|
+
phone: "8645822900"
|
419
|
+
},
|
420
|
+
type: "consultation"
|
421
|
+
},
|
422
|
+
patient: {
|
423
|
+
birth_date: "1970-01-25",
|
424
|
+
first_name: "JANE",
|
425
|
+
last_name: "DOE",
|
426
|
+
id: "1234567890"
|
427
|
+
},
|
428
|
+
provider: {
|
429
|
+
first_name: "CHRISTINA",
|
430
|
+
last_name: "BERTOLAMI",
|
431
|
+
npi: "1619131232"
|
432
|
+
},
|
433
|
+
trading_partner_id: "MOCKPAYER"
|
434
|
+
}
|
435
|
+
response = @@pokitdok.referrals @params
|
436
|
+
refute_nil(response["meta"], msg="the response[meta] section is empty")
|
437
|
+
refute_nil(response["data"], msg="the response[data] section is empty")
|
438
|
+
assert @@pokitdok.status_code == 200, "Status Code assertion failure. Tested for 200, Observed status code: #{@@pokitdok.status_code}"
|
302
439
|
|
303
|
-
describe 'Enrollment Snapshot endpoint' do
|
304
|
-
it 'should expose the enrollment snapshot endpoint' do
|
305
|
-
stub_request(:post, MATCH_NETWORK_LOCATION).
|
306
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
307
|
-
|
308
|
-
@enrollment_snapshot_activity = @@pokitdok.enrollment_snapshot('MOCKPAYER', 'spec/fixtures/acme_inc_supplemental_identifiers.834')
|
309
|
-
|
310
|
-
refute_nil(@enrollment_snapshot_activity)
|
311
|
-
end
|
312
|
-
it 'should expose the enrollment snapshots endpoint' do
|
313
|
-
stub_request(:get, MATCH_NETWORK_LOCATION).
|
314
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
315
|
-
|
316
|
-
@enrollment_snapshot = @@pokitdok.enrollment_snapshots({snapshot_id: '577294e00640fd5ce02d493f'})
|
317
|
-
|
318
|
-
refute_nil(@enrollment_snapshot)
|
319
|
-
end
|
320
|
-
it 'should expose the enrollment snapshot data endpoint' do
|
321
|
-
stub_request(:get, MATCH_NETWORK_LOCATION).
|
322
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
323
|
-
|
324
|
-
@enrollment_snapshot_data = @@pokitdok.enrollment_snapshot_data({snapshot_id: '577294e00640fd5ce02d493f'})
|
325
|
-
|
326
|
-
refute_nil(@enrollment_snapshot_data)
|
327
|
-
end
|
328
440
|
end
|
441
|
+
end
|
442
|
+
#
|
443
|
+
# ******************************
|
444
|
+
# Data API tests
|
445
|
+
# ******************************
|
446
|
+
#
|
447
|
+
describe 'Data API Convenience function test: cash_prices' do
|
448
|
+
it 'make a call to the live endpoint for: cash_prices' do
|
449
|
+
response = @@pokitdok.cash_prices({ zip_code: '29412', cpt_code: '99385'})
|
450
|
+
refute_nil(response["meta"], msg="the response[meta] section is empty")
|
451
|
+
refute_nil(response["data"], msg="the response[data] section is empty")
|
452
|
+
assert @@pokitdok.status_code == 200, "Status Code assertion failure. Tested for 200, Observed status code: #{@@pokitdok.status_code}"
|
329
453
|
|
330
|
-
describe 'Insurance Prices endpoint' do
|
331
|
-
it 'should expose the insurance prices endpoint' do
|
332
|
-
stub_request(:get, MATCH_NETWORK_LOCATION).
|
333
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
334
|
-
|
335
|
-
query = { cpt_code: '87799', zip_code: '32218' }
|
336
|
-
@prices = @@pokitdok.insurance_prices query
|
337
|
-
|
338
|
-
refute_nil(@prices)
|
339
|
-
end
|
340
454
|
end
|
455
|
+
end
|
456
|
+
describe 'Data API Convenience function test: icd_convert' do
|
457
|
+
it 'make a call to the live endpoint for: icd_convert' do
|
458
|
+
@params = {code: '250.12'}
|
459
|
+
response = @@pokitdok.icd_convert @params
|
460
|
+
refute_nil(response["meta"].keys, msg="the response[meta] section is empty")
|
461
|
+
refute_nil(response["data"].keys, msg="the response[data] section is empty")
|
462
|
+
assert @@pokitdok.status_code == 200, "Status Code assertion failure. Tested for 200, Observed status code: #{@@pokitdok.status_code}"
|
341
463
|
|
342
|
-
describe 'Payers endpoint' do
|
343
|
-
it 'should expose the payers endpoint' do
|
344
|
-
stub_request(:get, MATCH_NETWORK_LOCATION).
|
345
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
346
|
-
|
347
|
-
@payers = @@pokitdok.payers(state: 'CA')
|
348
|
-
|
349
|
-
refute_nil(@payers)
|
350
|
-
end
|
351
464
|
end
|
465
|
+
end
|
466
|
+
describe 'Data API Convenience function test: mpc' do
|
467
|
+
it 'make a call to the live endpoint for: mpc' do
|
468
|
+
@params = {code: '99213'}
|
469
|
+
response = @@pokitdok.mpc @params
|
470
|
+
refute_nil(response["meta"], msg="the response[meta] section is empty")
|
471
|
+
refute_nil(response["data"], msg="the response[data] section is empty")
|
472
|
+
assert @@pokitdok.status_code == 200, "Status Code assertion failure. Tested for 200, Observed status code: #{@@pokitdok.status_code}"
|
352
473
|
|
353
|
-
describe 'Plans endpoint' do
|
354
|
-
it 'should expose the plans endpoint' do
|
355
|
-
stub_request(:get, MATCH_NETWORK_LOCATION).
|
356
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
357
|
-
|
358
|
-
@plans = @@pokitdok.plans
|
359
|
-
|
360
|
-
refute_nil(@plans)
|
361
|
-
end
|
362
|
-
|
363
|
-
it 'should expose the plans endpoint withe state and plan type' do
|
364
|
-
stub_request(:get, MATCH_NETWORK_LOCATION).
|
365
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
366
|
-
|
367
|
-
query = {state: 'TX', plan_type: 'PPO'}
|
368
|
-
@plans = @@pokitdok.plans(query)
|
369
|
-
|
370
|
-
refute_nil(@plans)
|
371
|
-
end
|
372
474
|
end
|
475
|
+
end
|
476
|
+
describe 'Data API Convenience function test: insurance_prices' do
|
477
|
+
it 'make a call to the live endpoint for: insurance_prices' do
|
478
|
+
@params = {zip_code: '94401', cpt_code: '90658'}
|
479
|
+
response = @@pokitdok.insurance_prices @params
|
480
|
+
refute_nil(response["meta"].keys, msg="the response[meta] section is empty")
|
481
|
+
refute_nil(response["data"].keys, msg="the response[data] section is empty")
|
482
|
+
assert @@pokitdok.status_code == 200, "Status Code assertion failure. Tested for 200, Observed status code: #{@@pokitdok.status_code}"
|
373
483
|
|
374
|
-
describe 'Providers endpoint' do
|
375
|
-
it 'should expose the providers endpoint' do
|
376
|
-
stub_request(:get, MATCH_NETWORK_LOCATION).
|
377
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
378
|
-
|
379
|
-
query = { npi: '1467560003' }
|
380
|
-
@providers = @@pokitdok.providers(query)
|
381
|
-
|
382
|
-
refute_nil(@providers)
|
383
|
-
end
|
384
|
-
|
385
|
-
it 'should expose the providers endpoint with args' do
|
386
|
-
stub_request(:get, MATCH_NETWORK_LOCATION).
|
387
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
388
|
-
|
389
|
-
query = {
|
390
|
-
zipcode: '29307',
|
391
|
-
specialty: 'rheumatology',
|
392
|
-
radius: '20mi'
|
393
|
-
}
|
394
|
-
@providers = @@pokitdok.providers(query)
|
395
|
-
|
396
|
-
refute_nil(@providers)
|
397
|
-
end
|
398
484
|
end
|
485
|
+
end
|
486
|
+
describe 'Data API Convenience function test: oop_insurance_estimate' do
|
487
|
+
it 'make a call to the live endpoint for: oop_insurance_estimate' do
|
488
|
+
@params = {
|
489
|
+
trading_partner_id: "MOCKPAYER",
|
490
|
+
cpt_bundle: ["99385"],
|
491
|
+
zip_code: "29412",
|
492
|
+
eligibility: {
|
493
|
+
provider: {
|
494
|
+
first_name: "JEROME",
|
495
|
+
last_name: "AYA-AY",
|
496
|
+
npi: "1467560003"
|
497
|
+
},
|
498
|
+
member: {
|
499
|
+
birth_date: "1970-01-25",
|
500
|
+
first_name: "Jane",
|
501
|
+
last_name: "Doe",
|
502
|
+
id: "W000000000"
|
503
|
+
}
|
504
|
+
}
|
505
|
+
}
|
506
|
+
response = @@pokitdok.oop_insurance_estimate @params
|
507
|
+
refute_nil(response["meta"].keys, msg="the response[meta] section is empty")
|
508
|
+
refute_nil(response["data"].keys, msg="the response[data] section is empty")
|
509
|
+
assert @@pokitdok.status_code == 200, "Status Code assertion failure. Tested for 200, Observed status code: #{@@pokitdok.status_code}"
|
399
510
|
|
400
|
-
describe 'Trading Partners endpoints' do
|
401
|
-
it 'should expose the trading partners endpoint (index call)' do
|
402
|
-
stub_request(:get, MATCH_NETWORK_LOCATION).
|
403
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
404
|
-
|
405
|
-
@trading_partners = @@pokitdok.trading_partners
|
406
|
-
|
407
|
-
refute_nil(@trading_partners)
|
408
|
-
end
|
409
|
-
|
410
|
-
it 'should expose the trading partners endpoint (get call)' do
|
411
|
-
stub_request(:get, MATCH_NETWORK_LOCATION).
|
412
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
413
|
-
|
414
|
-
@trading_partners = @@pokitdok.trading_partners({ trading_partner_id: 'aetna' })
|
415
|
-
|
416
|
-
refute_nil(@trading_partners)
|
417
|
-
end
|
418
511
|
end
|
512
|
+
end
|
513
|
+
describe 'Data API Convenience function test: oop_insurance_prices' do
|
514
|
+
it 'make a call to the live endpoint for: oop_insurance_prices' do
|
515
|
+
@params = {
|
516
|
+
trading_partner_id: "MOCKPAYER",
|
517
|
+
cpt_bundle:["99385"],
|
518
|
+
price: {
|
519
|
+
amount: "750"
|
520
|
+
}
|
521
|
+
}
|
522
|
+
response = @@pokitdok.oop_insurance_prices @params
|
523
|
+
refute_nil(response["meta"].keys, msg="the response[meta] section is empty")
|
524
|
+
refute_nil(response["data"].keys, msg="the response[data] section is empty")
|
525
|
+
assert @@pokitdok.status_code == 200, "Status Code assertion failure. Tested for 200, Observed status code: #{@@pokitdok.status_code}"
|
419
526
|
|
420
|
-
describe 'Referrals endpoint' do
|
421
|
-
it 'should expose the referrals endpoint' do
|
422
|
-
stub_request(:post, MATCH_NETWORK_LOCATION).
|
423
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
424
|
-
|
425
|
-
query = JSON.parse(IO.read('spec/fixtures/referrals.json'))
|
426
|
-
@referrals = @@pokitdok.referrals(query)
|
427
|
-
|
428
|
-
refute_nil(@referrals)
|
429
|
-
end
|
430
527
|
end
|
528
|
+
end
|
529
|
+
describe 'Data API Convenience function test: plans' do
|
530
|
+
it 'make a call to the live endpoint for: plans' do
|
531
|
+
@params = {state: 'SC', plan_type: 'PPO'}
|
532
|
+
response = @@pokitdok.plans @params
|
533
|
+
refute_nil(response["meta"], msg="the response[meta] section is empty")
|
534
|
+
refute_nil(response["data"], msg="the response[data] section is empty")
|
535
|
+
assert @@pokitdok.status_code == 200, "Status Code assertion failure. Tested for 200, Observed status code: #{@@pokitdok.status_code}"
|
431
536
|
|
432
|
-
describe 'Authorizations endpoint' do
|
433
|
-
it 'should expose the authorizations endpoint' do
|
434
|
-
stub_request(:post, MATCH_NETWORK_LOCATION).
|
435
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
436
|
-
|
437
|
-
query = JSON.parse(IO.read('spec/fixtures/authorizations.json'))
|
438
|
-
@authorizations = @@pokitdok.authorizations query
|
439
|
-
|
440
|
-
refute_nil(@authorizations)
|
441
|
-
end
|
442
537
|
end
|
538
|
+
end
|
539
|
+
describe 'Data API Convenience function test: providers' do
|
540
|
+
it 'make a call to the live endpoint for: providers' do
|
541
|
+
@params = {npi: '1467560003'}
|
542
|
+
response = @@pokitdok.providers @params
|
543
|
+
refute_nil(response["meta"], msg="the response[meta] section is empty")
|
544
|
+
refute_nil(response["data"], msg="the response[data] section is empty")
|
545
|
+
assert @@pokitdok.status_code == 200, "Status Code assertion failure. Tested for 200, Observed status code: #{@@pokitdok.status_code}"
|
443
546
|
|
444
|
-
describe 'Scheduling endpoints' do
|
445
|
-
it 'should list the schedulers' do
|
446
|
-
stub_request(:get, MATCH_NETWORK_LOCATION).
|
447
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
448
|
-
|
449
|
-
@schedulers = @@pokitdok.schedulers
|
450
|
-
|
451
|
-
refute_nil(@schedulers)
|
452
|
-
end
|
453
|
-
|
454
|
-
it 'should give details on a specific scheduler' do
|
455
|
-
stub_request(:get, MATCH_NETWORK_LOCATION).
|
456
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
457
|
-
|
458
|
-
@scheduler = @@pokitdok.scheduler({ uuid: '967d207f-b024-41cc-8cac-89575a1f6fef' })
|
459
|
-
|
460
|
-
refute_nil(@scheduler)
|
461
|
-
end
|
462
|
-
|
463
|
-
it 'should list appointment types' do
|
464
|
-
stub_request(:get, MATCH_NETWORK_LOCATION).
|
465
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
466
|
-
|
467
|
-
@appointment_types = @@pokitdok.appointment_types
|
468
|
-
|
469
|
-
refute_nil(@appointment_types)
|
470
|
-
end
|
471
|
-
|
472
|
-
it 'should give details on a specific appointment type' do
|
473
|
-
stub_request(:get, MATCH_NETWORK_LOCATION).
|
474
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
475
|
-
|
476
|
-
@appointment_type = @@pokitdok.appointment_type({ uuid: 'ef987695-0a19-447f-814d-f8f3abbf4860' })
|
477
|
-
|
478
|
-
refute_nil(@appointment_type)
|
479
|
-
end
|
480
|
-
|
481
|
-
it 'should create an open schedule slot' do
|
482
|
-
# Special Case: The scheduling endpoint reauthenticates for the scope (user_schedule),
|
483
|
-
# which would be caught by the below 'stub_request'. This would cause the OAuth module
|
484
|
-
# to fail because of an empty return body (to see what is required on an OAuth) POST
|
485
|
-
# refer to the 'before' code block above. This 'stub_request' will only catch the /schedule/slots/ request.
|
486
|
-
stub_request(:post, MATCH_NETWORK_LOCATION).
|
487
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
488
|
-
|
489
|
-
query = {
|
490
|
-
pd_provider_uuid: "b691b7f9-bfa8-486d-a689-214ae47ea6f8",
|
491
|
-
location: [32.788110, -79.932364],
|
492
|
-
appointment_type: "AT1",
|
493
|
-
start_date: "2014-12-25T15:09:34.197709",
|
494
|
-
end_date: "2014-12-25T16:09:34.197717"
|
495
|
-
}
|
496
|
-
@slot = @@pokitdok.schedule_slots(query)
|
497
|
-
|
498
|
-
refute_nil(@slot)
|
499
|
-
end
|
500
|
-
|
501
|
-
it 'should give details on a specific appointment' do
|
502
|
-
stub_request(:get, MATCH_NETWORK_LOCATION).
|
503
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
504
|
-
|
505
|
-
@appointment = @@pokitdok.appointments({ uuid: 'ef987691-0a19-447f-814d-f8f3abbf4859' })
|
506
|
-
|
507
|
-
refute_nil(@appointment)
|
508
|
-
end
|
509
|
-
|
510
|
-
it 'should give details on a searched appointments' do
|
511
|
-
stub_request(:get, MATCH_NETWORK_LOCATION).
|
512
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
513
|
-
|
514
|
-
query = {
|
515
|
-
'appointment_type' => 'AT1',
|
516
|
-
'start_date' => Time.now.strftime("%Y/%m/%d"),
|
517
|
-
'end_date' => Time.now.strftime("%Y/%m/%d"),
|
518
|
-
}
|
519
|
-
@appointments = @@pokitdok.appointments(query)
|
520
|
-
|
521
|
-
refute_nil(@appointments)
|
522
|
-
end
|
523
|
-
|
524
|
-
it 'should book appointment for an open slot' do
|
525
|
-
stub_request(:put, MATCH_NETWORK_LOCATION).
|
526
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
527
|
-
|
528
|
-
appt_uuid = "ef987691-0a19-447f-814d-f8f3abbf4859"
|
529
|
-
booking_query = {
|
530
|
-
patient: {
|
531
|
-
uuid: "500ef469-2767-4901-b705-425e9b6f7f83",
|
532
|
-
email: "john@johndoe.com",
|
533
|
-
phone: "800-555-1212",
|
534
|
-
birth_date: "1970-01-01",
|
535
|
-
first_name: "John",
|
536
|
-
last_name: "Doe"
|
537
|
-
},
|
538
|
-
description: "Welcome to M0d3rN Healthcare"
|
539
|
-
}
|
540
|
-
@slot = @@pokitdok.book_appointment(appt_uuid, booking_query)
|
541
|
-
|
542
|
-
refute_nil(@slot)
|
543
|
-
end
|
544
|
-
|
545
|
-
it 'should cancel a specified appointment' do
|
546
|
-
stub_request(:delete, MATCH_NETWORK_LOCATION).
|
547
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
548
|
-
|
549
|
-
@cancel_response = @@pokitdok.cancel_appointment "ef987691-0a19-447f-814d-f8f3abbf4859"
|
550
|
-
|
551
|
-
refute_nil(@cancel_response)
|
552
|
-
end
|
553
547
|
end
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
prefix: "Mr.",
|
562
|
-
first_name: "Gerald",
|
563
|
-
middle_name: "Harold",
|
564
|
-
last_name: "Whitmire",
|
565
|
-
suffix: "IV",
|
566
|
-
birth_date: "2000-05-25",
|
567
|
-
gender: "male",
|
568
|
-
email: "oscar@@pokitdok.com",
|
569
|
-
phone: "555-555-5555",
|
570
|
-
secondary_phone: "333-333-4444",
|
571
|
-
address: {
|
572
|
-
address_lines: ["1400 Anyhoo Avenue"],
|
573
|
-
city: "Springfield",
|
574
|
-
state: "IL",
|
575
|
-
zipcode: "90210"
|
576
|
-
}
|
577
|
-
}
|
578
|
-
@identity = @@pokitdok.create_identity(query)
|
579
|
-
|
580
|
-
refute_nil(@identity)
|
581
|
-
end
|
582
|
-
|
583
|
-
it 'should expose the identity endpoint for querying via id' do
|
584
|
-
stub_request(:get, MATCH_NETWORK_LOCATION).
|
585
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
586
|
-
|
587
|
-
@identity = @@pokitdok.identity(identity_uuid: '1a0a60b2-3e07-11e6-94c0-08002778b074')
|
588
|
-
|
589
|
-
refute_nil(@identity)
|
590
|
-
end
|
591
|
-
|
592
|
-
it 'should expose the identity endpoint for querying via params' do
|
593
|
-
stub_request(:get, MATCH_NETWORK_LOCATION).
|
594
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
595
|
-
|
596
|
-
query = {first_name: 'Gerald', last_name: 'Whitmire'}
|
597
|
-
@identities = @@pokitdok.identity(query)
|
598
|
-
|
599
|
-
refute_nil(@identities)
|
600
|
-
end
|
601
|
-
|
602
|
-
it 'should expose the identity endpoint for updating' do
|
603
|
-
stub_request(:put, MATCH_NETWORK_LOCATION).
|
604
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
605
|
-
|
606
|
-
@identity = @@pokitdok.update_identity('1a0a60b2-3e07-11e6-94c0-08002778b074', { first_name: 'John' })
|
607
|
-
|
608
|
-
refute_nil(@identity)
|
609
|
-
end
|
610
|
-
|
611
|
-
it 'should expose the identity history endpoint' do
|
612
|
-
stub_request(:get, MATCH_NETWORK_LOCATION).
|
613
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
614
|
-
|
615
|
-
@identity = @@pokitdok.identity_history('1a0a60b2-3e07-11e6-94c0-08002778b074')
|
616
|
-
|
617
|
-
refute_nil(@identity)
|
618
|
-
end
|
619
|
-
|
620
|
-
it 'should expose the identity history endpoint with version number' do
|
621
|
-
stub_request(:get, MATCH_NETWORK_LOCATION).
|
622
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
623
|
-
|
624
|
-
@identity = @@pokitdok.identity_history('1a0a60b2-3e07-11e6-94c0-08002778b074', 1)
|
625
|
-
|
626
|
-
refute_nil(@identity)
|
627
|
-
end
|
628
|
-
|
629
|
-
it 'should expose the identity match endpoint' do
|
630
|
-
stub_request(:post, MATCH_NETWORK_LOCATION).
|
631
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
632
|
-
|
633
|
-
query = JSON.parse(IO.read('spec/fixtures/identity_match.json'))
|
634
|
-
@identity = @@pokitdok.identity_match(query)
|
635
|
-
|
636
|
-
refute_nil(@identity)
|
637
|
-
end
|
548
|
+
end
|
549
|
+
describe 'Data API Convenience function test: trading_partners' do
|
550
|
+
it 'make a call to the live endpoint for: trading_partners' do
|
551
|
+
response = @@pokitdok.trading_partners("aetna")
|
552
|
+
refute_nil(response["meta"], msg="the response[meta] section is empty")
|
553
|
+
refute_nil(response["data"], msg="the response[data] section is empty")
|
554
|
+
assert @@pokitdok.status_code == 200, "Status Code assertion failure. Tested for 200, Observed status code: #{@@pokitdok.status_code}"
|
638
555
|
end
|
556
|
+
end
|
639
557
|
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
558
|
+
#
|
559
|
+
# ******************************
|
560
|
+
# Pharmacy API tests
|
561
|
+
# ******************************
|
562
|
+
#
|
563
|
+
describe 'Pharmacy API Convenience function test: pharmacy_plans' do
|
564
|
+
it 'make a call to the live endpoint for: pharmacy_plans' do
|
565
|
+
response = @@pokitdok.pharmacy_plans(trading_partner_id:'medicare_national', plan_number:'S5820003')
|
566
|
+
refute_nil(response["meta"], msg="the response[meta] section is empty")
|
567
|
+
refute_nil(response["data"], msg="the response[data] section is empty")
|
568
|
+
assert @@pokitdok.status_code == 200, "Status Code assertion failure. Tested for 200, Observed status code: #{@@pokitdok.status_code}"
|
647
569
|
|
648
|
-
refute_nil(@pharmacy_plans)
|
649
|
-
end
|
650
570
|
end
|
571
|
+
end
|
572
|
+
describe 'Pharmacy API Convenience function test: pharmacy_formulary' do
|
573
|
+
it 'make a call to the live endpoint for: pharmacy_formulary' do
|
574
|
+
response = @@pokitdok.pharmacy_formulary(trading_partner_id: 'medicare_national', plan_number: 'S5820003', ndc: '00006073554')
|
575
|
+
refute_nil(response["meta"], msg="the response[meta] section is empty")
|
576
|
+
refute_nil(response["data"], msg="the response[data] section is empty")
|
577
|
+
assert @@pokitdok.status_code == 200, "Status Code assertion failure. Tested for 200, Observed status code: #{@@pokitdok.status_code}"
|
651
578
|
|
652
|
-
describe 'Pharmacy Formulary Endpoint' do
|
653
|
-
it 'should expose the pharmacy formulary endpoint' do
|
654
|
-
stub_request(:get, MATCH_NETWORK_LOCATION).
|
655
|
-
to_return(status: 200, body: '{ "string" : "" }')
|
656
|
-
|
657
|
-
query = {trading_partner_id: 'MOCKPAYER', plan_number: 'S5820003',
|
658
|
-
ndc: '59310-579-22'}
|
659
|
-
@pharmacy_formulary = @@pokitdok.pharmacy_formulary(query)
|
660
|
-
|
661
|
-
refute_nil(@pharmacy_formulary)
|
662
|
-
end
|
663
579
|
end
|
580
|
+
end
|
581
|
+
describe 'Pharmacy API Convenience function test: pharmacy_network' do
|
582
|
+
it 'make a call to the live endpoint for: pharmacy_network' do
|
583
|
+
response = @@pokitdok.pharmacy_network(trading_partner_id: 'medicare_national', plan_number: 'S5820003' , zipcode: '07030', radius: '1mi')
|
584
|
+
refute_nil(response["meta"], msg="the response[meta] section is empty")
|
585
|
+
refute_nil(response["data"], msg="the response[data] section is empty")
|
586
|
+
assert @@pokitdok.status_code == 200, "Status Code assertion failure. Tested for 200, Observed status code: #{@@pokitdok.status_code}"
|
587
|
+
end
|
588
|
+
end
|
664
589
|
|
665
|
-
|
666
|
-
|
667
|
-
|
668
|
-
|
669
|
-
|
670
|
-
|
671
|
-
|
672
|
-
|
673
|
-
|
674
|
-
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
590
|
+
#
|
591
|
+
# ******************************
|
592
|
+
# identity tests
|
593
|
+
# ******************************
|
594
|
+
#
|
595
|
+
|
596
|
+
describe 'Identity API Convenience function test: validate_identity ' do
|
597
|
+
it 'make a call to the live endpoint for: validate_identity' do
|
598
|
+
# make a fake identity
|
599
|
+
@DUARD = {
|
600
|
+
first_name: 'Duard',
|
601
|
+
last_name: 'Osinski',
|
602
|
+
birth_date: {
|
603
|
+
day: 12,
|
604
|
+
month: 3,
|
605
|
+
year: 1952
|
606
|
+
},
|
607
|
+
ssn: '491450000',
|
608
|
+
address: {city: 'North Perley',
|
609
|
+
country_code: 'US',
|
610
|
+
postal_code: '24330',
|
611
|
+
state_or_province: 'GA',
|
612
|
+
street1: '41072 Douglas Terrace ',
|
613
|
+
street2: 'Apt. 992'
|
614
|
+
}
|
615
|
+
}
|
616
|
+
# test that DUARD is a valid identity
|
617
|
+
response = @@pokitdok.validate_identity @DUARD
|
618
|
+
refute_nil(response["meta"], msg="the response[meta] section is empty: #{response}")
|
619
|
+
refute_nil(response["data"], msg="the response[data] section is empty: #{response}")
|
620
|
+
assert @@pokitdok.status_code == 200, "Status Code assertion failure. Tested for 200, Observed status code: #{@@pokitdok.status_code}"
|
686
621
|
end
|
687
622
|
end
|
688
623
|
end
|
689
624
|
end
|
625
|
+
|