import { factory } from 'factory-bot' import { datatype, date, internet, name, phone, random } from 'faker' import { sample } from 'lodash' import { BillingPeriod, Currency, N2BPaymentsProviders } from '../../src/services/n2b-payments' factory.define('n2b_payment:customer', Object, { id: () => datatype.number({ min: 1, max: 10 }), name: name.firstName, document: random.alphaNumeric, email: internet.email, phone: phone.phoneNumber, country_code: () => sample(['BR', 'MX']), currency: () => sample(Object.values(Currency)), external_id: datatype.uuid, }) factory.define('n2b_payment:transaction', Object, { card: () => ({ last4: random.alphaNumeric(4), iin: random.alphaNumeric(6), kind: sample(['credit', 'debit']), }), }) factory.define('n2b_payment:payment', Object, { id: () => datatype.number({ min: 1, max: 10 }), amount: () => datatype.number({ min: 1, max: 10 }), payment_provider: () => sample(Object.values(N2BPaymentsProviders)), paid_at: date.recent, transaction: () => factory.build('n2b_payment:transaction'), transaction_id: () => datatype.number({ min: 1, max: 10 }), card_installments: () => datatype.number({ min: 1, max: 12 }), }) factory.define('n2b_payment:refund', Object, { id: () => datatype.number({ min: 1, max: 10 }), invoice_pay_id: () => datatype.number({ min: 1, max: 10 }), invoice_installment_id: () => datatype.number({ min: 1, max: 10 }), amount: () => datatype.number({ min: 1 }), payment_provider: () => sample(Object.values(N2BPaymentsProviders)), refunded_at: date.recent, transaction_id: () => datatype.number({ min: 1, max: 10 }), invoice_pay: () => factory.build('n2b_payment:payment', { invoice_installment: factory.build('n2b_payment:installment'), }), transaction: () => factory.build('n2b_payment:transaction'), }) factory.define('n2b_payment:subscription', Object, { id: () => datatype.number({ min: 1, max: 10 }), customer_id: () => datatype.number({ min: 1, max: 10 }), company_id: () => datatype.number({ min: 1, max: 10 }), external_reference_id: datatype.uuid, amount: () => datatype.number({ min: 1 }), issued_at: date.past, period: () => sample(Object.values(BillingPeriod)), currency: () => sample(Object.values(Currency)), expires_at: date.future, card_installments: () => datatype.number({ min: 1, max: 12 }), customer: () => factory.build('n2b_payment:customer'), }) factory.define('n2b_payment:invoice', Object, { id: () => datatype.number({ min: 1, max: 10 }), customer_id: () => datatype.number({ min: 1, max: 10 }), subscription_id: () => datatype.number({ min: 1, max: 10 }), company_id: () => datatype.number({ min: 1, max: 10 }), installments_quantity: () => datatype.number({ min: 1, max: 12 }), amount: () => datatype.number({ min: 1 }), issued_at: date.recent, discount_amount: () => datatype.number({ min: 1 }), currency: () => sample(Object.values(Currency)), subscription: () => factory.build('n2b_payment:subscription'), customer: () => factory.build('n2b_payment:customer'), }) factory.define('n2b_payment:installment', Object, { id: () => datatype.number({ min: 1, max: 12 }), installment_number: () => datatype.number({ min: 1, max: 12 }), due_date: date.recent, amount: () => datatype.number({ min: 1 }), paid_at: date.recent, late_fee_amount_amount: () => datatype.number({ min: 1 }), interest_amount: () => datatype.number({ min: 1 }), fee_amount: () => datatype.number({ min: 1 }), discount_amount: () => datatype.number({ min: 1 }), card_installments: () => datatype.number({ min: 1, max: 12 }), payments: () => factory.buildMany('n2b_payment:payment', datatype.number({ min: 1, max: 5 })), invoice: () => factory.build('n2b_payment:invoice'), }) export { factory }