office_autopilot_api 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,4 @@
1
+ <result>
2
+ <sequence id="3">APPOINTMENT REMINDER</sequence>
3
+ <sequence id="4">foo sequence</sequence>
4
+ </result>
@@ -0,0 +1,99 @@
1
+ <result>
2
+ <contact id="" bulk_mail="">
3
+ <Group_Tag name="Contact Information">
4
+ <field name="First Name" type="text"/>
5
+ <field name="Last Name" type="text"/>
6
+ <field name="E-Mail" type="text"/>
7
+ <field name="Home Phone" type="phone"/>
8
+ <field name="Title" type="text"/>
9
+ <field name="Office Phone" type="text"/>
10
+ <field name="Cell Phone" type="phone"/>
11
+ <field name="Fax" type="text"/>
12
+ <field name="Address" type="text"/>
13
+ <field name="Company" type="text"/>
14
+ <field name="Address 2" type="text"/>
15
+ <field name="City" type="text"/>
16
+ <field name="State" type="state"/>
17
+ <field name="Zip Code" type="text"/>
18
+ <field name="Website " type="text"/>
19
+ <field name="Country" type="country"/>
20
+ <field name="Birthday" type="fulldate"/>
21
+ </Group_Tag>
22
+ <Group_Tag name="Lead Information">
23
+ <field name="Contact Owner" type=""/>
24
+ <field name="First Referrer" type=""/>
25
+ <field name="Last Referrer" type=""/>
26
+ <field name="Lead Source" type="tdrop">
27
+ <option>Adwords</option>
28
+ <option>Tradeshow</option>
29
+ <option>Business Card</option>
30
+ <option>Referral</option>
31
+ <option>Newspaper Ad</option>
32
+ </field>
33
+ <field name="Campaign" type="tdrop">
34
+ <option>Free Trial</option>
35
+ <option>20% Off</option>
36
+ <option>Mother's Day</option>
37
+ </field>
38
+ <field name="Ad" type="tdrop">
39
+ <option>Ad Version 1</option>
40
+ <option>Ad Version 2</option>
41
+ </field>
42
+ <field name="Media" type="tdrop">
43
+ <option>PPC</option>
44
+ <option>Direct Mail</option>
45
+ <option>Banner</option>
46
+ <option>Newspaper</option>
47
+ </field>
48
+ </Group_Tag>
49
+ <Group_Tag name="Sequences and Tags">
50
+ <field name="Sequences" type="sequence"/>
51
+ <field name="Contact Tags" type="list">
52
+ <list id="3">newleads</list>
53
+ <list id="4">old_leads</list>
54
+ <list id="5">legacy Leads</list>
55
+ </field>
56
+ </Group_Tag>
57
+ <Group_Tag name="PrecisoPro" editable="1">
58
+ <field name="Lead Status" type="tdrop" editable="1">
59
+ <option>INB-APP</option>
60
+ <option>OUTB-APP</option>
61
+ <option>REJECT-APP</option>
62
+ <option>ASSIGNED</option>
63
+ <option>NEW</option>
64
+ <option>CUSTOMER</option>
65
+ <option>NO SHOW</option>
66
+ </field>
67
+ <field name="Appointment For" type="text" editable="1"/>
68
+ <field name="Appointment Date" type="text" editable="1"/>
69
+ <field name="Appointment Time" type="text" editable="1"/>
70
+ <field name="Treatment" type="text" editable="1"/>
71
+ <field name="Contact Preference" type="tdrop" editable="1">
72
+ <option>Phone</option>
73
+ <option>Email</option>
74
+ </field>
75
+ <field name="Dentist Id" type="text" editable="1"/>
76
+ <field name="Dentist Name" type="text" editable="1"/>
77
+ <field name="Dentist Address" type="text" editable="1"/>
78
+ <field name="Dentist Email" type="text" editable="1"/>
79
+ <field name="Dentist Telephone" type="text" editable="1"/>
80
+ <field name="Expected CLV" type="text" editable="1"/>
81
+ <field name="Already Spent" type="text" editable="1"/>
82
+ <field name="Notes" type="longtext" editable="1"/>
83
+ </Group_Tag>
84
+ <Group_Tag name="Affiliate Data" editable="1">
85
+ <field name="Affiliate Program" type="aff_program"/>
86
+ <field name="Number of Sales" type="numeric"/>
87
+ <field name="$ Sales" type="price"/>
88
+ <field name="Affiliate Paypal" type="text"/>
89
+ </Group_Tag>
90
+ <Group_Tag name="Credit Card" editable="1">
91
+ <field name="Card Type" type="ndrop"/>
92
+ <field name="Card Expiration Month" type="tdrop"/>
93
+ <field name="Charge Result" type="tdrop"/>
94
+ <field name="Card Expiration Year" type="numeric"/>
95
+ <field name="Card Number (Last 4)" type="numeric"/>
96
+ <field name="Payment Center Link" type="Payment Center Link"/>
97
+ </Group_Tag>
98
+ </contact>
99
+ </result>
@@ -0,0 +1,5 @@
1
+ <result>
2
+ <tag id='3'>newleads</tag>
3
+ <tag id='4'>old_leads</tag>
4
+ <tag id='5'>legacy Leads</tag>
5
+ </result>
@@ -0,0 +1,198 @@
1
+ <result>
2
+ <contact id='8' date='1299674533' dlm='1299674554' score='0.00' purl='bobby' bulk_mail='1'>
3
+ <Group_Tag name='Contact Information'>
4
+ <field name="First Name">bobby</field>
5
+ <field name="Last Name">brown</field>
6
+ <field name="E-Mail">bobby@example.com</field>
7
+ <field name="Home Phone"/>
8
+ <field name="Title"/>
9
+ <field name="Office Phone"/>
10
+ <field name="Cell Phone"/>
11
+ <field name="Fax"/>
12
+ <field name="Address"/>
13
+ <field name="Company"/>
14
+ <field name="Address 2"/>
15
+ <field name="City"/>
16
+ <field name="State"/>
17
+ <field name="Zip Code"/>
18
+ <field name="Website "/>
19
+ <field name="Country"/>
20
+ <field name="Birthday"/>
21
+ </Group_Tag>
22
+ <Group_Tag name='Lead Information'>
23
+ <field name="Contact Owner">Jimbo Watunusi</field>
24
+ <field name="First Referrer"/>
25
+ <field name="Last Referrer"/>
26
+ <field name="Lead Source"/>
27
+ <field name="Campaign"/>
28
+ <field name="Ad"/>
29
+ <field name="Media"/>
30
+ </Group_Tag>
31
+ <Group_Tag name='Sequences and Tags'>
32
+ <field name="Sequences">*/*</field>
33
+ <field name="Contact Tags"/>
34
+ </Group_Tag>
35
+ <Group_Tag name='Purchase History'></Group_Tag>
36
+ <Group_Tag name='Most Recent Charge'>
37
+ <field name="Charge Amount">$0.00</field>
38
+ <field name="Charge Invoice #"/>
39
+ </Group_Tag>
40
+ <Group_Tag name='Affiliate Data'>
41
+ <field name="Affiliate Program"/>
42
+ <field name="Number of Sales"/>
43
+ <field name="$ Sales">$0.00</field>
44
+ <field name="Paypal E-mail"/>
45
+ <field name="Affiliate Paypal"/>
46
+ </Group_Tag>
47
+ <Group_Tag name='Most Recent Invoice'>
48
+ <field name="Invoice #"/>
49
+ <field name="Total Invoice Amount">$0.00</field>
50
+ </Group_Tag>
51
+ <Group_Tag name='Lead Status'>
52
+ <field name="Lead Status"/>
53
+ <field name="Preferencia Contacto"/>
54
+ </Group_Tag>
55
+ <Group_Tag name='Credit Card'>
56
+ <field name="Card Type"/>
57
+ <field name="Card Expiration Month"/>
58
+ <field name="Charge Result"/>
59
+ <field name="Card Expiration Year"/>
60
+ <field name="Card Number (Last 4)"/>
61
+ <field name="Payment Center Link"/>
62
+ </Group_Tag>
63
+ <Group_Tag name='Invoices'></Group_Tag>
64
+ <Group_Tag name='Subscriptions and Payment Plans'></Group_Tag>
65
+ <Group_Tag name='Website Subscribers'></Group_Tag>
66
+ </contact>
67
+ <contact id='5' date='1296056609' dlm='1296056694' score='0.00' purl='Paciente2' bulk_mail='1'>
68
+ <Group_Tag name='Contact Information'>
69
+ <field name="First Name">Ali</field>
70
+ <field name="Last Name">Maju</field>
71
+ <field name="E-Mail">ali@example.com</field>
72
+ <field name="Home Phone">1234</field>
73
+ <field name="Title"/>
74
+ <field name="Office Phone">1234123</field>
75
+ <field name="Cell Phone">123444</field>
76
+ <field name="Fax"/>
77
+ <field name="Address"/>
78
+ <field name="Company"/>
79
+ <field name="Address 2"/>
80
+ <field name="City"/>
81
+ <field name="State"/>
82
+ <field name="Zip Code"/>
83
+ <field name="Website "/>
84
+ <field name="Country"/>
85
+ <field name="Birthday"/>
86
+ </Group_Tag>
87
+ <Group_Tag name='Lead Information'>
88
+ <field name="Contact Owner">Jimbo Watunusi</field>
89
+ <field name="First Referrer"/>
90
+ <field name="Last Referrer"/>
91
+ <field name="Lead Source"/>
92
+ <field name="Campaign"/>
93
+ <field name="Ad"/>
94
+ <field name="Media"/>
95
+ </Group_Tag>
96
+ <Group_Tag name='Sequences and Tags'>
97
+ <field name="Sequences">*/*</field>
98
+ <field name="Contact Tags"/>
99
+ </Group_Tag>
100
+ <Group_Tag name='Purchase History'></Group_Tag>
101
+ <Group_Tag name='Most Recent Charge'>
102
+ <field name="Charge Amount">$0.00</field>
103
+ <field name="Charge Invoice #"/>
104
+ </Group_Tag>
105
+ <Group_Tag name='Affiliate Data'>
106
+ <field name="Affiliate Program"/>
107
+ <field name="Number of Sales"/>
108
+ <field name="$ Sales">$0.00</field>
109
+ <field name="Paypal E-mail"/>
110
+ <field name="Affiliate Paypal"/>
111
+ </Group_Tag>
112
+ <Group_Tag
113
+ name='Most Recent Invoice'>
114
+ <field name="Invoice #"/>
115
+ <field name="Total Invoice Amount">$0.00</field>
116
+ </Group_Tag>
117
+ <Group_Tag name='Lead Status'>
118
+ <field name="Lead Status">ASSIGNED</field>
119
+ <field name="Preferencia Contacto">Entre las 13 y 16</field>
120
+ </Group_Tag>
121
+ <Group_Tag name='Credit Card'>
122
+ <field name="Card Type"/>
123
+ <field name="Card Expiration Month"/>
124
+ <field name="Charge Result"/>
125
+ <field name="Card Expiration Year"/>
126
+ <field name="Card Number (Last 4)"/>
127
+ <field name="Payment Center Link"/>
128
+ </Group_Tag>
129
+ <Group_Tag name='Invoices'></Group_Tag>
130
+ <Group_Tag name='Subscriptions and Payment Plans'></Group_Tag>
131
+ <Group_Tag name='Website Subscribers'></Group_Tag>
132
+ </contact>
133
+ <contact id='7' date='1299671887' dlm='1299674450' score='0.00' purl='prashant' bulk_mail='1'>
134
+ <Group_Tag name='Contact Information'>
135
+ <field name="First Name">prashant</field>
136
+ <field name="Last Name">nadarajan</field>
137
+ <field name="E-Mail">prashant@example.com</field>
138
+ <field name="Home Phone"/>
139
+ <field name="Title"/>
140
+ <field name="Office Phone"/>
141
+ <field name="Cell Phone"/>
142
+ <field name="Fax"/>
143
+ <field name="Address"/>
144
+ <field name="Company"/>
145
+ <field name="Address 2"/>
146
+ <field name="City"/>
147
+ <field name="State"/>
148
+ <field name="Zip Code"/>
149
+ <field name="Website "/>
150
+ <field name="Country"/>
151
+ <field name="Birthday"/>
152
+ </Group_Tag>
153
+ <Group_Tag name='Lead Information'>
154
+ <field name="Contact Owner">Don Corleone</field>
155
+ <field name="First Referrer"/>
156
+ <field name="Last Referrer"/>
157
+ <field name="Lead Source"/>
158
+ <field name="Campaign"/>
159
+ <field name="Ad"/>
160
+ <field name="Media"/>
161
+ </Group_Tag>
162
+ <Group_Tag name='Sequences and Tags'>
163
+ <field name="Sequences">*/*</field>
164
+ <field name="Contact Tags"/>
165
+ </Group_Tag>
166
+ <Group_Tag name='Purchase History'></Group_Tag>
167
+ <Group_Tag name='Most Recent Charge'>
168
+ <field name="Charge Amount">$0.00</field>
169
+ <field name="Charge Invoice #"/>
170
+ </Group_Tag>
171
+ <Group_Tag name='Affiliate Data'>
172
+ <field name="Affiliate Program"/>
173
+ <field name="Number of Sales"/>
174
+ <field name="$ Sales">$0.00</field>
175
+ <field name="Paypal E-mail"/>
176
+ <field name="Affiliate Paypal"/>
177
+ </Group_Tag>
178
+ <Group_Tag name='Most Recent Invoice'>
179
+ <field name="Invoice #"/>
180
+ <field name="Total Invoice Amount">$0.00</field>
181
+ </Group_Tag>
182
+ <Group_Tag name='Lead Status'>
183
+ <field name="Lead Status"/>
184
+ <field name="Preferencia Contacto"/>
185
+ </Group_Tag>
186
+ <Group_Tag name='Credit Card'>
187
+ <field name="Card Type"/>
188
+ <field name="Card Expiration Month"/>
189
+ <field name="Charge Result"/>
190
+ <field name="Card Expiration Year"/>
191
+ <field name="Card Number (Last 4)"/>
192
+ <field name="Payment Center Link"/>
193
+ </Group_Tag>
194
+ <Group_Tag name='Invoices'></Group_Tag>
195
+ <Group_Tag name='Subscriptions and Payment Plans'></Group_Tag>
196
+ <Group_Tag name='Website Subscribers'></Group_Tag>
197
+ </contact>
198
+ </result>
@@ -0,0 +1,68 @@
1
+ <result>
2
+ <contact id='7' date='1299671887' dlm='1299674450' score='0.00' purl='prashant' bulk_mail='1'>
3
+ <Group_Tag name='Contact Information'>
4
+ <field name="First Name">prashant</field>
5
+ <field name="Last Name">nadarajan</field>
6
+ <field name="E-Mail">prashant@example.com</field>
7
+ <field name="Home Phone"/>
8
+ <field name="Title"/>
9
+ <field name="Office Phone"/>
10
+ <field name="Cell Phone"/>
11
+ <field name="Fax"/>
12
+ <field name="Address"/>
13
+ <field name="Company"/>
14
+ <field name="Address 2"/>
15
+ <field name="City"/>
16
+ <field name="State"/>
17
+ <field name="Zip Code"/>
18
+ <field name="Website "/>
19
+ <field name="Country"/>
20
+ <field name="Birthday"/>
21
+ </Group_Tag>
22
+ <Group_Tag name='Lead Information'>
23
+ <field name="Contact Owner">Don Corleone</field>
24
+ <field name="First Referrer"/>
25
+ <field name="Last Referrer"/>
26
+ <field name="Lead Source"/>
27
+ <field name="Campaign"/>
28
+ <field name="Ad"/>
29
+ <field name="Media"/>
30
+ </Group_Tag>
31
+ <Group_Tag name='Sequences and Tags'>
32
+ <field name="Sequences">*/*</field>
33
+ <field name="Contact Tags"/>
34
+ </Group_Tag>
35
+ <Group_Tag name='Purchase History'></Group_Tag>
36
+ <Group_Tag name='Most Recent Charge'>
37
+ <field name="Charge Amount">$0.00</field>
38
+ <field name="Charge Invoice #"/>
39
+ </Group_Tag>
40
+ <Group_Tag name='Affiliate Data'>
41
+ <field name="Affiliate Program"/>
42
+ <field name="Number of Sales"/>
43
+ <field name="$ Sales">$0.00</field>
44
+ <field name="Paypal E-mail"/>
45
+ <field name="Affiliate Paypal"/>
46
+ </Group_Tag>
47
+ <Group_Tag
48
+ name='Most Recent Invoice'>
49
+ <field name="Invoice #"/>
50
+ <field name="Total Invoice Amount">$0.00</field>
51
+ </Group_Tag>
52
+ <Group_Tag name='Lead Status'>
53
+ <field name="Lead Status"/>
54
+ <field name="Preferencia Contacto"/>
55
+ </Group_Tag>
56
+ <Group_Tag name='Credit Card'>
57
+ <field name="Card Type"/>
58
+ <field name="Card Expiration Month"/>
59
+ <field name="Charge Result"/>
60
+ <field name="Card Expiration Year"/>
61
+ <field name="Card Number (Last 4)"/>
62
+ <field name="Payment Center Link"/>
63
+ </Group_Tag>
64
+ <Group_Tag name='Invoices'></Group_Tag>
65
+ <Group_Tag name='Subscriptions and Payment Plans'></Group_Tag>
66
+ <Group_Tag name='Website Subscribers'></Group_Tag>
67
+ </contact>
68
+ </result>
@@ -0,0 +1,3 @@
1
+ <result>failure
2
+ <error>Invalid Contact Ids</error>
3
+ </result>
@@ -0,0 +1,3 @@
1
+ <result>failure
2
+ <error>Invalid XML</error>
3
+ </result>
@@ -0,0 +1,243 @@
1
+ require 'spec_helper'
2
+
3
+ describe OfficeAutopilotApi::Client::Contacts do
4
+
5
+ before do
6
+ @contact_endpoint = "#{api_endpoint}/cdata.php"
7
+ @client = OfficeAutopilotApi::Client.new(:api_id => 'xxx', :api_key => 'xxx')
8
+ @auth_str = "Appid=#{@client.api_id}&Key=#{@client.api_key}"
9
+ end
10
+
11
+ def request_body(req_type, options = {})
12
+ options = { 'reqType' => req_type }.merge(options)
13
+
14
+ query = ''
15
+ options.each do |key, value|
16
+ if key == "data"
17
+ value = escape_xml(value)
18
+ end
19
+ query << "#{key}=#{value}&"
20
+ end
21
+ query << @auth_str
22
+ end
23
+
24
+ describe "#xml_for_search" do
25
+ # <search>
26
+ # <equation>
27
+ # <field>E-Mail</field>
28
+ # <op>e</op>
29
+ # <value>john@example.com</value>
30
+ # </equation>
31
+ # </search>
32
+
33
+ context "searching with one field" do
34
+ it "returns a valid simple search data xml" do
35
+ field = "E-Mail"
36
+ op = "e"
37
+ value = "john@example.com"
38
+
39
+ xml = Nokogiri::XML(@client.send(:xml_for_search, { :field => field, :op => op, :value => value }) )
40
+ xml.at_css('field').content.should == field
41
+ xml.at_css('op').content.should == op
42
+ xml.at_css('value').content.should == value
43
+ end
44
+ end
45
+
46
+ context "searching with more than one field" do
47
+ it "returns a valid multi search data xml" do
48
+ search_options = [
49
+ {:field => 'E-Mail', :op => 'e', :value => 'foo@example.com'},
50
+ {:field => 'Contact Tags', :op => 'n', :value => 'bar'},
51
+ ]
52
+
53
+ xml = @client.send(:xml_for_search, search_options)
54
+ xml = Nokogiri::XML(xml)
55
+ xml.css('field')[0].content.should == 'E-Mail'
56
+ xml.css('op')[0].content.should == 'e'
57
+ xml.css('value')[0].content.should == 'foo@example.com'
58
+
59
+ xml.css('field')[1].content.should == 'Contact Tags'
60
+ xml.css('op')[1].content.should == 'n'
61
+ xml.css('value')[1].content.should == 'bar'
62
+ end
63
+ end
64
+ end
65
+
66
+ describe "#contacts_search" do
67
+ it "returns the matched contacts" do
68
+ search_options = {:field => 'E-Mail', :op => 'e', :value => 'prashant@example.com'}
69
+ search_xml = @client.send(:xml_for_search, search_options)
70
+ contacts_xml = test_data('contacts_search_single_response.xml')
71
+
72
+ request_body = request_body('search', 'data' => search_xml)
73
+ stub_request(:post, @contact_endpoint).with(:body => request_body).to_return(:body => contacts_xml)
74
+
75
+ contacts = @client.contacts_search(search_options)
76
+ WebMock.should have_requested(:post, @contact_endpoint).with(:body => request_body)
77
+ contacts.should == @client.send(:parse_contacts_xml, contacts_xml)
78
+ end
79
+ end
80
+
81
+ describe "#xml_for_contact" do
82
+ before do
83
+ @contact_options = {
84
+ 'Contact Information' => {'First Name' => 'Bob', 'Last Name' => 'Foo', 'E-Mail' => 'b@example.com'},
85
+ 'Lead Information' => {'Contact Owner' => 'Mr Bar'}
86
+ }
87
+ end
88
+
89
+ it "returns a valid contacts xml" do
90
+ xml = @client.send(:xml_for_contact, @contact_options)
91
+ xml = Nokogiri::XML(xml)
92
+
93
+ xml.at_css('contact')['id'].should be_nil
94
+
95
+ contact_info = xml.css("contact Group_Tag[name='Contact Information']")
96
+ contact_info.at_css("field[name='First Name']").content.should == 'Bob'
97
+ contact_info.at_css("field[name='Last Name']").content.should == 'Foo'
98
+
99
+ lead_info = xml.css("contact Group_Tag[name='Lead Information']")
100
+ lead_info.at_css("field[name='Contact Owner']").content.should == 'Mr Bar'
101
+ end
102
+
103
+ context "when 'id' is specified" do
104
+ it "returns a valid contact xml containing the contact id" do
105
+ @contact_options.merge!('id' => '1234')
106
+ xml = Nokogiri::XML( @client.send(:xml_for_contact, @contact_options) )
107
+
108
+ xml.at_css('contact')['id'].should == '1234'
109
+ contact_info = xml.css("contact Group_Tag[name='Contact Information']")
110
+ contact_info.at_css("field[name='First Name']").content.should == 'Bob'
111
+ contact_info.at_css("field[name='Last Name']").content.should == 'Foo'
112
+
113
+ lead_info = xml.css("contact Group_Tag[name='Lead Information']")
114
+ lead_info.at_css("field[name='Contact Owner']").content.should == 'Mr Bar'
115
+ end
116
+ end
117
+ end
118
+
119
+ describe "#parse_contacts_xml" do
120
+ context "when the results contain one contact" do
121
+ it "returns an array containing the contact" do
122
+ contacts = @client.send(:parse_contacts_xml, test_data('contacts_search_single_response.xml'))
123
+
124
+ contacts.size.should == 1
125
+
126
+ contacts.each do |contact|
127
+ contact['id'].should == '7'
128
+ contact['Contact Information']['First Name'].should == 'prashant'
129
+ contact['Contact Information']['Last Name'].should == 'nadarajan'
130
+ contact['Contact Information']['E-Mail'].should == 'prashant@example.com'
131
+ contact['Lead Information']['Contact Owner'].should == 'Don Corleone'
132
+ end
133
+ end
134
+ end
135
+
136
+ context "when the results contain more than one contact" do
137
+ it "returns an array containing the contacts" do
138
+ contacts = @client.send(:parse_contacts_xml, test_data('contacts_search_multiple_response.xml'))
139
+
140
+ contacts.size.should == 3
141
+
142
+ contacts[0]['id'].should == '8'
143
+ contacts[0]['Contact Information']['E-Mail'].should == 'bobby@example.com'
144
+ contacts[0]['Lead Information']['Contact Owner'].should == 'Jimbo Watunusi'
145
+
146
+ contacts[1]['id'].should == '5'
147
+ contacts[1]['Contact Information']['E-Mail'].should == 'ali@example.com'
148
+ contacts[1]['Lead Information']['Contact Owner'].should == 'Jimbo Watunusi'
149
+ end
150
+ end
151
+ end
152
+
153
+ describe "#contacts_add" do
154
+ it "returns the newly created contact" do
155
+ contact_options = {
156
+ 'Contact Information' => {'First Name' => 'prashant', 'Last Name' => 'nadarajan', 'E-Mail' => 'prashant@example.com'},
157
+ 'Lead Information' => {'Contact Owner' => 'Don Corleone'}
158
+ }
159
+
160
+ request_contact_xml = @client.send(:xml_for_contact, contact_options)
161
+ response_contact_xml = test_data('contacts_add_response.xml')
162
+
163
+ request_body = request_body('add', 'return_id' => '1', 'data' => request_contact_xml)
164
+ stub_request(:post, @contact_endpoint).with(:body => request_body).to_return(:body => response_contact_xml)
165
+
166
+ contact = @client.contacts_add(contact_options)
167
+ WebMock.should have_requested(:post, @contact_endpoint).with(:body => request_body)
168
+
169
+ contact['id'].should == '7'
170
+ contact['Contact Information']['First Name'].should == 'prashant'
171
+ contact['Contact Information']['Last Name'].should == 'nadarajan'
172
+ contact['Contact Information']['E-Mail'].should == 'prashant@example.com'
173
+ contact['Lead Information']['Contact Owner'].should == 'Don Corleone'
174
+ end
175
+ end
176
+
177
+ describe "#contacts_pull_tag" do
178
+ it "returns all the contact tag names and ids" do
179
+ pull_tags_xml = test_data('contacts_pull_tags.xml')
180
+ stub_request(:post, @contact_endpoint).with(:body => request_body('pull_tag')).to_return(:body => pull_tags_xml)
181
+
182
+ tags = @client.contacts_pull_tag
183
+ tags['3'].should == 'newleads'
184
+ tags['4'].should == 'old_leads'
185
+ tags['5'].should == 'legacy Leads'
186
+ end
187
+ end
188
+
189
+ describe "#contacts_fetch_sequences" do
190
+ it "returns all the available contact sequences" do
191
+ xml = test_data('contacts_fetch_sequences.xml')
192
+ stub_request(:post, @contact_endpoint).with(:body => request_body('fetch_sequences')).to_return(:body => xml)
193
+ sequences = @client.contacts_fetch_sequences
194
+ sequences['3'].should == 'APPOINTMENT REMINDER'
195
+ sequences['4'].should == 'foo sequence'
196
+ end
197
+ end
198
+
199
+ describe "#contacts_key" do
200
+ it "returns information on the contact data structure" do
201
+ xml = test_data('contacts_key_type.xml')
202
+ stub_request(:post, @contact_endpoint).with(:body => request_body('key')).to_return(:body => xml)
203
+
204
+ result = @client.contacts_key
205
+ result["Contact Information"]["editable"].should be_false
206
+ result["Contact Information"]["fields"]["Cell Phone"]["editable"].should be_false
207
+ result["Contact Information"]["fields"]["Cell Phone"]["type"].should == "phone"
208
+ result["Contact Information"]["fields"]["Birthday"]["type"].should == "fulldate"
209
+
210
+ result["Lead Information"]["fields"]["Lead Source"]["type"].should == "tdrop"
211
+ result["Lead Information"]["fields"]["Lead Source"]["options"][0].should == "Adwords"
212
+ result["Lead Information"]["fields"]["Lead Source"]["options"][4].should == "Newspaper Ad"
213
+
214
+ result["Sequences and Tags"]["fields"]["Contact Tags"]["type"].should == "list"
215
+ result["Sequences and Tags"]["fields"]["Contact Tags"]["list"]["5"].should == "legacy Leads"
216
+
217
+ result["PrecisoPro"]["editable"].should be_true
218
+ result["PrecisoPro"]["fields"]["Lead Status"]["editable"].should be_true
219
+ end
220
+ end
221
+
222
+ describe "#contacts_fetch" do
223
+ context "when all the ids exists" do
224
+ it "returns the contacts" do
225
+ xml_response = test_data('contacts_search_multiple_response.xml')
226
+ xml_request = "<contact_id>8</contact_id><contact_id>5</contact_id><contact_id>7</contact_id>"
227
+ stub_request(:post, @contact_endpoint).with(:body => request_body('fetch', 'data' => xml_request )).to_return(:body => xml_response)
228
+
229
+ results = @client.contacts_fetch([8, 5, 7])
230
+ results.size.should == 3
231
+ results[0]["Contact Information"].should_not be_nil
232
+ end
233
+ end
234
+
235
+ context "when some of the ids don't exist" do
236
+ pending
237
+ end
238
+
239
+ context "when all the ids don't exist" do
240
+ pending
241
+ end
242
+ end
243
+ end