caren-api 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/.rvmrc +1 -0
- data/Gemfile +15 -0
- data/Gemfile.lock +72 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +21 -0
- data/Rakefile +49 -0
- data/VERSION +1 -0
- data/caren-api.gemspec +101 -0
- data/init.rb +4 -0
- data/lib/caren/base.rb +86 -0
- data/lib/caren/care_provider.rb +86 -0
- data/lib/caren/caren.rb +91 -0
- data/lib/caren/error.rb +24 -0
- data/lib/caren/event.rb +28 -0
- data/lib/caren/external_message.rb +52 -0
- data/lib/caren/link.rb +43 -0
- data/lib/caren/person.rb +25 -0
- data/lib/caren-api.rb +25 -0
- data/spec/.DS_Store +0 -0
- data/spec/care_provider_spec.rb +107 -0
- data/spec/caren_spec.rb +74 -0
- data/spec/event_spec.rb +23 -0
- data/spec/external_message_spec.rb +48 -0
- data/spec/fixtures/bacon.jpg +0 -0
- data/spec/fixtures/caren_care_provider_validation.xml +6 -0
- data/spec/fixtures/caren_care_providers.xml +35 -0
- data/spec/fixtures/caren_care_providers_search.xml +19 -0
- data/spec/fixtures/caren_links.xml +36 -0
- data/spec/fixtures/caren_links_search.xml +14 -0
- data/spec/fixtures/caren_unauthorized.xml +6 -0
- data/spec/link_spec.rb +48 -0
- data/spec/person_spec.rb +37 -0
- data/spec/spec.opts +3 -0
- data/spec/spec_helper.rb +35 -0
- metadata +228 -0
data/lib/caren/link.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
class Caren::Link < Caren::Base
|
2
|
+
|
3
|
+
def self.keys
|
4
|
+
[:person_name, # String (Caren person name)
|
5
|
+
:person_id, # String (Caren person id)
|
6
|
+
:person_photo, # String (url of photo)
|
7
|
+
:patient_number, # String (12345)
|
8
|
+
:external_id, # String (Your person id)
|
9
|
+
:status # String (pending,confirmed,cancelled)
|
10
|
+
]
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.search key, value
|
14
|
+
from_xml Caren::Api.get( self.search_url(key,value) )
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.all
|
18
|
+
from_xml Caren::Api.get(self.resource_url)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Request to create a new link. Example:
|
22
|
+
# Caren::Link.new( :patient_number => 1234 ).create
|
23
|
+
def create
|
24
|
+
Caren::Api.post(self.resource_url, self.to_xml)
|
25
|
+
end
|
26
|
+
|
27
|
+
def as_xml
|
28
|
+
{ :patient_number => self.patient_number }
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.array_root
|
32
|
+
:links
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.node_root
|
36
|
+
:link
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.resource_location
|
40
|
+
"/api/links/"
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
data/lib/caren/person.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
class Caren::Person < Caren::Base
|
2
|
+
|
3
|
+
def self.keys
|
4
|
+
[ :external_id, # String (Your person id)
|
5
|
+
:uid, # String (Customer unique code)
|
6
|
+
:first_name, # String
|
7
|
+
:last_name, # String
|
8
|
+
:male, # Boolean
|
9
|
+
:date_of_birth, # Date
|
10
|
+
:address_street, # String
|
11
|
+
:address_zipcode, # String
|
12
|
+
:address_city, # String
|
13
|
+
:address_country # String
|
14
|
+
]
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.array_root
|
18
|
+
:people
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.node_root
|
22
|
+
:person
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
data/lib/caren-api.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require "digest/sha2"
|
2
|
+
require "uri"
|
3
|
+
require "net/https"
|
4
|
+
|
5
|
+
begin
|
6
|
+
require "rubygems"
|
7
|
+
rescue LoadError
|
8
|
+
end
|
9
|
+
|
10
|
+
require "active_support"
|
11
|
+
require "active_support/secure_random"
|
12
|
+
require "active_support/core_ext"
|
13
|
+
require "builder"
|
14
|
+
require "rest_client"
|
15
|
+
require "rexml/document"
|
16
|
+
require "base64"
|
17
|
+
|
18
|
+
require "lib/caren/caren.rb"
|
19
|
+
require "lib/caren/error.rb"
|
20
|
+
require "lib/caren/base.rb"
|
21
|
+
require "lib/caren/event.rb"
|
22
|
+
require "lib/caren/person.rb"
|
23
|
+
require "lib/caren/care_provider.rb"
|
24
|
+
require "lib/caren/external_message.rb"
|
25
|
+
require "lib/caren/link.rb"
|
data/spec/.DS_Store
ADDED
Binary file
|
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "CareProvider", "converting to xml" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@care_provider_a = Caren::CareProvider.new( :name => "Zuwe",
|
7
|
+
:telephone => "112",
|
8
|
+
:website => "http://www.zuwe.nl",
|
9
|
+
:email => "zuwe@example.com",
|
10
|
+
:address_line => "Sesamestreet 1",
|
11
|
+
:url_shortcut => "zuwe",
|
12
|
+
:time_zone => "Amsterdam",
|
13
|
+
:resolution => "exact",
|
14
|
+
:bandwidth => "0",
|
15
|
+
:min_start => "07:00",
|
16
|
+
:max_start => "00:00",
|
17
|
+
:show_employee_name_as_title => true,
|
18
|
+
:show_employee_names => true,
|
19
|
+
:communication => true )
|
20
|
+
|
21
|
+
@care_provider_b = Caren::CareProvider.new( :name => "Aveant",
|
22
|
+
:telephone => "112",
|
23
|
+
:website => "http://www.aveant.nl",
|
24
|
+
:email => "aveant@example.com",
|
25
|
+
:address_line => "Sesamestreet 1",
|
26
|
+
:url_shortcut => "zuwe",
|
27
|
+
:time_zone => "Amsterdam",
|
28
|
+
:resolution => "exact",
|
29
|
+
:bandwidth => "0",
|
30
|
+
:min_start => "07:00",
|
31
|
+
:max_start => "00:00",
|
32
|
+
:show_employee_name_as_title => true,
|
33
|
+
:show_employee_names => true,
|
34
|
+
:communication => true )
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should be able to convert a person to valid xml" do
|
38
|
+
@care_provider_a.should convert_to_valid_caren_xml
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should be able to convert an array of people to valid xml" do
|
42
|
+
[@care_provider_a,@care_provider_b].should convert_to_valid_caren_array_xml
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should be able to generate a proper xml file to update the logo" do
|
46
|
+
filename = "spec/fixtures/bacon.jpg"
|
47
|
+
xml = @care_provider_a.to_logo_xml filename
|
48
|
+
doc = REXML::Document.new(xml)
|
49
|
+
doc.elements.each('care_provider/logo') do |cp|
|
50
|
+
cp.attributes["name"].should == "bacon.jpg"
|
51
|
+
cp.attributes["content-type"].should == "image/jpeg"
|
52
|
+
cp.text.should == Base64.encode64(File.open(filename).read)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "CareProvider" do
|
59
|
+
|
60
|
+
it "should be able to convert a image file path to a hash suited for xml conversion" do
|
61
|
+
filename = "spec/fixtures/bacon.jpg"
|
62
|
+
logo = Caren::CareProvider.logo_hash( filename )
|
63
|
+
logo[:content_type].should == "image/jpeg"
|
64
|
+
logo[:name].should == "bacon.jpg"
|
65
|
+
logo[:content].should == Base64.encode64(File.open(filename).read)
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
describe "CareProvider", "REST methods" do
|
71
|
+
|
72
|
+
before do
|
73
|
+
care_providers = File.read("spec/fixtures/caren_care_providers.xml")
|
74
|
+
care_providers_search = File.read("spec/fixtures/caren_care_providers_search.xml")
|
75
|
+
FakeWeb.register_uri(:put, Caren::CareProvider.resource_url(1), :signature => Caren::Api.sign )
|
76
|
+
|
77
|
+
FakeWeb.register_uri(:get, Caren::CareProvider.resource_url, :body => care_providers,
|
78
|
+
:signature => Caren::Api.sign(care_providers) )
|
79
|
+
|
80
|
+
FakeWeb.register_uri(:get, "#{Caren::CareProvider.resource_url}?key=url-shortcut&value=pantein",
|
81
|
+
:body => care_providers_search,
|
82
|
+
:signature => Caren::Api.sign(care_providers_search) )
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should be able to update a care provider" do
|
86
|
+
lambda{ Caren::CareProvider.new( :caren_id => 1, :name => "Test" ).update }.should_not raise_error
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should be able to update the logo for a care provider" do
|
90
|
+
lambda{ Caren::CareProvider.new( :caren_id => 1 ).update_logo( "spec/fixtures/bacon.jpg" ) }.should_not raise_error
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should be able to search for a specific care provider" do
|
94
|
+
care_providers = Caren::CareProvider.search :url_shortcut, "pantein"
|
95
|
+
care_providers.should have(1).things
|
96
|
+
care_providers.first.name.should == "Pantein"
|
97
|
+
care_providers.first.url_shortcut.should == "pantein"
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should be able to find all care providers" do
|
101
|
+
care_providers = Caren::CareProvider.all
|
102
|
+
care_providers.should have(2).things
|
103
|
+
care_providers.first.name.should == "Demo"
|
104
|
+
care_providers.first.url_shortcut.should == "demo"
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
data/spec/caren_spec.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Caren", "signature checks" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@incorrect_url = "#{Caren::Api.url}/test_with_incorrect_signature"
|
7
|
+
@correct_url = "#{Caren::Api.url}/test_with_correct_signature"
|
8
|
+
@error_url = "#{Caren::Api.url}/test_with_errors"
|
9
|
+
|
10
|
+
FakeWeb.register_uri(:get, @incorrect_url, :body => "TEST", :signature => "[INCORRECT]" )
|
11
|
+
FakeWeb.register_uri(:post, @incorrect_url, :body => "TEST", :signature => "[INCORRECT]" )
|
12
|
+
FakeWeb.register_uri(:put, @incorrect_url, :body => "TEST", :signature => "[INCORRECT]" )
|
13
|
+
FakeWeb.register_uri(:delete, @incorrect_url, :body => "TEST", :signature => "[INCORRECT]" )
|
14
|
+
|
15
|
+
FakeWeb.register_uri(:get, @correct_url, :body => "TEST", :signature => Caren::Api.sign("TEST") )
|
16
|
+
FakeWeb.register_uri(:post, @correct_url, :body => "TEST", :signature => Caren::Api.sign("TEST") )
|
17
|
+
FakeWeb.register_uri(:put, @correct_url, :body => "TEST", :signature => Caren::Api.sign("TEST") )
|
18
|
+
FakeWeb.register_uri(:delete, @correct_url, :body => "TEST", :signature => Caren::Api.sign("TEST") )
|
19
|
+
|
20
|
+
errors = File.read "spec/fixtures/caren_care_provider_validation.xml"
|
21
|
+
unauth = File.read "spec/fixtures/caren_unauthorized.xml"
|
22
|
+
FakeWeb.register_uri(:get, @error_url, :status => 406, :body => errors, :signature => Caren::Api.sign(errors) )
|
23
|
+
FakeWeb.register_uri(:post, @error_url, :status => 406, :body => errors, :signature => Caren::Api.sign(errors) )
|
24
|
+
FakeWeb.register_uri(:put, @error_url, :status => 406, :body => errors, :signature => Caren::Api.sign(errors) )
|
25
|
+
FakeWeb.register_uri(:delete, @error_url, :status => 403, :body => unauth, :signature => Caren::Api.sign(unauth) )
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should not accept result swith an incorrect signature" do
|
29
|
+
lambda{ Caren::Api.get @incorrect_url }.should raise_error
|
30
|
+
lambda{ Caren::Api.post @incorrect_url, "" }.should raise_error
|
31
|
+
lambda{ Caren::Api.put @incorrect_url, "" }.should raise_error
|
32
|
+
lambda{ Caren::Api.delete @incorrect_url }.should raise_error
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should accept results with a correct signature" do
|
36
|
+
lambda{ Caren::Api.get @correct_url }.should_not raise_error
|
37
|
+
lambda{ Caren::Api.post @correct_url, "" }.should_not raise_error
|
38
|
+
lambda{ Caren::Api.put @correct_url, "" }.should_not raise_error
|
39
|
+
lambda{ Caren::Api.delete @correct_url }.should_not raise_error
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should be able to handle server side errors" do
|
43
|
+
|
44
|
+
lambda{ Caren::Api.get @error_url }.should raise_error(Caren::Exceptions::ServerSideError)
|
45
|
+
lambda{ Caren::Api.put @error_url, "" }.should raise_error(Caren::Exceptions::ServerSideError)
|
46
|
+
lambda{ Caren::Api.post @error_url, "" }.should raise_error(Caren::Exceptions::ServerSideError)
|
47
|
+
lambda{ Caren::Api.delete @error_url }.should raise_error(Caren::Exceptions::ServerSideError)
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should be able to handle authorization errors" do
|
52
|
+
begin
|
53
|
+
Caren::Api.delete @error_url
|
54
|
+
rescue Caren::Exceptions::ServerSideError => e
|
55
|
+
e.errors.should have(1).things
|
56
|
+
e.errors.first.class.should == Caren::Error
|
57
|
+
e.errors.first.category.should == "unauthorized"
|
58
|
+
e.errors.first.message.should == "You are not allowed to perform this action."
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should be able to handle validation errors" do
|
63
|
+
begin
|
64
|
+
Caren::Api.get @error_url
|
65
|
+
rescue Caren::Exceptions::ServerSideError => e
|
66
|
+
e.errors.should have(1).things
|
67
|
+
e.errors.first.class.should == Caren::ValidationError
|
68
|
+
e.errors.first.message.should == "has already been taken"
|
69
|
+
e.errors.first.field.should == :url_shortcut
|
70
|
+
e.errors.first.to_s.should == "`url_shortcut` has already been taken"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
data/spec/event_spec.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Event", "converting to xml" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@event_a = Caren::Event.new( :external_id => 1, :name => "Washing", :comment => "Real good", :start => "12:00",
|
7
|
+
:duration => 30, :valid_from => Date.today, :valid_to => Date.today+1.day,
|
8
|
+
:person_first_name => "Andre", :person_last_name => "Foeken", :person_male => true, :external_person_id => 100 )
|
9
|
+
|
10
|
+
@event_b = Caren::Event.new( :external_id => 2, :name => "Clothing", :comment => "Real bad",
|
11
|
+
:start => "13:00", :duration => 30, :valid_from => Date.today, :valid_to => Date.today+1.day,
|
12
|
+
:person_first_name => "Oscar", :person_last_name => "Foeken", :person_male => true, :external_person_id => 101 )
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should be able to convert an event to valid xml" do
|
16
|
+
@event_a.should convert_to_valid_caren_xml
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should be able to convert an array of events to valid xml" do
|
20
|
+
[@event_a,@event_b].should convert_to_valid_caren_array_xml
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "ExternalMessage", "converting to xml" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@external_message_a = Caren::ExternalMessage.new( :person_name => "Andre Foeken",
|
7
|
+
:external_person_id => 1,
|
8
|
+
:body => "Test message",
|
9
|
+
:external_id => 1,
|
10
|
+
:in_reply_to_id => nil )
|
11
|
+
|
12
|
+
@external_message_b = Caren::ExternalMessage.new( :person_name => "Ria Foeken",
|
13
|
+
:external_person_id => 2,
|
14
|
+
:body => "Test message reply",
|
15
|
+
:external_id => 2,
|
16
|
+
:in_reply_to_id => 99 )
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should be able to convert a link to valid xml" do
|
20
|
+
@external_message_a.should convert_to_valid_caren_xml
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should be able to convert an array of links to valid xml" do
|
24
|
+
[@external_message_a,@external_message_b].should convert_to_valid_caren_array_xml
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "ExternalMessage", "REST methods" do
|
30
|
+
|
31
|
+
before do
|
32
|
+
FakeWeb.register_uri(:post, Caren::ExternalMessage.resource_url(1), :status => 201, :signature => Caren::Api.sign )
|
33
|
+
FakeWeb.register_uri(:delete, Caren::ExternalMessage.resource_url(1,1), :signature => Caren::Api.sign )
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should be able to create an external message" do
|
37
|
+
lambda{ Caren::ExternalMessage.new( :person_name => "Andre Foeken",
|
38
|
+
:external_person_id => 1,
|
39
|
+
:body => "Test message",
|
40
|
+
:external_id => 1,
|
41
|
+
:subject_id => 1 ).create }.should_not raise_error
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should be able to delete an external message" do
|
45
|
+
lambda{ Caren::ExternalMessage.new( :subject_id => 1, :caren_id => 1 ).delete }.should_not raise_error
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
Binary file
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<care-providers type="array">
|
3
|
+
<care-provider>
|
4
|
+
<url-shortcut>demo</url-shortcut>
|
5
|
+
<name>Demo</name>
|
6
|
+
<created-at type="datetime">2011-10-10T10:38:13+02:00</created-at>
|
7
|
+
<address-line></address-line>
|
8
|
+
<updated-at type="datetime">2011-10-10T10:38:13+02:00</updated-at>
|
9
|
+
<lng type="float">5.29127</lng>
|
10
|
+
<id type="integer">1</id>
|
11
|
+
<website></website>
|
12
|
+
<telephone></telephone>
|
13
|
+
<time-zone>Europe/Amsterdam</time-zone>
|
14
|
+
<lat type="float">52.1326</lat>
|
15
|
+
<email></email>
|
16
|
+
<logo></logo>
|
17
|
+
<linkable>true</linkable>
|
18
|
+
</care-provider>
|
19
|
+
<care-provider>
|
20
|
+
<url-shortcut>pantein</url-shortcut>
|
21
|
+
<name>Pantein</name>
|
22
|
+
<created-at type="datetime">2011-10-10T14:19:53+02:00</created-at>
|
23
|
+
<address-line></address-line>
|
24
|
+
<updated-at type="datetime">2011-10-11T08:58:48+02:00</updated-at>
|
25
|
+
<lng type="float">5.29127</lng>
|
26
|
+
<id type="integer">2</id>
|
27
|
+
<website></website>
|
28
|
+
<telephone></telephone>
|
29
|
+
<time-zone>Europe/Amsterdam</time-zone>
|
30
|
+
<lat type="float">52.1326</lat>
|
31
|
+
<email></email>
|
32
|
+
<logo></logo>
|
33
|
+
<linkable>true</linkable>
|
34
|
+
</care-provider>
|
35
|
+
</care-providers>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<care-providers type="array">
|
3
|
+
<care-provider>
|
4
|
+
<url-shortcut>pantein</url-shortcut>
|
5
|
+
<name>Pantein</name>
|
6
|
+
<created-at type="datetime">2011-10-10T14:19:53+02:00</created-at>
|
7
|
+
<address-line></address-line>
|
8
|
+
<updated-at type="datetime">2011-10-11T08:58:48+02:00</updated-at>
|
9
|
+
<lng type="float">5.29127</lng>
|
10
|
+
<id type="integer">2</id>
|
11
|
+
<website></website>
|
12
|
+
<telephone></telephone>
|
13
|
+
<time-zone>Europe/Amsterdam</time-zone>
|
14
|
+
<lat type="float">52.1326</lat>
|
15
|
+
<email></email>
|
16
|
+
<logo></logo>
|
17
|
+
<linkable>true</linkable>
|
18
|
+
</care-provider>
|
19
|
+
</care-providers>
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<links type="array">
|
3
|
+
<link>
|
4
|
+
<created-at type="datetime">2011-10-10T10:38:49+02:00</created-at>
|
5
|
+
<updated-at type="datetime">2011-10-10T10:40:35+02:00</updated-at>
|
6
|
+
<id type="integer">1</id>
|
7
|
+
<care-provider-id type="integer">1</care-provider-id>
|
8
|
+
<person-id type="integer">3</person-id>
|
9
|
+
<person-name>Andre Foeken</person-name>
|
10
|
+
<person-photo>http://example.com/1.png</person-photo>
|
11
|
+
<external-id>1</external-id>
|
12
|
+
<status>confirmed</status>
|
13
|
+
</link>
|
14
|
+
<link>
|
15
|
+
<created-at type="datetime">2011-10-10T10:42:42+02:00</created-at>
|
16
|
+
<updated-at type="datetime">2011-10-10T10:53:07+02:00</updated-at>
|
17
|
+
<id type="integer">2</id>
|
18
|
+
<care-provider-id type="integer">1</care-provider-id>
|
19
|
+
<person-id type="integer">3</person-id>
|
20
|
+
<person-name>Andre Foeken</person-name>
|
21
|
+
<person-photo>http://example.com/1.png</person-photo>
|
22
|
+
<external-id>2</external-id>
|
23
|
+
<status>confirmed</status>
|
24
|
+
</link>
|
25
|
+
<link>
|
26
|
+
<created-at type="datetime">2011-10-10T11:05:28+02:00</created-at>
|
27
|
+
<updated-at type="datetime">2011-10-10T11:06:44+02:00</updated-at>
|
28
|
+
<id type="integer">3</id>
|
29
|
+
<care-provider-id type="integer">1</care-provider-id>
|
30
|
+
<person-id type="integer">3</person-id>
|
31
|
+
<person-name>Andre Foeken</person-name>
|
32
|
+
<person-photo>http://example.com/1.png</person-photo>
|
33
|
+
<external-id>3</external-id>
|
34
|
+
<status>confirmed</status>
|
35
|
+
</link>
|
36
|
+
</links>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<links type="array">
|
3
|
+
<link>
|
4
|
+
<created-at type="datetime">2011-10-10T10:38:49+02:00</created-at>
|
5
|
+
<updated-at type="datetime">2011-10-10T10:40:35+02:00</updated-at>
|
6
|
+
<id type="integer">1</id>
|
7
|
+
<care-provider-id type="integer">1</care-provider-id>
|
8
|
+
<person-id type="integer">3</person-id>
|
9
|
+
<person-name>Andre Foeken</person-name>
|
10
|
+
<person-photo>http://example.com/1.png</person-photo>
|
11
|
+
<external-id>1</external-id>
|
12
|
+
<status>confirmed</status>
|
13
|
+
</link>
|
14
|
+
</links>
|
data/spec/link_spec.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Link", "converting to xml" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@link_a = Caren::Link.new( :patient_number => "12345" )
|
7
|
+
@link_b = Caren::Link.new( :patient_number => "67890" )
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should be able to convert a link to valid xml" do
|
11
|
+
@link_a.should convert_to_valid_caren_xml
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should be able to convert an array of links to valid xml" do
|
15
|
+
[@link_a,@link_b].should convert_to_valid_caren_array_xml
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "Link", "REST methods" do
|
21
|
+
|
22
|
+
before do
|
23
|
+
links = File.read("spec/fixtures/caren_links.xml")
|
24
|
+
search = File.read("spec/fixtures/caren_links_search.xml")
|
25
|
+
FakeWeb.register_uri(:get, Caren::Link.resource_url, :body => links, :signature => Caren::Api.sign(links) )
|
26
|
+
FakeWeb.register_uri(:get, "#{Caren::Link.resource_url}?key=external-id&value=1", :body => search, :signature => Caren::Api.sign(search) )
|
27
|
+
FakeWeb.register_uri(:post, Caren::Link.resource_url, :status => 201, :signature => Caren::Api.sign )
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should be able to create a new link using the API" do
|
31
|
+
lambda{ Caren::Link.new( :patient_number => "12345" ).create }.should_not raise_error
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should be find all links using the API" do
|
35
|
+
links = Caren::Link.all
|
36
|
+
links.should have(3).things
|
37
|
+
links.first.status.should == "confirmed"
|
38
|
+
links.first.external_id.should == "1"
|
39
|
+
links.first.person_name.should == "Andre Foeken"
|
40
|
+
links.first.person_id.should == 3
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should be find a specific link using the API" do
|
44
|
+
links = Caren::Link.search(:external_id, 1)
|
45
|
+
links.should have(1).thing
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
data/spec/person_spec.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Person", "converting to xml" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@person_a = Caren::Person.new( :external_id => 1,
|
7
|
+
:uid => "ABC123",
|
8
|
+
:first_name => "Andre",
|
9
|
+
:last_name => "Foeken",
|
10
|
+
:male => true,
|
11
|
+
:date_of_birth => 80.years.ago.to_date,
|
12
|
+
:address_street => "Sesamestreet 1",
|
13
|
+
:address_zipcode => "7500AA",
|
14
|
+
:address_city => "Groenlo",
|
15
|
+
:address_country => "The Netherlands" )
|
16
|
+
|
17
|
+
@person_b = Caren::Person.new( :external_id => 2,
|
18
|
+
:uid => "ABC456",
|
19
|
+
:first_name => "Oscar",
|
20
|
+
:last_name => "Foeken",
|
21
|
+
:male => true,
|
22
|
+
:date_of_birth => 80.years.ago.to_date,
|
23
|
+
:address_street => "Sesamestreet 1",
|
24
|
+
:address_zipcode => "7500AA",
|
25
|
+
:address_city => "Groenlo",
|
26
|
+
:address_country => "The Netherlands" )
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should be able to convert a person to valid xml" do
|
30
|
+
@person_a.should convert_to_valid_caren_xml
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should be able to convert an array of people to valid xml" do
|
34
|
+
[@person_a,@person_b].should convert_to_valid_caren_array_xml
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
data/spec/spec.opts
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
+
require 'rubygems'
|
4
|
+
require 'caren-api'
|
5
|
+
require 'rspec'
|
6
|
+
require 'fakeweb'
|
7
|
+
require 'capybara'
|
8
|
+
|
9
|
+
Caren::Api.shared_key = "specs"
|
10
|
+
Caren::Api.url = "http://example.com"
|
11
|
+
|
12
|
+
FakeWeb.allow_net_connect = false
|
13
|
+
|
14
|
+
RSpec::Matchers.define :convert_to_valid_caren_xml do
|
15
|
+
match do |instance|
|
16
|
+
hash = Hash.from_xml(instance.to_xml)
|
17
|
+
keys = instance.as_xml.keys.map(&:to_s)
|
18
|
+
(hash[instance.class.node_root.to_s].keys - keys).should be_empty
|
19
|
+
keys.map{ |key| hash[instance.class.node_root.to_s][key].to_s == instance.send(key.to_sym).to_s }.inject(&:&)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
RSpec::Matchers.define :convert_to_valid_caren_array_xml do
|
24
|
+
match do |array|
|
25
|
+
hash = Hash.from_xml( array.first.class.to_xml(array) )
|
26
|
+
hash.keys.should eql [array.first.class.array_root.to_s]
|
27
|
+
array.each do |obj|
|
28
|
+
obj.should convert_to_valid_caren_xml
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
RSpec.configure do |config|
|
34
|
+
|
35
|
+
end
|