ecircle_soap_client 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,220 @@
1
+ require File.dirname(__FILE__)+'/helper'
2
+ require 'ostruct'
3
+
4
+ class TestEcircleSoapClientUser < Test::Unit::TestCase
5
+
6
+ def setup
7
+ config_soap_client
8
+
9
+ @example_user_string = Savon::SOAP::XML.new.xml do |x|
10
+ x.user(:id => "4130268167") do |u|
11
+ u.email("bill@microsoft.com")
12
+ u.title("-1")
13
+ u.firstname("Bill")
14
+ u.lastname("Gates")
15
+ u.nickname("")
16
+ u.dob_dd("")
17
+ u.dob_mm("")
18
+ u.dob_yyyy("")
19
+ u.countrycode("US")
20
+ u.languagecode("en")
21
+ 9.times do |idx|
22
+ u.instance_eval "cust_attr_#{idx+1}('')"
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ context "Ecircle::User" do
29
+
30
+ should "class method for getting group id from either group object or other value" do
31
+ [ ["1", 1], ["2", "2"], ["", ""], ["", nil] ].each do |expval, val|
32
+ assert_equal expval, Ecircle::User.group_id(val), "Failed for #{expval} / #{val}"
33
+ end
34
+
35
+ grp = Ecircle::Group.new
36
+ [ ["1", 1], ["2", "2"], ["", ""], ["", nil] ].each do |expval, val|
37
+ grp.id = val
38
+ assert_equal expval, Ecircle::User.group_id(grp), "Failed for #{expval} / #{val}"
39
+ end
40
+ end
41
+
42
+ should "return nil when user can't be found" do
43
+ mock_response(in_soap_body do
44
+ <<-SOAP
45
+ <LookupUserByEmailResponse xmlns="">
46
+ <ns1:lookupUserByEmailReturn xsi:nil="true" xmlns:ns1="http://webservices.ecircleag.com/rpcns"/>
47
+ </LookupUserByEmailResponse>
48
+ SOAP
49
+ end)
50
+ assert_equal(nil, Ecircle::User.find_by_email("bogus"))
51
+ end
52
+
53
+ should "be able to create via email" do
54
+ user, email, req_obj = Ecircle::User.new, "this@is.the.email.org", Object.new
55
+
56
+ user.email = email
57
+ user.title = "-1"
58
+
59
+ mock(req_obj).create_user(:userXmlSpec => user.to_xml) { "thisisid" }
60
+ mock(Ecircle).client { req_obj }
61
+
62
+ user = Ecircle::User.create_by_email(email)
63
+ assert_equal "thisisid", user.id
64
+ assert_equal email, user.email
65
+ end
66
+
67
+ should "return the group ids of a user" do
68
+ id1, id2 = "123", "456"
69
+ mock_response(in_soap_body do
70
+ <<-SOAP
71
+ <FindMembershipsByEmailResponse xmlns="">
72
+ <ns1:findMembershipsByEmailReturn xmlns:ns1="http://webservices.ecircleag.com/rpcns">#{id1}</ns1:findMembershipsByEmailReturn>
73
+ <ns2:findMembershipsByEmailReturn xmlns:ns2="http://webservices.ecircleag.com/rpcns">#{id2}</ns2:findMembershipsByEmailReturn>
74
+ </FindMembershipsByEmailResponse>
75
+ SOAP
76
+ end)
77
+ user = Ecircle::User.new
78
+ user.email = "bla@example.com"
79
+ assert_equal([id1, id2], user.group_ids)
80
+ end
81
+
82
+ should "return an array even if there is only one membership" do
83
+ id1 = "123"
84
+ mock_response(in_soap_body do
85
+ <<-SOAP
86
+ <FindMembershipsByEmailResponse xmlns="">
87
+ <ns1:findMembershipsByEmailReturn xmlns:ns1="http://webservices.ecircleag.com/rpcns">#{id1}</ns1:findMembershipsByEmailReturn>
88
+ </FindMembershipsByEmailResponse>
89
+ SOAP
90
+ end)
91
+ user = Ecircle::User.new
92
+ user.email = "bla@example.com"
93
+ assert_equal([id1], user.group_ids)
94
+ end
95
+
96
+ should "return an empty array if there is no membership" do
97
+ mock_response(in_soap_body do
98
+ <<-SOAP
99
+ <FindMembershipsByEmailResponse xmlns="">
100
+ <ns1:findMembershipsByEmailReturn xsi:nil="true" xmlns:ns1="http://webservices.ecircleag.com/rpcns"/>
101
+ </FindMembershipsByEmailResponse>
102
+ SOAP
103
+ end)
104
+ user = Ecircle::User.new
105
+ user.email = "bla@example.com"
106
+ assert_equal([], user.group_ids)
107
+ end
108
+
109
+ should "return all groups with groups" do
110
+ user = Ecircle::User.new
111
+ mock(user).group_ids { [1] }
112
+ mock(Ecircle::Group).find_by_id(1) { "imagroup" }
113
+ assert_equal(["imagroup"], user.groups)
114
+ end
115
+
116
+ should "return all groups with memberships" do
117
+ user = Ecircle::User.new
118
+ mock(user).group_ids { [1,2] }
119
+ mock(Ecircle::Group).find_by_id(1) { "imagroup" }
120
+ mock(Ecircle::Group).find_by_id(2) { "fubar" }
121
+ assert_equal(["imagroup", "fubar"], user.memberships)
122
+ end
123
+
124
+ should "return the inclusion into a group by id or group" do
125
+ user = Ecircle::User.new
126
+ mock(user).group_ids.any_number_of_times { ["1", "42", "64"] }
127
+ assert user.in_group?("42")
128
+ assert !user.in_group?("43")
129
+ grp = Ecircle::Group.new
130
+ grp.id = "1"
131
+ assert user.in_group?(grp)
132
+ grp.id = "0"
133
+ assert !user.in_group?(grp)
134
+ end
135
+
136
+ should "be able to unsubscribe from a group by using the group id" do
137
+ user, email, req_obj = Ecircle::User.new, "this@is.the.email.org", Object.new
138
+
139
+ user.email = email
140
+ group_id = 123456
141
+
142
+ mock(req_obj).unsubscribe_member_by_email(
143
+ :groupId => "123456",
144
+ :email => email,
145
+ :sendMessage => false
146
+ ) { true }
147
+ mock(Ecircle).client { req_obj }
148
+
149
+ assert user.leave_group(group_id)
150
+ end
151
+
152
+ should "be able to unsubscribe from a group by using a group object" do
153
+ user, email, req_obj = Ecircle::User.new, "this@is.the.email.org", Object.new
154
+
155
+ user.email = email
156
+
157
+ group = Ecircle::Group.new
158
+ group.id = "123456"
159
+
160
+ mock(req_obj).unsubscribe_member_by_email(
161
+ :groupId => "123456",
162
+ :email => email,
163
+ :sendMessage => false
164
+ ) { true }
165
+ mock(Ecircle).client { req_obj }
166
+
167
+ assert user.leave_group(group)
168
+ end
169
+
170
+ should "support namedattr's for defining custom values" do
171
+ attrs = {
172
+ "fubar" => "value",
173
+ "attr2" => "bill's",
174
+ "attr3" => "miracle",
175
+ "attr4" => "adventure",
176
+ "attr5" => "inwonderland",
177
+ }
178
+
179
+ complex_user_string = Savon::SOAP::XML.new.xml do |x|
180
+ x.user(:id => "4130268167") do |u|
181
+ attrs.each do |key,value|
182
+ x.namedattr({:name => key}, value)
183
+ end
184
+ end
185
+ end
186
+
187
+ user = Ecircle::User.new(complex_user_string)
188
+ attrs.each do |key,value|
189
+ assert_equal value, user.named_attrs[key], "FAILED for #{key}"
190
+ end
191
+ end
192
+
193
+ should "be able to generate xml from user" do
194
+ user = Ecircle::User.new(@example_user_string)
195
+ assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?><user id=\"4130268167\">"+
196
+ "<email>bill@microsoft.com</email><title>-1</title><firstname>Bill<"+
197
+ "/firstname><lastname>Gates</lastname><nickname></nickname><dob_dd>"+
198
+ "</dob_dd><dob_mm></dob_mm><dob_yyyy></dob_yyyy><countrycode>US</co"+
199
+ "untrycode><languagecode>en</languagecode><cust_attr_1></cust_attr_"+
200
+ "1><cust_attr_2></cust_attr_2><cust_attr_3></cust_attr_3><cust_attr"+
201
+ "_4></cust_attr_4><cust_attr_5></cust_attr_5><cust_attr_6></cust_at"+
202
+ "tr_6><cust_attr_7></cust_attr_7><cust_attr_8></cust_attr_8><cust_a"+
203
+ "ttr_9></cust_attr_9></user>", user.to_xml)
204
+ end
205
+
206
+ should "be instantiable from xml string" do
207
+ user = Ecircle::User.new(@example_user_string)
208
+
209
+ assert_equal "4130268167", user.id
210
+ assert_equal "bill@microsoft.com", user.email
211
+ assert_equal "bill@microsoft.com", user[:email]
212
+ assert_equal "bill@microsoft.com", user["email"]
213
+ assert_equal "US", user[:countrycode]
214
+ assert_equal "en", user[:languagecode]
215
+ 9.times do |idx|
216
+ assert_equal "", user["cust_attr_#{idx+1}"], "Failed for cust_attr_#{idx+1}"
217
+ end
218
+ end
219
+ end
220
+ end
metadata ADDED
@@ -0,0 +1,288 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ecircle_soap_client
3
+ version: !ruby/object:Gem::Version
4
+ hash: 21
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 5
10
+ version: 0.0.5
11
+ platform: ruby
12
+ authors:
13
+ - Gerrit Riessen
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-09-01 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ version_requirements: &id001 !ruby/object:Gem::Requirement
22
+ none: false
23
+ requirements:
24
+ - - "="
25
+ - !ruby/object:Gem::Version
26
+ hash: 49
27
+ segments:
28
+ - 0
29
+ - 8
30
+ - 7
31
+ version: 0.8.7
32
+ name: rake
33
+ prerelease: false
34
+ type: :runtime
35
+ requirement: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ version_requirements: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ name: savon
47
+ prerelease: false
48
+ type: :runtime
49
+ requirement: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ version_requirements: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ name: nokogiri
61
+ prerelease: false
62
+ type: :runtime
63
+ requirement: *id003
64
+ - !ruby/object:Gem::Dependency
65
+ version_requirements: &id004 !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ hash: 3
71
+ segments:
72
+ - 0
73
+ version: "0"
74
+ name: multipart-post
75
+ prerelease: false
76
+ type: :runtime
77
+ requirement: *id004
78
+ - !ruby/object:Gem::Dependency
79
+ version_requirements: &id005 !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ hash: 3
85
+ segments:
86
+ - 0
87
+ version: "0"
88
+ name: uuidtools
89
+ prerelease: false
90
+ type: :runtime
91
+ requirement: *id005
92
+ - !ruby/object:Gem::Dependency
93
+ version_requirements: &id006 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ hash: 3
99
+ segments:
100
+ - 0
101
+ version: "0"
102
+ name: pry
103
+ prerelease: false
104
+ type: :development
105
+ requirement: *id006
106
+ - !ruby/object:Gem::Dependency
107
+ version_requirements: &id007 !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ hash: 3
113
+ segments:
114
+ - 0
115
+ version: "0"
116
+ name: pry-doc
117
+ prerelease: false
118
+ type: :development
119
+ requirement: *id007
120
+ - !ruby/object:Gem::Dependency
121
+ version_requirements: &id008 !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ hash: 3
127
+ segments:
128
+ - 0
129
+ version: "0"
130
+ name: gist
131
+ prerelease: false
132
+ type: :development
133
+ requirement: *id008
134
+ - !ruby/object:Gem::Dependency
135
+ version_requirements: &id009 !ruby/object:Gem::Requirement
136
+ none: false
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ hash: 3
141
+ segments:
142
+ - 0
143
+ version: "0"
144
+ name: thoughtbot-shoulda
145
+ prerelease: false
146
+ type: :development
147
+ requirement: *id009
148
+ - !ruby/object:Gem::Dependency
149
+ version_requirements: &id010 !ruby/object:Gem::Requirement
150
+ none: false
151
+ requirements:
152
+ - - ~>
153
+ - !ruby/object:Gem::Version
154
+ hash: 23
155
+ segments:
156
+ - 1
157
+ - 0
158
+ - 0
159
+ version: 1.0.0
160
+ name: bundler
161
+ prerelease: false
162
+ type: :development
163
+ requirement: *id010
164
+ - !ruby/object:Gem::Dependency
165
+ version_requirements: &id011 !ruby/object:Gem::Requirement
166
+ none: false
167
+ requirements:
168
+ - - ~>
169
+ - !ruby/object:Gem::Version
170
+ hash: 7
171
+ segments:
172
+ - 1
173
+ - 6
174
+ - 4
175
+ version: 1.6.4
176
+ name: jeweler
177
+ prerelease: false
178
+ type: :development
179
+ requirement: *id011
180
+ - !ruby/object:Gem::Dependency
181
+ version_requirements: &id012 !ruby/object:Gem::Requirement
182
+ none: false
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ hash: 3
187
+ segments:
188
+ - 0
189
+ version: "0"
190
+ name: rcov
191
+ prerelease: false
192
+ type: :development
193
+ requirement: *id012
194
+ - !ruby/object:Gem::Dependency
195
+ version_requirements: &id013 !ruby/object:Gem::Requirement
196
+ none: false
197
+ requirements:
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ hash: 3
201
+ segments:
202
+ - 0
203
+ version: "0"
204
+ name: rr
205
+ prerelease: false
206
+ type: :development
207
+ requirement: *id013
208
+ - !ruby/object:Gem::Dependency
209
+ version_requirements: &id014 !ruby/object:Gem::Requirement
210
+ none: false
211
+ requirements:
212
+ - - ">="
213
+ - !ruby/object:Gem::Version
214
+ hash: 3
215
+ segments:
216
+ - 0
217
+ version: "0"
218
+ name: cheat
219
+ prerelease: false
220
+ type: :development
221
+ requirement: *id014
222
+ description: See summary.
223
+ email: gerrit.riessen@gmail.com
224
+ executables: []
225
+
226
+ extensions: []
227
+
228
+ extra_rdoc_files:
229
+ - README.md
230
+ files:
231
+ - .document
232
+ - .rvmrc
233
+ - Gemfile
234
+ - README.md
235
+ - Rakefile
236
+ - VERSION
237
+ - ecircle_soap_client.gemspec
238
+ - lib/ecircle/base.rb
239
+ - lib/ecircle/client.rb
240
+ - lib/ecircle/configuration.rb
241
+ - lib/ecircle/group.rb
242
+ - lib/ecircle/member.rb
243
+ - lib/ecircle/message.rb
244
+ - lib/ecircle/user.rb
245
+ - lib/ecircle_soap_client.rb
246
+ - start_pry_with_ecircle
247
+ - test/.login.yml.sample
248
+ - test/helper.rb
249
+ - test/test_ecircle_soap_client.rb
250
+ - test/test_ecircle_soap_client_group.rb
251
+ - test/test_ecircle_soap_client_member.rb
252
+ - test/test_ecircle_soap_client_message.rb
253
+ - test/test_ecircle_soap_client_user.rb
254
+ homepage: http://google.com/search?q=ecircle
255
+ licenses:
256
+ - MIT
257
+ post_install_message:
258
+ rdoc_options: []
259
+
260
+ require_paths:
261
+ - lib
262
+ required_ruby_version: !ruby/object:Gem::Requirement
263
+ none: false
264
+ requirements:
265
+ - - ">="
266
+ - !ruby/object:Gem::Version
267
+ hash: 3
268
+ segments:
269
+ - 0
270
+ version: "0"
271
+ required_rubygems_version: !ruby/object:Gem::Requirement
272
+ none: false
273
+ requirements:
274
+ - - ">="
275
+ - !ruby/object:Gem::Version
276
+ hash: 3
277
+ segments:
278
+ - 0
279
+ version: "0"
280
+ requirements: []
281
+
282
+ rubyforge_project:
283
+ rubygems_version: 1.8.10
284
+ signing_key:
285
+ specification_version: 3
286
+ summary: Ecircle SOAP client for synchron API
287
+ test_files: []
288
+