Skip to content

Commit f32d2ef

Browse files
authored
KRED-2900 Add POST /split_rules (#56)
1 parent b1dc87c commit f32d2ef

5 files changed

Lines changed: 408 additions & 0 deletions

File tree

lib/xendit_api/api/split_rule.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
require 'xendit_api/api/base'
2+
require 'xendit_api/model/split_rule'
3+
4+
module XenditApi
5+
module Api
6+
class SplitRule < XenditApi::Api::Base
7+
PATH = '/split_rules'.freeze
8+
9+
def create(params)
10+
headers = { 'Path-Group' => PATH }
11+
response = client.post(PATH, params, headers)
12+
XenditApi::Model::SplitRule.new(response)
13+
end
14+
end
15+
end
16+
end

lib/xendit_api/client.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
require 'xendit_api/api/transfer'
1414
require 'xendit_api/api/transaction'
1515
require 'xendit_api/api/fee_rule'
16+
require 'xendit_api/api/split_rule'
1617
require 'xendit_api/api/report'
1718
require 'logger'
1819

@@ -88,6 +89,10 @@ def fee_rule
8889
@fee_rule || XenditApi::Api::FeeRule.new(self)
8990
end
9091

92+
def split_rule
93+
@split_rule ||= XenditApi::Api::SplitRule.new(self)
94+
end
95+
9196
def report
9297
@report || XenditApi::Api::Report.new(self)
9398
end

lib/xendit_api/model/split_rule.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
require 'xendit_api/model/base'
2+
3+
module XenditApi
4+
module Model
5+
class SplitRule < XenditApi::Model::Base
6+
attr_accessor :id,
7+
:name,
8+
:description,
9+
:created,
10+
:updated,
11+
:routes
12+
end
13+
end
14+
end
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
require 'spec_helper'
2+
3+
RSpec.describe XenditApi::Api::SplitRule do
4+
let(:client) { XenditApi::Client.new('FILTERED_AUTH_KEY') }
5+
let(:split_rule_api) { described_class.new(client) }
6+
7+
describe 'PATH constant' do
8+
it 'has the correct path' do
9+
expect(described_class::PATH).to eq('/split_rules')
10+
end
11+
end
12+
13+
describe 'inheritance' do
14+
it 'inherits from Base' do
15+
expect(described_class.superclass).to eq(XenditApi::Api::Base)
16+
end
17+
end
18+
19+
describe '#create' do
20+
let(:params) do
21+
{
22+
name: 'Test Split Rule',
23+
description: 'A test split rule',
24+
routes: [
25+
{
26+
flat_amount: 1000,
27+
currency: 'IDR',
28+
destination: {
29+
type: 'MERCHANT',
30+
account_code: 'MERCHANT_001'
31+
}
32+
}
33+
]
34+
}
35+
end
36+
37+
let(:expected_response) do
38+
{
39+
id: 'sr_123456789',
40+
name: 'Test Split Rule',
41+
description: 'A test split rule',
42+
created: '2023-10-08T10:00:00.000Z',
43+
updated: '2023-10-08T10:00:00.000Z',
44+
routes: [
45+
{
46+
flat_amount: 1000,
47+
currency: 'IDR',
48+
destination: {
49+
type: 'MERCHANT',
50+
account_code: 'MERCHANT_001'
51+
}
52+
}
53+
]
54+
}
55+
end
56+
57+
it 'creates a split rule and returns a SplitRule model' do
58+
allow(client).to receive(:post).with('/split_rules', params, { 'Path-Group' => '/split_rules' })
59+
.and_return(expected_response)
60+
61+
result = split_rule_api.create(params)
62+
63+
expect(result).to be_a(XenditApi::Model::SplitRule)
64+
expect(result.id).to eq('sr_123456789')
65+
expect(result.name).to eq('Test Split Rule')
66+
expect(result.description).to eq('A test split rule')
67+
end
68+
69+
it 'sends correct headers with Path-Group' do
70+
allow(client).to receive(:post).and_return(expected_response)
71+
72+
split_rule_api.create(params)
73+
74+
expect(client).to have_received(:post).with(
75+
'/split_rules',
76+
params,
77+
{ 'Path-Group' => '/split_rules' }
78+
)
79+
end
80+
81+
it 'passes through the correct parameters' do
82+
allow(client).to receive(:post).and_return(expected_response)
83+
84+
split_rule_api.create(params)
85+
86+
expect(client).to have_received(:post).with('/split_rules', params, anything)
87+
end
88+
89+
context 'when client raises an error' do
90+
it 'propagates the error' do
91+
allow(client).to receive(:post).and_raise(StandardError, 'Network error')
92+
93+
expect { split_rule_api.create(params) }.to raise_error(StandardError, 'Network error')
94+
end
95+
end
96+
end
97+
98+
describe '#initialize' do
99+
it 'accepts a client parameter' do
100+
expect(split_rule_api.client).to eq(client)
101+
end
102+
end
103+
end

0 commit comments

Comments
 (0)