trustev 0.3.2 → 0.4.0.pre.alpha

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -329
  3. data/Rakefile +1 -2
  4. data/lib/trustev.rb +20 -68
  5. data/lib/trustev/{authenticate.rb → 1.2/authenticate.rb} +0 -0
  6. data/lib/trustev/{digital_signature.rb → 1.2/digital_signature.rb} +0 -0
  7. data/lib/trustev/{profile.rb → 1.2/profile.rb} +1 -1
  8. data/lib/trustev/{social.rb → 1.2/social.rb} +0 -0
  9. data/lib/trustev/{transaction.rb → 1.2/transaction.rb} +0 -0
  10. data/lib/trustev/1.2/trustev.rb +66 -0
  11. data/lib/trustev/2.0/address.rb +41 -0
  12. data/lib/trustev/2.0/authenticate.rb +40 -0
  13. data/lib/trustev/2.0/case.rb +45 -0
  14. data/lib/trustev/2.0/case_attribute.rb +24 -0
  15. data/lib/trustev/2.0/customer.rb +32 -0
  16. data/lib/trustev/2.0/customer_address.rb +5 -0
  17. data/lib/trustev/2.0/decision.rb +17 -0
  18. data/lib/trustev/2.0/email.rb +35 -0
  19. data/lib/trustev/2.0/item.rb +34 -0
  20. data/lib/trustev/2.0/payment.rb +33 -0
  21. data/lib/trustev/2.0/social.rb +38 -0
  22. data/lib/trustev/2.0/status.rb +34 -0
  23. data/lib/trustev/2.0/timestamp.rb +17 -0
  24. data/lib/trustev/2.0/transaction.rb +30 -0
  25. data/lib/trustev/2.0/transaction_address.rb +5 -0
  26. data/lib/trustev/2.0/trustev.rb +51 -0
  27. data/lib/trustev/error.rb +5 -6
  28. data/lib/trustev/version.rb +1 -1
  29. data/test/{authenticate_test.rb → 1.2/authenticate_test.rb} +0 -0
  30. data/test/{digital_signature_test.rb → 1.2/digital_signature_test.rb} +0 -0
  31. data/test/{error_test.rb → 1.2/error_test.rb} +3 -3
  32. data/test/{profile_test.rb → 1.2/profile_test.rb} +0 -0
  33. data/test/{social_test.rb → 1.2/social_test.rb} +0 -0
  34. data/test/{test_helper.rb → 1.2/test_helper.rb} +3 -2
  35. data/test/{transaction_test.rb → 1.2/transaction_test.rb} +0 -0
  36. data/test/2.0/authenticate_test.rb +13 -0
  37. data/test/2.0/case_test.rb +31 -0
  38. data/test/2.0/customer_address_test.rb +35 -0
  39. data/test/2.0/customer_test.rb +31 -0
  40. data/test/2.0/decision_test.rb +13 -0
  41. data/test/2.0/email_test.rb +33 -0
  42. data/test/2.0/error_test.rb +18 -0
  43. data/test/2.0/item_test.rb +33 -0
  44. data/test/2.0/payment_test.rb +33 -0
  45. data/test/2.0/social_test.rb +33 -0
  46. data/test/2.0/status_test.rb +27 -0
  47. data/test/2.0/test_helper.rb +165 -0
  48. data/test/2.0/transaction_address_Test.rb +35 -0
  49. data/test/2.0/transaction_test.rb +31 -0
  50. data/trustev.gemspec +3 -0
  51. metadata +111 -24
@@ -0,0 +1,17 @@
1
+ module Trustev
2
+ class Timestamp
3
+
4
+ def initialize(timestamp=Time.now.utc)
5
+ raise Error.new('timestamp must be an instance of Time') unless timestamp.instance_of?(Time)
6
+ @timestamp = timestamp
7
+ end
8
+
9
+ def to_s
10
+ @timestamp.strftime('%Y-%m-%dT%H:%M:%S.%LZ')
11
+ end
12
+
13
+ def timestamp
14
+ @timestamp
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,30 @@
1
+ module Trustev
2
+ class Transaction < CaseAttribute
3
+
4
+ SERVICE_URL = 'transaction'
5
+
6
+ def create
7
+ Trustev.send_request url, build, 'POST'
8
+ end
9
+
10
+ def retrieve
11
+ Trustev.send_request url, {}, 'GET'
12
+ end
13
+
14
+ def update
15
+ Trustev.send_request url, build, 'PUT'
16
+ end
17
+
18
+ def build
19
+ transaction = {
20
+ TotalTransactionValue: @opts[:total_transaction_value],
21
+ Currency: @opts[:currency_code],
22
+ timestamp: @opts[:timestamp],
23
+ addresses: @opts[:addresses],
24
+ items: @opts[:items]
25
+ }
26
+ transaction[:id] = @opts[:id] unless @opts[:id].nil?
27
+ transaction
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,5 @@
1
+ module Trustev
2
+ class TransactionAddress < Address
3
+ SERVICE_URL = 'transaction/address'
4
+ end
5
+ end
@@ -0,0 +1,51 @@
1
+ require 'multi_json'
2
+ require 'trustev/error'
3
+
4
+ module Trustev
5
+
6
+ @@api_base = 'https://app.trustev.com/api/v'
7
+
8
+ STATUS_TYPES = {
9
+ completed: 0,
10
+ rejecetd_fraud: 1,
11
+ rejected_auth_failure: 2,
12
+ rejected_suspicious: 3,
13
+ cancelled: 4,
14
+ chargeback_fraud: 5,
15
+ chargeback_other: 6,
16
+ refunded: 7,
17
+ placed: 8,
18
+ on_hold_review: 9
19
+ }
20
+
21
+ DECISIONS = {
22
+ unknown: 0,
23
+ pass: 1,
24
+ flag: 2,
25
+ fail: 3
26
+ }
27
+
28
+ PAYMENT_TYPES = {
29
+ none: 0,
30
+ credit_card: 1,
31
+ debit_card: 2,
32
+ direct_debit: 3,
33
+ paypal: 4,
34
+ bitcoin: 5
35
+ }
36
+
37
+ def self.raise_error(response)
38
+ error_response = MultiJson.load(response.body, symbolize_keys: true)
39
+ raise Error.new('Bad API response', response.code, error_response[:Message])
40
+ end
41
+
42
+ def self.invalid_token?
43
+ now = Time.now
44
+ timestamp = @@token_expire? @@token_expire.timestamp : 0
45
+ @@token.nil? || timestamp-600 <= now
46
+ end
47
+
48
+ def self.send_request(path, body, method, _expect_json=false, requires_token=true)
49
+ Trustev.do_send_request(path, body, method, true, requires_token)
50
+ end
51
+ end
@@ -1,18 +1,17 @@
1
1
  module Trustev
2
2
  class Error < StandardError
3
3
  attr_reader :message
4
- attr_reader :http_status
5
4
 
6
5
  def initialize(message=nil, http_status=nil, trustev_message=nil)
7
- @message = "#{message} #{trustev_message}"
8
- @http_status = http_status
6
+ status_string = http_status.nil? ? '' : "(#{http_status}) "
7
+ trustev_message = "- #{trustev_message}" unless trustev_message.nil?
8
+ @message = "#{status_string}#{message} #{trustev_message}"
9
9
 
10
10
  super(message)
11
11
  end
12
12
 
13
13
  def to_s
14
- status_string = @http_status.nil? ? '' : "(Status #{@http_status}) "
15
- "#{status_string}#{@message}"
14
+ @message
16
15
  end
17
16
  end
18
- end
17
+ end
@@ -1,3 +1,3 @@
1
1
  module Trustev
2
- VERSION = '0.3.2'
2
+ VERSION = '0.4.0-alpha'
3
3
  end
@@ -5,14 +5,14 @@ describe Trustev::Error do
5
5
  describe 'when an error is created' do
6
6
  it 'must convert to a string properly' do
7
7
  error = Trustev::Error.new('Test Message', 404, 'Invalid API Response')
8
- error.to_s.must_equal '(Status 404) Test Message Invalid API Response'
8
+ error.to_s.must_equal '(404) Test Message - Invalid API Response'
9
9
  end
10
10
  end
11
11
 
12
12
  describe 'an error without a status code' do
13
13
  it 'should just have messages when converted to a string' do
14
14
  error = Trustev::Error.new('Test Message', nil, 'Invalid API Response')
15
- error.to_s.must_equal 'Test Message Invalid API Response'
15
+ error.to_s.must_equal 'Test Message - Invalid API Response'
16
16
  end
17
17
  end
18
- end
18
+ end
@@ -1,4 +1,4 @@
1
- require_relative '../lib/trustev'
1
+ require_relative '../../lib/trustev'
2
2
  require 'minitest/autorun'
3
3
  require 'securerandom'
4
4
 
@@ -6,6 +6,7 @@ Trustev.username = 'FancyTees'
6
6
  Trustev.password = '58dcca6b98a24e5a80b2a3682190da1a'
7
7
  Trustev.shared_secret = '48357fbb820c407f855d72893d3f47ed'
8
8
  Trustev.private_key = '65950d41f8d3ea86dc25aaf893ba15db'
9
+ Trustev.api_version = '1.2'
9
10
 
10
11
  def build_transaction
11
12
  {
@@ -77,4 +78,4 @@ def build_transaction
77
78
  },
78
79
  session_id: '4cec59b2-37f9-461e-9abc-861267e1a4d7'
79
80
  }
80
- end
81
+ end
@@ -0,0 +1,13 @@
1
+ require_relative 'test_helper'
2
+
3
+ describe Trustev::Authenticate do
4
+
5
+ describe 'when an authentication token is requested' do
6
+ it 'must set the authentication token' do
7
+ Trustev::Authenticate.retrieve_token
8
+ Trustev.token.wont_be_nil
9
+ Trustev.token_expire.wont_be_nil
10
+ Trustev.token_expire.instance_of?(Trustev::Timestamp).must_equal true
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,31 @@
1
+ require_relative 'test_helper'
2
+
3
+ describe Trustev::Case do
4
+ describe 'when creating a case' do
5
+ it 'must return a valid response' do
6
+ trustev_case = build_case
7
+ response = trustev_case.create
8
+ response[:Id].wont_be_nil
9
+ end
10
+ end
11
+
12
+ describe 'when updating a case' do
13
+ it 'must return a valid response' do
14
+ skip 'Intermittently broken at Trustev'
15
+ trustev_case = build_case
16
+ response = trustev_case.create
17
+ case_id = response[:Id]
18
+ case_number = response[:CaseNumber]
19
+ trustev_case = Trustev::Case.new(case_id, { case_number: case_number, customer: build_customer.build })
20
+ response = trustev_case.update
21
+ response[:Id].must_equal case_id
22
+ end
23
+ end
24
+
25
+ describe 'when retrieving a case' do
26
+ it 'must return a valid response' do
27
+ case_id = build_case.create[:Id]
28
+ Trustev::Case.new(case_id).retrieve[:Id].must_equal case_id
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,35 @@
1
+ require_relative 'test_helper'
2
+
3
+ describe Trustev::CustomerAddress do
4
+ before do
5
+ @trustev_case = build_case
6
+ @case_id = @trustev_case.create[:Id]
7
+ @customer_address = build_customer_address case_id: @case_id
8
+ end
9
+
10
+ describe 'when creating a customer address' do
11
+ it 'must return a valid response' do
12
+ create_case_attribute @customer_address
13
+ end
14
+ end
15
+
16
+ describe 'when updating a customer address' do
17
+ it 'must return a valid response' do
18
+ update_case_attribute @customer_address, self.method(:build_customer_address), @case_id, { first_name: Faker::Name.first_name }
19
+ end
20
+ end
21
+
22
+ describe 'when retrieving a customer address' do
23
+ it 'must return a valid response' do
24
+ customer_address = @trustev_case.retrieve[:Customer][:Addresses][0]
25
+ to_retrieve = Trustev::CustomerAddress.new(case_id: @case_id, id: customer_address[:Id])
26
+ to_retrieve.retrieve[:Id].wont_be_nil
27
+ end
28
+ end
29
+
30
+ describe 'when retrieving all customer addresses' do
31
+ it 'must return a valid response' do
32
+ retrieve_all_case_attribute Trustev::Social, @case_id
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,31 @@
1
+ require_relative 'test_helper'
2
+
3
+ describe Trustev::Customer do
4
+ describe 'when creating a customer' do
5
+ it 'must return a valid response' do
6
+ trustev_case = build_case nil, SecureRandom.hex, { customer: nil }
7
+ case_id = trustev_case.create[:Id]
8
+ customer = build_customer case_id: case_id
9
+ customer.create[:Id].wont_be_nil
10
+ end
11
+ end
12
+
13
+ describe 'when updating a customer' do
14
+ it 'must return a valid response' do
15
+ trustev_case = build_case
16
+ case_id = trustev_case.create[:Id]
17
+ customer = build_customer case_id: case_id, first_name: Faker::Name.first_name
18
+ customer.update[:Id].wont_be_nil
19
+ end
20
+ end
21
+
22
+ describe 'when retrieving a customer' do
23
+ it 'must return a valid response' do
24
+ trustev_case = build_case.create
25
+ case_id = trustev_case[:Id]
26
+ customer_id = trustev_case[:Customer][:Id]
27
+ customer = Trustev::Customer.new id: customer_id, case_id: case_id
28
+ customer.retrieve[:Id].wont_be_nil
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,13 @@
1
+ require_relative 'test_helper'
2
+
3
+ describe Trustev::Decision do
4
+
5
+ describe 'when an decision is requested' do
6
+ it 'must return the decision' do
7
+ case_id = build_case(nil, "#{SecureRandom.hex}pass").create[:Id]
8
+ decision = Trustev::Decision.new case_id
9
+ response = decision.retrieve
10
+ response[:Id].wont_be_nil
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,33 @@
1
+ require_relative 'test_helper'
2
+
3
+ describe Trustev::Email do
4
+ before do
5
+ trustev_case = build_case
6
+ @case_id = trustev_case.create[:Id]
7
+ @email = build_email case_id: @case_id
8
+ end
9
+
10
+ describe 'when creating an email' do
11
+ it 'must return a valid response' do
12
+ create_case_attribute @email
13
+ end
14
+ end
15
+
16
+ describe 'when updating an email' do
17
+ it 'must return a valid response' do
18
+ update_case_attribute @email, self.method(:build_email), @case_id, { email: Faker::Internet.email }
19
+ end
20
+ end
21
+
22
+ describe 'when retrieving an email' do
23
+ it 'must return a valid response' do
24
+ retrieve_case_attribute @email, Trustev::Email, @case_id
25
+ end
26
+ end
27
+
28
+ describe 'when retrieving all emails' do
29
+ it 'must return a valid response' do
30
+ retrieve_all_case_attribute Trustev::Email, @case_id
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,18 @@
1
+ require_relative 'test_helper'
2
+
3
+ describe Trustev::Error do
4
+
5
+ describe 'when an error is created' do
6
+ it 'must convert to a string properly' do
7
+ error = Trustev::Error.new('Test Message', 404, 'Invalid API Response')
8
+ error.to_s.must_equal '(404) Test Message - Invalid API Response'
9
+ end
10
+ end
11
+
12
+ describe 'an error without a status code' do
13
+ it 'should just have messages when converted to a string' do
14
+ error = Trustev::Error.new('Test Message', nil, 'Invalid API Response')
15
+ error.to_s.must_equal 'Test Message - Invalid API Response'
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,33 @@
1
+ require_relative 'test_helper'
2
+
3
+ describe Trustev::Item do
4
+ before do
5
+ trustev_case = build_case
6
+ @case_id = trustev_case.create[:Id]
7
+ @item = build_item case_id: @case_id
8
+ end
9
+
10
+ describe 'when creating an item' do
11
+ it 'must return a valid response' do
12
+ create_case_attribute @item
13
+ end
14
+ end
15
+
16
+ describe 'when updating an item' do
17
+ it 'must return a valid response' do
18
+ update_case_attribute @item, self.method(:build_item), @case_id, { name: Faker::Commerce.product_name }
19
+ end
20
+ end
21
+
22
+ describe 'when retrieving an item' do
23
+ it 'must return a valid response' do
24
+ retrieve_case_attribute @item, Trustev::Item, @case_id
25
+ end
26
+ end
27
+
28
+ describe 'when retrieving all items' do
29
+ it 'must return a valid response' do
30
+ retrieve_all_case_attribute Trustev::Item, @case_id
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ require_relative 'test_helper'
2
+
3
+ describe Trustev::Payment do
4
+ before do
5
+ trustev_case = build_case
6
+ @case_id = trustev_case.create[:Id]
7
+ @payment = build_payment case_id: @case_id
8
+ end
9
+
10
+ describe 'when creating a payment' do
11
+ it 'must return a valid response' do
12
+ create_case_attribute @payment
13
+ end
14
+ end
15
+
16
+ describe 'when updating a payment' do
17
+ it 'must return a valid response' do
18
+ update_case_attribute @payment, self.method(:build_payment), @case_id, { bin_number: Faker::Number.number(6) }
19
+ end
20
+ end
21
+
22
+ describe 'when retrieving a payment' do
23
+ it 'must return a valid response' do
24
+ retrieve_case_attribute @payment, Trustev::Payment, @case_id
25
+ end
26
+ end
27
+
28
+ describe 'when retrieving all payments' do
29
+ it 'must return a valid response' do
30
+ retrieve_all_case_attribute Trustev::Payment, @case_id
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ require_relative 'test_helper'
2
+
3
+ describe Trustev::Social do
4
+ before do
5
+ trustev_case = build_case
6
+ @case_id = trustev_case.create[:Id]
7
+ @social = build_social case_id: @case_id
8
+ end
9
+
10
+ describe 'when creating a social' do
11
+ it 'must return a valid response' do
12
+ create_case_attribute @social
13
+ end
14
+ end
15
+
16
+ describe 'when updating a social' do
17
+ it 'must return a valid response' do
18
+ update_case_attribute @social, self.method(:build_social), @case_id, { social_id: Faker::Number.number(5) }
19
+ end
20
+ end
21
+
22
+ describe 'when retrieving an social' do
23
+ it 'must return a valid response' do
24
+ retrieve_case_attribute @social, Trustev::Social, @case_id
25
+ end
26
+ end
27
+
28
+ describe 'when retrieving all social' do
29
+ it 'must return a valid response' do
30
+ retrieve_all_case_attribute Trustev::Social, @case_id
31
+ end
32
+ end
33
+ end