Skip to content
2 changes: 2 additions & 0 deletions src/lib/managers/v2/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@ export * from './simulateManager';
export * from './entitiesManager';
export * from './accountVerificationsManager';
export * from './invoicesManager';
export * from './linesManager';
export * from './movementsManager';
export * from './customersManager';
export * from './checkoutSessionsManager';
export * from './paymentIntentsManager';
export * from './paymentMethodsManager';
export * from './productsManager';
export * from './subscriptionsManager';
export * from './subscriptionItemsManager';
export * from './accountStatementsManager';
export * from './onboardingsManager';
25 changes: 24 additions & 1 deletion src/lib/managers/v2/invoicesManager.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,30 @@
import { ResourceArguments } from '../../../types';
import { Client } from '../../client';
import { ManagerMixin } from '../../mixins';
import { Invoice } from '../../resources/v2/invoice';

import { LinesManager } from './linesManager';

export class InvoicesManager extends ManagerMixin<Invoice> {
static resource = 'invoice';
static methods = ['list', 'get'];
static methods = ['list', 'get', 'addLines', 'removeLines'];

lines: LinesManager;

constructor(path: string, client: Client) {
super(path, client);
this.lines = new LinesManager('/v2/invoices/{invoice_id}/lines', client);
}

addLines(invoiceId: string, args?: ResourceArguments): Promise<Invoice> {
const innerArgs = args || {};
const path = `${this.buildPath()}/${invoiceId}/add_lines`;
return this._create({ path_: path, ...innerArgs });
}

removeLines(invoiceId: string, args?: ResourceArguments): Promise<Invoice> {
const innerArgs = args || {};
const path = `${this.buildPath()}/${invoiceId}/remove_lines`;
return this._create({ path_: path, ...innerArgs });
}
}
7 changes: 7 additions & 0 deletions src/lib/managers/v2/linesManager.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { ManagerMixin } from '../../mixins';
import { Line } from '../../resources/v2/line';

export class LinesManager extends ManagerMixin<Line> {
static resource = 'line';
static methods = ['update'];
}
14 changes: 14 additions & 0 deletions src/lib/managers/v2/subscriptionItemsManager.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { ResourceArguments } from '../../../types';
import { ManagerMixin } from '../../mixins';
import { SubscriptionItem } from '../../resources/v2/subscriptionItem';

export class SubscriptionItemsManager extends ManagerMixin<SubscriptionItem> {
static resource = 'subscription_item';
static methods = ['create', 'update', 'delete'];

create(args?: ResourceArguments): Promise<SubscriptionItem> {
const innerArgs = args || {};
const path = this.buildPath(innerArgs);
return this._create({ path_: path, ...innerArgs });
}
}
12 changes: 11 additions & 1 deletion src/lib/managers/v2/subscriptionsManager.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,20 @@
import { ResourceArguments } from '../../../types';
import { Client } from '../../client';
import { ManagerMixin } from '../../mixins';
import { Subscription } from '../../resources/v2/subscription';

import { SubscriptionItemsManager } from './subscriptionItemsManager';

export class SubscriptionsManager extends ManagerMixin<Subscription> {
static resource = 'subscription';
static methods = ['list', 'get', 'cancel'];
static methods = ['list', 'get', 'create', 'update', 'cancel'];

items: SubscriptionItemsManager;

constructor(path: string, client: Client) {
super(path, client);
this.items = new SubscriptionItemsManager('/v2/subscriptions/{subscription_id}/items', client);
}

cancel(subscriptionId: string, args?: ResourceArguments): Promise<Subscription> {
const innerArgs = args || {};
Expand Down
2 changes: 2 additions & 0 deletions src/lib/resources/v2/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@ export * from './entity';
export * from './accountVerification';
export * from './checkoutSession';
export * from './invoice';
export * from './line';
export * from './movement';
export * from './customer';
export * from './paymentIntent';
export * from './paymentMethod';
export * from './product';
export * from './subscription';
export * from './subscriptionItem';
export * from './accountStatement';
export * from './onboarding';
export * from './onboardingShareholder';
Expand Down
4 changes: 4 additions & 0 deletions src/lib/resources/v2/line.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import { ResourceMixin } from '../../mixins/resourceMixin';

export class Line extends ResourceMixin<Line> {
}
4 changes: 4 additions & 0 deletions src/lib/resources/v2/subscriptionItem.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import { ResourceMixin } from '../../mixins/resourceMixin';

export class SubscriptionItem extends ResourceMixin<SubscriptionItem> {
}
101 changes: 101 additions & 0 deletions src/spec/integration.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1293,6 +1293,45 @@ test('fintoc.v2.invoices.get()', async (t) => {
t.is(invoice.url, `v2/invoices/${invoiceId}`);
});

test('fintoc.v2.invoices.addLines()', async (t) => {
const ctx: any = t.context;
const invoiceId = 'invoice_id';
const lines = [{
amount: 10000,
currency: 'CLP',
period_end: '2024-02-01',
period_start: '2024-01-01',
quantity: 1,
}];
const invoice = await ctx.fintoc.v2.invoices.addLines(invoiceId, { lines });

t.is(invoice.method, 'post');
t.is(invoice.url, `v2/invoices/${invoiceId}/add_lines`);
});

test('fintoc.v2.invoices.removeLines()', async (t) => {
const ctx: any = t.context;
const invoiceId = 'invoice_id';
const lines = ['il_line_id'];
const invoice = await ctx.fintoc.v2.invoices.removeLines(invoiceId, { lines });

t.is(invoice.method, 'post');
t.is(invoice.url, `v2/invoices/${invoiceId}/remove_lines`);
});

test('fintoc.v2.invoices.lines.update()', async (t) => {
const ctx: any = t.context;
const invoiceId = 'invoice_id';
const lineId = 'il_line_id';
const line = await ctx.fintoc.v2.invoices.lines.update(lineId, {
invoice_id: invoiceId,
quantity: 2,
});

t.is(line.method, 'patch');
t.is(line.url, `v2/invoices/${invoiceId}/lines/${lineId}`);
});

test('fintoc.v2.paymentIntents.list()', async (t) => {
const ctx: any = t.context;
const paymentIntents = await ctx.fintoc.v2.paymentIntents.list();
Expand Down Expand Up @@ -1387,6 +1426,68 @@ test('fintoc.v2.subscriptions.cancel()', async (t) => {
t.is(subscription.url, `v2/subscriptions/${subscriptionId}/cancel`);
});

test('fintoc.v2.subscriptions.create()', async (t) => {
const ctx: any = t.context;
const subscriptionData = {
customer: 'cus_id',
items: [{ price: 'price_id', quantity: 1 }],
};
const subscription = await ctx.fintoc.v2.subscriptions.create(subscriptionData);

t.is(subscription.method, 'post');
t.is(subscription.url, 'v2/subscriptions');
t.is(subscription.json.customer, subscriptionData.customer);
});

test('fintoc.v2.subscriptions.update()', async (t) => {
const ctx: any = t.context;
const subscriptionId = 'subscription_id';
const updateData = {
trial_end: '2024-12-31T00:00:00Z',
};
const subscription = await ctx.fintoc.v2.subscriptions.update(subscriptionId, updateData);

t.is(subscription.method, 'patch');
t.is(subscription.url, `v2/subscriptions/${subscriptionId}`);
});

test('fintoc.v2.subscriptions.items.create()', async (t) => {
const ctx: any = t.context;
const subscriptionId = 'subscription_id';
const item = await ctx.fintoc.v2.subscriptions.items.create({
subscription_id: subscriptionId,
price_data: { product: 'prod_id', amount: 10000, currency: 'CLP' },
quantity: 1,
});

t.is(item.method, 'post');
t.is(item.url, `v2/subscriptions/${subscriptionId}/items`);
});

test('fintoc.v2.subscriptions.items.update()', async (t) => {
const ctx: any = t.context;
const subscriptionId = 'subscription_id';
const itemId = 'si_item_id';
const item = await ctx.fintoc.v2.subscriptions.items.update(itemId, {
subscription_id: subscriptionId,
quantity: 3,
});

t.is(item.method, 'patch');
t.is(item.url, `v2/subscriptions/${subscriptionId}/items/${itemId}`);
});

test('fintoc.v2.subscriptions.items.delete()', async (t) => {
const ctx: any = t.context;
const subscriptionId = 'subscription_id';
const itemId = 'si_item_id';
const deletedIdentifier = await ctx.fintoc.v2.subscriptions.items.delete(itemId, {
subscription_id: subscriptionId,
});

t.is(deletedIdentifier, itemId);
});

test('fintoc.v2.products.list()', async (t) => {
const ctx: any = t.context;
const products = await ctx.fintoc.v2.products.list();
Expand Down
Loading