xednese 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -1
  3. data/README.md +22 -3
  4. data/Rakefile +8 -2
  5. data/bin/xednese +16 -0
  6. data/lib/xednese.rb +36 -9
  7. data/lib/xednese/account.rb +37 -0
  8. data/lib/xednese/account/dispatcher.rb +30 -0
  9. data/lib/xednese/account/messages.rb +47 -0
  10. data/lib/xednese/accounts.rb +14 -6
  11. data/lib/xednese/batch.rb +68 -0
  12. data/lib/xednese/batches.rb +33 -0
  13. data/lib/xednese/client.rb +46 -0
  14. data/lib/xednese/messages.rb +24 -0
  15. data/lib/xednese/requests/account.rb +17 -0
  16. data/lib/xednese/requests/batch.rb +17 -0
  17. data/lib/xednese/requests/messages.rb +1 -1
  18. data/lib/xednese/responses/batch.rb +20 -0
  19. data/lib/xednese/responses/batches.rb +15 -0
  20. data/lib/xednese/responses/status.rb +22 -0
  21. data/lib/xednese/users.rb +3 -8
  22. data/lib/xednese/version.rb +1 -1
  23. data/scenarios/accounts/getting_all_accounts.rb +37 -0
  24. data/scenarios/accounts/getting_an_account.rb +29 -0
  25. data/scenarios/helper.rb +113 -0
  26. data/spec/helper.rb +3 -3
  27. data/spec/xednese/{dispatcher_spec.rb → account/dispatcher_spec.rb} +5 -4
  28. data/spec/xednese/account/messages_spec.rb +56 -0
  29. data/spec/xednese/account_spec.rb +93 -0
  30. data/spec/xednese/accounts_spec.rb +19 -14
  31. data/spec/xednese/batch_spec.rb +121 -0
  32. data/spec/xednese/batches_spec.rb +70 -0
  33. data/spec/xednese/client_spec.rb +76 -2
  34. data/spec/xednese/messages_spec.rb +25 -1
  35. data/spec/xednese/requests/account_spec.rb +20 -0
  36. data/spec/xednese/requests/batch_spec.rb +20 -0
  37. data/spec/xednese/requests/messages_spec.rb +1 -1
  38. data/spec/xednese/responses/account_spec.rb +1 -1
  39. data/spec/xednese/responses/accounts_spec.rb +1 -1
  40. data/spec/xednese/responses/batch_spec.rb +83 -0
  41. data/spec/xednese/responses/batches_spec.rb +95 -0
  42. data/spec/xednese/responses/message_dispatcher_headers_spec.rb +1 -1
  43. data/spec/xednese/responses/message_header_spec.rb +1 -1
  44. data/spec/xednese/responses/message_headers_spec.rb +1 -1
  45. data/spec/xednese/responses/status_spec.rb +55 -0
  46. data/spec/xednese/users_spec.rb +1 -12
  47. data/spec/xednese_spec.rb +52 -12
  48. metadata +58 -8
  49. data/lib/xednese/dispatcher.rb +0 -20
@@ -1,4 +1,4 @@
1
- require_relative '../helper'
1
+ require 'helper'
2
2
 
3
3
  describe Esendex::Messages do
4
4
  subject { dummy_esendex }
@@ -28,6 +28,30 @@ describe Esendex::Messages do
28
28
  end
29
29
  end
30
30
 
31
+ describe '#received' do
32
+ let(:xml) { "Hey I'm xml" }
33
+ let(:first_message) { mock }
34
+ let(:parsed_messages) { stub(message_headers: [first_message]) }
35
+
36
+ before {
37
+ Esendex::Client
38
+ .expects(:get)
39
+ .with(credentials, "v1.0/inbox/messages", startIndex: 0, count: 25)
40
+ .yields(200, xml)
41
+ .returns(parsed_messages.message_headers)
42
+
43
+ Esendex::Responses::MessageHeaders
44
+ .expects(:deserialise)
45
+ .with(xml)
46
+ .returns(parsed_messages)
47
+ }
48
+
49
+ it 'returns the messages received by the user on the account' do
50
+ received = subject.messages.received
51
+ received.first.must_equal first_message
52
+ end
53
+ end
54
+
31
55
  describe '#get' do
32
56
  let(:message_id) { "guid" }
33
57
  let(:xml) { "Hey I'm xml" }
@@ -0,0 +1,20 @@
1
+ require 'helper'
2
+
3
+ describe Esendex::Requests::Account do
4
+ subject { Esendex::Requests::Account }
5
+
6
+ describe '#serialise' do
7
+ let(:label) { "what a label?" }
8
+
9
+ it 'returns an xml representation of the instance' do
10
+ account = subject.new(label: label)
11
+
12
+ account.serialise.must_equal <<EOS
13
+ <?xml version="1.0" encoding="utf-8"?>
14
+ <account xmlns="http://api.esendex.com/ns/">
15
+ <label>#{label}</label>
16
+ </account>
17
+ EOS
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ require 'helper'
2
+
3
+ describe Esendex::Requests::Batch do
4
+ subject { Esendex::Requests::Batch }
5
+
6
+ describe '#serialise' do
7
+ let(:new_name) { "what a name!" }
8
+
9
+ it 'returns an xml representation of the instance' do
10
+ batch = subject.new(name: new_name)
11
+
12
+ batch.serialise.must_equal <<EOS
13
+ <?xml version="1.0" encoding="utf-8"?>
14
+ <messagebatch xmlns="http://api.esendex.com/ns/">
15
+ <name>#{new_name}</name>
16
+ </messagebatch>
17
+ EOS
18
+ end
19
+ end
20
+ end
@@ -1,4 +1,4 @@
1
- require_relative '../../helper'
1
+ require 'helper'
2
2
 
3
3
  describe Esendex::Requests::Messages do
4
4
  subject { Esendex::Requests::Messages }
@@ -1,4 +1,4 @@
1
- require_relative '../../helper'
1
+ require 'helper'
2
2
 
3
3
  describe Esendex::Responses::Account do
4
4
  describe '.deserialise' do
@@ -1,4 +1,4 @@
1
- require_relative '../../helper'
1
+ require 'helper'
2
2
 
3
3
  describe Esendex::Responses::Accounts do
4
4
  describe '.deserialise' do
@@ -0,0 +1,83 @@
1
+ require 'helper'
2
+
3
+ describe Esendex::Responses::Batch do
4
+ describe '.deserialise' do
5
+ let(:id) { "642A01A6-A483-44F3-A2F2-A48B1D0FE141" }
6
+ let(:createdat) { "2012-01-01T12:00:00.000Z" }
7
+ let(:batchsize) { 1 }
8
+ let(:persistedbatchsize) { 1 }
9
+
10
+ let(:acknowledged) { 0 }
11
+ let(:authorisationfailed) { 0 }
12
+ let(:connecting) { 0 }
13
+ let(:delivered) { 0 }
14
+ let(:failed) { 0 }
15
+ let(:partiallydelivered) { 0 }
16
+ let(:rejected) { 0 }
17
+ let(:scheduled) { 0 }
18
+ let(:sent) { 0 }
19
+ let(:submitted) { 1 }
20
+ let(:validityperiodexpired) { 0 }
21
+ let(:cancelled) { 0 }
22
+
23
+ let(:accountreference) { "EX0000000" }
24
+ let(:createdby) { "user@example.com" }
25
+ let(:batch_name) { "hey my batch" }
26
+
27
+ let(:xml) {
28
+ <<EOS
29
+ <?xml version="1.0" encoding="utf-8"?>
30
+ <messagebatch id="#{id}"
31
+ uri="https://api.esendex.com/v1.1/messagebatches/#{id}"
32
+ xmlns="http://api.esendex.com/ns/">
33
+ <createdat>#{createdat}</createdat>
34
+ <batchsize>#{batchsize}</batchsize>
35
+ <persistedbatchsize>#{persistedbatchsize}</persistedbatchsize>
36
+ <status>
37
+ <acknowledged>#{acknowledged}</acknowledged>
38
+ <authorisationfailed>#{authorisationfailed}</authorisationfailed>
39
+ <connecting>#{connecting}</connecting>
40
+ <delivered>#{delivered}</delivered>
41
+ <failed>#{failed}</failed>
42
+ <partiallydelivered>#{partiallydelivered}</partiallydelivered>
43
+ <rejected>#{rejected}</rejected>
44
+ <scheduled>#{scheduled}</scheduled>
45
+ <sent>#{sent}</sent>
46
+ <submitted>#{submitted}</submitted>
47
+ <validityperiodexpired>#{validityperiodexpired}</validityperiodexpired>
48
+ <cancelled>#{cancelled}</cancelled>
49
+ </status>
50
+ <accountreference>#{accountreference}</accountreference>
51
+ <createdby>#{createdby}</createdby>
52
+ <name>#{batch_name}</name>
53
+ </messagebatch>
54
+ EOS
55
+ }
56
+
57
+ it 'deserialises xml into a Batch instance' do
58
+ batch = Esendex::Responses::Batch.deserialise(xml)
59
+
60
+ batch.id.must_equal id
61
+ batch.created_at.must_equal createdat
62
+ batch.batch_size.must_equal batchsize
63
+ batch.persisted_batch_size.must_equal persistedbatchsize
64
+
65
+ batch.account_reference.must_equal accountreference
66
+ batch.created_by.must_equal createdby
67
+ batch.name.must_equal batch_name
68
+
69
+ batch.status.acknowledged.must_equal acknowledged
70
+ batch.status.authorisation_failed.must_equal authorisationfailed
71
+ batch.status.connecting.must_equal connecting
72
+ batch.status.delivered.must_equal delivered
73
+ batch.status.failed.must_equal failed
74
+ batch.status.partially_delivered.must_equal partiallydelivered
75
+ batch.status.rejected.must_equal rejected
76
+ batch.status.scheduled.must_equal scheduled
77
+ batch.status.sent.must_equal sent
78
+ batch.status.submitted.must_equal submitted
79
+ batch.status.validity_period_expired.must_equal validityperiodexpired
80
+ batch.status.cancelled.must_equal cancelled
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,95 @@
1
+ require 'helper'
2
+
3
+ describe Esendex::Responses::Batches do
4
+ describe '.deserialise' do
5
+ let(:startindex) { 5 }
6
+ let(:count) { 2000 }
7
+ let(:totalcount) { 24565 }
8
+
9
+ let(:id) { "642A01A6-A483-44F3-A2F2-A48B1D0FE141" }
10
+ let(:createdat) { "2012-01-01T12:00:00.000Z" }
11
+ let(:batchsize) { 1 }
12
+ let(:persistedbatchsize) { 1 }
13
+
14
+ let(:acknowledged) { 0 }
15
+ let(:authorisationfailed) { 0 }
16
+ let(:connecting) { 0 }
17
+ let(:delivered) { 0 }
18
+ let(:failed) { 0 }
19
+ let(:partiallydelivered) { 0 }
20
+ let(:rejected) { 0 }
21
+ let(:scheduled) { 0 }
22
+ let(:sent) { 0 }
23
+ let(:submitted) { 1 }
24
+ let(:validityperiodexpired) { 0 }
25
+ let(:cancelled) { 0 }
26
+
27
+ let(:accountreference) { "EX0000000" }
28
+ let(:createdby) { "user@example.com" }
29
+ let(:batch_name) { "hey my batch" }
30
+
31
+ let(:xml) {
32
+ <<EOS
33
+ <?xml version="1.0" encoding="utf-8"?>
34
+ <messagebatches startindex="#{startindex}" count="#{count}" totalcount="#{totalcount}"
35
+ xmlns="http://api.esendex.com/ns/">
36
+ <messagebatch id="#{id}"
37
+ uri="https://api.esendex.com/v1.1/messagebatches/#{id}">
38
+ <createdat>#{createdat}</createdat>
39
+ <batchsize>#{batchsize}</batchsize>
40
+ <persistedbatchsize>#{persistedbatchsize}</persistedbatchsize>
41
+ <status>
42
+ <acknowledged>#{acknowledged}</acknowledged>
43
+ <authorisationfailed>#{authorisationfailed}</authorisationfailed>
44
+ <connecting>#{connecting}</connecting>
45
+ <delivered>#{delivered}</delivered>
46
+ <failed>#{failed}</failed>
47
+ <partiallydelivered>#{partiallydelivered}</partiallydelivered>
48
+ <rejected>#{rejected}</rejected>
49
+ <scheduled>#{scheduled}</scheduled>
50
+ <sent>#{sent}</sent>
51
+ <submitted>#{submitted}</submitted>
52
+ <validityperiodexpired>#{validityperiodexpired}</validityperiodexpired>
53
+ <cancelled>#{cancelled}</cancelled>
54
+ </status>
55
+ <accountreference>#{accountreference}</accountreference>
56
+ <createdby>#{createdby}</createdby>
57
+ <name>#{batch_name}</name>
58
+ </messagebatch>
59
+ </messagebatches>
60
+ EOS
61
+ }
62
+
63
+ it 'deserialises xml into a Batches instance' do
64
+ batches = Esendex::Responses::Batches.deserialise(xml)
65
+
66
+ batches.start_index.must_equal startindex
67
+ batches.count.must_equal count
68
+ batches.total_count.must_equal totalcount
69
+
70
+ batch = batches.batches.first
71
+
72
+ batch.id.must_equal id
73
+ batch.created_at.must_equal createdat
74
+ batch.batch_size.must_equal batchsize
75
+ batch.persisted_batch_size.must_equal persistedbatchsize
76
+
77
+ batch.account_reference.must_equal accountreference
78
+ batch.created_by.must_equal createdby
79
+ batch.name.must_equal batch_name
80
+
81
+ batch.status.acknowledged.must_equal acknowledged
82
+ batch.status.authorisation_failed.must_equal authorisationfailed
83
+ batch.status.connecting.must_equal connecting
84
+ batch.status.delivered.must_equal delivered
85
+ batch.status.failed.must_equal failed
86
+ batch.status.partially_delivered.must_equal partiallydelivered
87
+ batch.status.rejected.must_equal rejected
88
+ batch.status.scheduled.must_equal scheduled
89
+ batch.status.sent.must_equal sent
90
+ batch.status.submitted.must_equal submitted
91
+ batch.status.validity_period_expired.must_equal validityperiodexpired
92
+ batch.status.cancelled.must_equal cancelled
93
+ end
94
+ end
95
+ end
@@ -1,4 +1,4 @@
1
- require_relative '../../helper'
1
+ require 'helper'
2
2
 
3
3
  describe Esendex::Responses::MessageDispatcherHeaders do
4
4
  subject { Esendex::Responses::MessageDispatcherHeaders }
@@ -1,4 +1,4 @@
1
- require_relative '../../helper'
1
+ require 'helper'
2
2
 
3
3
  describe Esendex::Responses::MessageHeader do
4
4
  describe '.deserialise' do
@@ -1,4 +1,4 @@
1
- require_relative '../../helper'
1
+ require 'helper'
2
2
 
3
3
  describe Esendex::Responses::MessageHeaders do
4
4
  describe '.deserialise' do
@@ -0,0 +1,55 @@
1
+ require 'helper'
2
+
3
+ describe Esendex::Responses::Status do
4
+ describe '.deserialise' do
5
+ let(:acknowledged) { 0 }
6
+ let(:authorisationfailed) { 0 }
7
+ let(:connecting) { 0 }
8
+ let(:delivered) { 0 }
9
+ let(:failed) { 0 }
10
+ let(:partiallydelivered) { 0 }
11
+ let(:rejected) { 0 }
12
+ let(:scheduled) { 0 }
13
+ let(:sent) { 0 }
14
+ let(:submitted) { 1 }
15
+ let(:validityperiodexpired) { 0 }
16
+ let(:cancelled) { 0 }
17
+
18
+ let(:xml) {
19
+ <<EOS
20
+ <?xml version="1.0" encoding="utf-8"?>
21
+ <status>
22
+ <acknowledged>#{acknowledged}</acknowledged>
23
+ <authorisationfailed>#{authorisationfailed}</authorisationfailed>
24
+ <connecting>#{connecting}</connecting>
25
+ <delivered>#{delivered}</delivered>
26
+ <failed>#{failed}</failed>
27
+ <partiallydelivered>#{partiallydelivered}</partiallydelivered>
28
+ <rejected>#{rejected}</rejected>
29
+ <scheduled>#{scheduled}</scheduled>
30
+ <sent>#{sent}</sent>
31
+ <submitted>#{submitted}</submitted>
32
+ <validityperiodexpired>#{validityperiodexpired}</validityperiodexpired>
33
+ <cancelled>#{cancelled}</cancelled>
34
+ </status>
35
+ EOS
36
+ }
37
+
38
+ it 'deserialises xml into a Status instance' do
39
+ status = Esendex::Responses::Status.deserialise(xml)
40
+
41
+ status.acknowledged.must_equal acknowledged
42
+ status.authorisation_failed.must_equal authorisationfailed
43
+ status.connecting.must_equal connecting
44
+ status.delivered.must_equal delivered
45
+ status.failed.must_equal failed
46
+ status.partially_delivered.must_equal partiallydelivered
47
+ status.rejected.must_equal rejected
48
+ status.scheduled.must_equal scheduled
49
+ status.sent.must_equal sent
50
+ status.submitted.must_equal submitted
51
+ status.validity_period_expired.must_equal validityperiodexpired
52
+ status.cancelled.must_equal cancelled
53
+ end
54
+ end
55
+ end
@@ -1,18 +1,7 @@
1
- require_relative '../helper'
1
+ require 'helper'
2
2
 
3
3
  describe Esendex::Users do
4
4
  let(:credentials) { Esendex::Credentials.new('user', 'pass', 'ref') }
5
5
  subject { Esendex::Users.new(credentials) }
6
6
 
7
- describe '#username' do
8
- it 'returns the username' do
9
- subject.username.must_equal credentials.username
10
- end
11
- end
12
-
13
- describe '#password' do
14
- it 'returns the password' do
15
- subject.password.must_equal credentials.password
16
- end
17
- end
18
7
  end
@@ -1,4 +1,4 @@
1
- require_relative 'helper'
1
+ require 'helper'
2
2
 
3
3
  describe Esendex do
4
4
 
@@ -6,28 +6,68 @@ describe Esendex do
6
6
  let(:credentials) { subject.instance_variable_get(:@credentials) }
7
7
 
8
8
  describe '#account' do
9
- let(:account) { Object.new }
9
+ describe 'when account exists' do
10
+ let(:reference) { mock }
11
+ let(:account) { mock(reference: reference) }
12
+ let(:accounts) { [stub(reference: mock),
13
+ stub(reference: mock),
14
+ account,
15
+ stub(reference: mock)] }
16
+
17
+ before {
18
+ Esendex::Accounts
19
+ .expects(:new)
20
+ .with(credentials)
21
+ .returns(accounts)
22
+ }
23
+
24
+ it 'returns the Account with that reference' do
25
+ subject.account(reference).must_equal account
26
+ end
27
+ end
28
+
29
+ describe 'when account does not exist' do
30
+ let(:reference) { mock }
31
+ let(:accounts) { [stub(reference: mock),
32
+ stub(reference: mock),
33
+ stub(reference: mock)] }
34
+
35
+ before {
36
+ Esendex::Accounts
37
+ .expects(:new)
38
+ .with(credentials)
39
+ .returns(accounts)
40
+ }
41
+
42
+ it 'is nil' do
43
+ subject.account(reference).must_equal nil
44
+ end
45
+ end
46
+ end
47
+
48
+ describe '#accounts' do
49
+ let(:accounts) { Object.new }
10
50
 
11
51
  it 'returns a new Accounts instance' do
12
52
  Esendex::Accounts
13
53
  .expects(:new)
14
54
  .with(credentials)
15
- .returns(account)
55
+ .returns(accounts)
16
56
 
17
- subject.account.must_equal account
57
+ subject.accounts.must_equal accounts
18
58
  end
19
59
  end
20
60
 
21
- describe '#dispatcher' do
22
- let(:dispatcher) { Object.new }
61
+ describe '#batches' do
62
+ let(:batches) { mock }
23
63
 
24
- it 'returns a new Dispatcher instance' do
25
- Esendex::Dispatcher
64
+ it 'returns a new Batches instance' do
65
+ Esendex::Batches
26
66
  .expects(:new)
27
67
  .with(credentials)
28
- .returns(dispatcher)
68
+ .returns(batches)
29
69
 
30
- subject.dispatcher.must_equal dispatcher
70
+ subject.batches.must_equal batches
31
71
  end
32
72
  end
33
73
 
@@ -44,7 +84,7 @@ describe Esendex do
44
84
  end
45
85
  end
46
86
 
47
- describe '#user' do
87
+ describe '#users' do
48
88
  let(:user) { Object.new }
49
89
 
50
90
  it 'returns a new Users instance' do
@@ -53,7 +93,7 @@ describe Esendex do
53
93
  .with(credentials)
54
94
  .returns(user)
55
95
 
56
- subject.user.must_equal user
96
+ subject.users.must_equal user
57
97
  end
58
98
  end
59
99
  end