jamm 0.0.1

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.
@@ -0,0 +1,47 @@
1
+ require File.expand_path('../test_helper', __dir__)
2
+ require 'rest-client'
3
+
4
+ module Jamm
5
+ class OAuthTest < Test::Unit::TestCase
6
+ should 'raise an error when bad request was returned' do
7
+ @mock.expects(:post).once.raises(RestClient::ExceptionWithResponse)
8
+ assert_raise OAuthError do
9
+ Jamm::OAuth.oauth_token
10
+ end
11
+ end
12
+
13
+ should 'raise an error when SocketError happened' do
14
+ @mock.expects(:post).once.raises(SocketError)
15
+ assert_raise OAuthError do
16
+ Jamm::OAuth.oauth_token
17
+ end
18
+ end
19
+
20
+ should 'raise an error when timeout happened' do
21
+ @mock.expects(:post).once.raises(RestClient::RequestTimeout)
22
+ assert_raise OAuthError do
23
+ Jamm::OAuth.oauth_token
24
+ end
25
+ end
26
+
27
+ should 'raise an error when an unexpected exception happened' do
28
+ @mock.expects(:post).once.raises(RestClient::Exception)
29
+ assert_raise OAuthError do
30
+ Jamm::OAuth.oauth_token
31
+ end
32
+ end
33
+
34
+ should 'raise an error when unexpected response was returned' do
35
+ @mock.expects(:post).once.returns(test_response({}, 200))
36
+ assert_raise OAuthError do
37
+ Jamm::OAuth.oauth_token
38
+ end
39
+ end
40
+
41
+ should 'return an access token when valid response was returned' do
42
+ @mock.expects(:post).once.returns(test_response(test_cognito_response))
43
+ actual = Jamm::OAuth.oauth_token
44
+ assert_equal actual, 'access_token'
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,17 @@
1
+ require File.expand_path('../test_helper', __dir__)
2
+
3
+ module Jamm
4
+ class PaymentTest < Test::Unit::TestCase
5
+ should 'return a result when Payment.create return valid response' do
6
+ # Arrange
7
+ @mock.stubs(:post).returns(test_response(test_cognito_response)).then.returns(test_response(test_create_payment_response))
8
+ # Act
9
+ actual = Jamm::Payment.create(test_create_payment_request)
10
+ # Assert
11
+ assert_equal actual.token_id, 'dt_f5e599d3-8b9e-4d46-9a52-1a37e7b5b8ef'
12
+ assert_equal actual.charge_id, 'ct_h5e599d3-0000-4d46-9a52-1a37e7b5b8ef'
13
+ assert_equal actual.payment_url, 'https://jamm-pay.com/K5e599d3-8b9e-4d46-9a72-1a37e7b5b8ef'
14
+ assert_equal actual.created_at, '2023-11-07T15:30:00.000+03:00'
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,18 @@
1
+ require File.expand_path('../test_helper', __dir__)
2
+ require 'time'
3
+
4
+ module Jamm
5
+ class TimeUtilTest < Test::Unit::TestCase
6
+ should 'compute relative time when relative scale is specified' do
7
+ now = Time.now
8
+ Time.expects(:now).once.returns(now)
9
+ actual = Jamm::TimeUtil.relative_time_to_iso('6 minutes')
10
+ assert_equal actual, (now + 6 * 60).strftime('%Y-%m-%dT%H:%M:%SZ')
11
+ end
12
+
13
+ should 'return input when absolute scale is specified' do
14
+ actual = Jamm::TimeUtil.relative_time_to_iso('2024-04-11T16:28:07.420Z')
15
+ assert_equal actual, '2024-04-11T16:28:07.420Z'
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,52 @@
1
+ require File.expand_path('../test_helper', __dir__)
2
+
3
+ module Jamm
4
+ class TokenTest < Test::Unit::TestCase
5
+ should 'return a list of contract tokens when Token.list return valid response' do
6
+ # Arrange
7
+ @mock.expects(:post).once.returns(test_response(test_cognito_response))
8
+ @mock.expects(:get).once.returns(test_response(test_token_list))
9
+ # Act
10
+ actual = Jamm::Token.list
11
+ # Assert
12
+ assert actual.is_a? Array
13
+ assert_equal actual[0].contract_id, 'dt_f5e599d3-8b9e-4d46-9a52-1a37e7b5b8ef'
14
+ assert_equal actual[0].status, 'CREATED'
15
+ assert_equal actual[0].description, 'Gold Gym'
16
+ assert_equal actual[0].currency, 'JPY'
17
+ assert_equal actual[0].initial_amount, 1000
18
+ assert_equal actual[0].metadata.key1, 'value1'
19
+ assert_equal actual[0].metadata.key2, 'value2'
20
+ assert_equal actual[0].created_at, '2023-11-07T15:30:00.000+03:00'
21
+ assert_equal actual[0].updated_at, '2023-11-11T15:30:00.000+03:00'
22
+ end
23
+
24
+ should 'raise an error when Token.list return timeout' do
25
+ # Arrange
26
+ @mock.expects(:post).once.returns(test_response(test_cognito_response))
27
+ @mock.expects(:get).once.raises(RestClient::RequestTimeout)
28
+ # Assert
29
+ assert_raise ApiConnectionError do
30
+ Jamm::Token.list
31
+ end
32
+ end
33
+
34
+ should 'return a contract tokens when Token.get return valid response' do
35
+ # Arrange
36
+ @mock.expects(:post).once.returns(test_response(test_cognito_response))
37
+ @mock.expects(:get).once.returns(test_response(test_token))
38
+ # Act
39
+ actual = Jamm::Token.get('dt_f5e599d3-8b9e-4d46-9a52-1a37e7b5b8ef')
40
+ # Assert
41
+ assert_equal actual.contract_id, 'dt_f5e599d3-8b9e-4d46-9a52-1a37e7b5b8ef'
42
+ assert_equal actual.status, 'CREATED'
43
+ assert_equal actual.description, 'Gold Gym'
44
+ assert_equal actual.currency, 'JPY'
45
+ assert_equal actual.initial_amount, 1000
46
+ assert_equal actual.metadata.key1, 'value1'
47
+ assert_equal actual.metadata.key2, 'value2'
48
+ assert_equal actual.created_at, '2023-11-07T15:30:00.000+03:00'
49
+ assert_equal actual.updated_at, '2023-11-11T15:30:00.000+03:00'
50
+ end
51
+ end
52
+ end
data/test/test_data.rb ADDED
@@ -0,0 +1,118 @@
1
+ module Jamm
2
+ module TestData
3
+ def test_response(body, code = 200)
4
+ body = JSON.generate(body) unless body.is_a? String
5
+ m = mock
6
+ m.instance_variable_set('@jamm_values', { body: body, code: code })
7
+ def m.body
8
+ @jamm_values[:body]
9
+ end
10
+
11
+ def m.code
12
+ @jamm_values[:code]
13
+ end
14
+ m
15
+ end
16
+
17
+ def test_bad_request
18
+ {
19
+ "timestamp": '2023-11-07T15:30:00.000+09:00',
20
+ "status": 400,
21
+ "error": 'Bad Request',
22
+ "message": 'some error message',
23
+ "path": '/api/v0/deduction_contract_tokens'
24
+ }
25
+ end
26
+
27
+ def test_cognito_response
28
+ {
29
+ access_token: 'access_token'
30
+ }
31
+ end
32
+
33
+ def test_token_list
34
+ [test_token]
35
+ end
36
+
37
+ def test_token
38
+ {
39
+ contract_id: 'dt_f5e599d3-8b9e-4d46-9a52-1a37e7b5b8ef',
40
+ status: 'CREATED',
41
+ description: 'Gold Gym',
42
+ initial_amount: 1000,
43
+ currency: 'JPY',
44
+ metadata: {
45
+ key1: 'value1',
46
+ key2: 'value2'
47
+ },
48
+ created_at: '2023-11-07T15:30:00.000+03:00',
49
+ updated_at: '2023-11-11T15:30:00.000+03:00'
50
+ }
51
+ end
52
+
53
+ def test_create_payment_request
54
+ {
55
+ charge: {
56
+ description: 'Gold Gym',
57
+ amount: 10_000,
58
+ currency: 'JPY'
59
+ },
60
+ redirect: {
61
+ success_url: 'http://www.example.com/success',
62
+ failure_url: 'http://www.example.com/fail',
63
+ info_url: 'http://www.example.com/customer_service',
64
+ expired_at: '2024-04-11T16:28:07.420Z'
65
+ },
66
+ metadata: {
67
+ key1: 'value1',
68
+ key2: 'value2'
69
+ },
70
+ customer: {
71
+ name: 'Taro Taro',
72
+ katakanaFirstName: 'タロ',
73
+ katakanaLastName: 'タロ',
74
+ gender: 'MALE',
75
+ postNum: '112-0001',
76
+ address: '東京都渋谷区1−1−1',
77
+ email: 'test@jamm-pay.jp',
78
+ phone: '010-1234-5678',
79
+ birthdate: '2000-01-01'
80
+ },
81
+ options: {
82
+ force_kyc: true
83
+ }
84
+ }
85
+ end
86
+
87
+ def test_create_payment_response
88
+ {
89
+ token_id: 'dt_f5e599d3-8b9e-4d46-9a52-1a37e7b5b8ef',
90
+ charge_id: 'ct_h5e599d3-0000-4d46-9a52-1a37e7b5b8ef',
91
+ payment_url: 'https://jamm-pay.com/K5e599d3-8b9e-4d46-9a72-1a37e7b5b8ef',
92
+ created_at: '2023-11-07T15:30:00.000+03:00'
93
+ }
94
+ end
95
+
96
+ def test_charges
97
+ [test_charge]
98
+ end
99
+
100
+ def test_charge
101
+ {
102
+ charge_id: 'ct_h5e599d3-0000-4d46-9a52-1a37e7b5b8ef',
103
+ contract_id: 'dt_f5e599d3-8b9e-4d46-9a52-1a37e7b5b8ef',
104
+ status: 'CREATED',
105
+ description: 'Gold Gym',
106
+ amount: 1000,
107
+ amount_refunded: 800,
108
+ currency: 'JPY',
109
+ merchant_metadata: {
110
+ key1: 'value1',
111
+ key2: 'value2'
112
+ },
113
+ created_at: '2023-11-07T15:30:00.000+03:00',
114
+ updated_at: '2023-11-11T15:30:00.000+03:00'
115
+ }
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,59 @@
1
+ $LOAD_PATH.unshift(File.join(File.join(File.dirname(__FILE__), '..'), 'lib'))
2
+ require 'test/unit'
3
+ require 'mocha/test_unit'
4
+ require 'stringio'
5
+ require 'jamm'
6
+ require File.expand_path('test_data', __dir__)
7
+
8
+ # monkeypatch request methods
9
+ module Jamm
10
+ @mock_rest_client = nil
11
+
12
+ class << self
13
+ attr_writer :mock_rest_client
14
+
15
+ remove_method :execute_request
16
+ end
17
+
18
+ def self.execute_request(options)
19
+ get_params = (options[:headers] || {})[:params]
20
+ post_params = options[:payload]
21
+ case options[:method]
22
+ when :get then @mock_rest_client.get options[:url], get_params, post_params
23
+ when :post then @mock_rest_client.post options[:url], get_params, post_params
24
+ when :patch then @mock_rest_client.patch options[:url], get_params, post_params
25
+ when :delete then @mock_rest_client.delete options[:url], get_params, post_params
26
+ end
27
+ end
28
+ end
29
+
30
+ module Test
31
+ module Unit
32
+ class TestCase
33
+ include Jamm::TestData
34
+ include Mocha
35
+
36
+ class << self
37
+ alias context sub_test_case
38
+ alias should test
39
+ end
40
+
41
+ def encode_credentials(client_id, client_secret)
42
+ "Basic #{Base64.strict_encode64("#{client_id}:#{client_secret}")}"
43
+ end
44
+
45
+ setup do
46
+ @mock = mock
47
+ Jamm.mock_rest_client = @mock
48
+ Jamm.client_id = 'client id'
49
+ Jamm.client_secret = 'client secret'
50
+ end
51
+
52
+ teardown do
53
+ Jamm.mock_rest_client = nil
54
+ Jamm.client_id = nil
55
+ Jamm.client_secret = nil
56
+ end
57
+ end
58
+ end
59
+ end
metadata ADDED
@@ -0,0 +1,98 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jamm
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Jamm
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-04-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rest-client
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ description: Jamm help you make payment without credit cards
28
+ email: support@jamm-pay.jp
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - ".github/workflows/build.yml"
34
+ - ".github/workflows/ruby-publish.yml"
35
+ - ".gitignore"
36
+ - ".rubocop.yml"
37
+ - CONTRIBUTORS
38
+ - Gemfile
39
+ - LICENSE
40
+ - README.md
41
+ - Rakefile
42
+ - images/jamm_logo.png
43
+ - jamm.gemspec
44
+ - lib/jamm.rb
45
+ - lib/jamm/api_operations/create.rb
46
+ - lib/jamm/api_operations/get.rb
47
+ - lib/jamm/api_operations/list.rb
48
+ - lib/jamm/api_operations/update.rb
49
+ - lib/jamm/api_resource.rb
50
+ - lib/jamm/charge.rb
51
+ - lib/jamm/errors.rb
52
+ - lib/jamm/jamm_object.rb
53
+ - lib/jamm/oauth.rb
54
+ - lib/jamm/payment.rb
55
+ - lib/jamm/request.rb
56
+ - lib/jamm/time_util.rb
57
+ - lib/jamm/token.rb
58
+ - lib/jamm/util.rb
59
+ - lib/jamm/version.rb
60
+ - test/jamm/charge_test.rb
61
+ - test/jamm/oauth_test.rb
62
+ - test/jamm/payment_test.rb
63
+ - test/jamm/time_util_test.rb
64
+ - test/jamm/token_test.rb
65
+ - test/test_data.rb
66
+ - test/test_helper.rb
67
+ homepage: ''
68
+ licenses:
69
+ - MIT
70
+ metadata:
71
+ source_code_uri: https://github.com/jamm-pay/Jamm-SDK-Ruby
72
+ post_install_message:
73
+ rdoc_options: []
74
+ require_paths:
75
+ - lib
76
+ required_ruby_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: 2.7.0
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ requirements: []
87
+ rubygems_version: 3.4.19
88
+ signing_key:
89
+ specification_version: 4
90
+ summary: Ruby SDK for the Jamm API
91
+ test_files:
92
+ - test/jamm/charge_test.rb
93
+ - test/jamm/oauth_test.rb
94
+ - test/jamm/payment_test.rb
95
+ - test/jamm/time_util_test.rb
96
+ - test/jamm/token_test.rb
97
+ - test/test_data.rb
98
+ - test/test_helper.rb