import { subMonths, subYears } from 'date-fns' import { factory } from 'factory-bot' import { address, datatype, date, internet, name, phone, random } from 'faker' import { sample } from 'lodash' import { PaymentMethods, SmartFitPlan } from '../../src/services/smartfit/enums' import { Person } from '../../src/services/smartfit/models' import { SmartFitPlanUtils } from '../../src/services/smartfit/utils' import { countryNames } from '../../src/utils/countries' factory.define( 'smartfit:person:address', Person, { complement: () => random.word(), number: () => datatype.number(), region: () => address.stateAbbr(), street: () => address.streetAddress(), zip: () => address.zipCode(), city: () => address.city(), state: () => address.state(), zone: null, }, Person, ) factory.define( 'smartfit:personData', Person, { id: () => datatype.number({ min: 1 }), email: () => internet.email(), name: () => name.findName(), phone: () => phone.phoneNumber(), status: () => 'active', turnstile_status: () => sample(['blocked']), membership_due_date: () => sample(['20']), payment_method: () => PaymentMethods.debit, birthdate: () => subYears(new Date(), 20), remaining_guests: () => datatype.number({ min: 1, max: 5 }), limit_guests: () => datatype.number({ min: 1, max: 5 }), purchase_confirmed_at: () => date.past(), plan: () => sample([SmartFitPlan.BLACK, SmartFitPlan.SMART]), location_id: () => datatype.number({ min: 1 }), location_acronym: () => sample(['SPCJDN2']), location_country: () => sample(countryNames), photo_url: () => internet.avatar(), last_email_message_deliver_at: () => date.past(), gender: () => sample(['Masculino', 'Feminino']), welsher: () => datatype.boolean(), address: factory.assocAttrs('smartfit:person:address'), smartphone_configs: () => [], password_recovery_url: () => internet.url(), main_purchase_id: () => datatype.number({ min: 1 }), main_purchase_expired_at: () => null, can_purchase_addon: () => true, addons_installments: () => [{ addon_code: random.word(), installments: datatype.number({ min: 1, max: 12 }) }], card_number: () => Math.floor(1000 + Math.random() * 9000).toString(), }, Person, ) factory.define( 'smartfit:person', Person, { id: () => datatype.number({ min: 1 }), email: () => internet.email(), name: () => name.findName(), phone: () => phone.phoneNumber(), status: () => 'active', birthdate: () => subYears(new Date(), 20), plan: () => sample([SmartFitPlan.BLACK, SmartFitPlan.SMART]), photoUrl: () => internet.avatar(), gender: () => sample(['Masculino', 'Feminino']), passwordRecoveryUrl: () => internet.url(), paymentMethod: () => PaymentMethods.debit, mainPurchaseId: () => datatype.number({ min: 1 }), mainPurchaseExpiredAt: () => undefined, canPurchaseAddon: () => true, turnstileStatus: () => sample(['blocked']), membershipDueDate: () => sample(['20']), remainingGuests: () => datatype.number({ min: 1, max: 5 }), limitGuests: () => datatype.number({ min: 1, max: 5 }), purchaseConfirmedAt: () => date.past(), locationId: () => datatype.number({ min: 1 }), locationAcronym: () => sample(['SPCJDN2']), lastEmailMessageDeliverAt: () => date.past(), welsher: () => datatype.boolean(), address: factory.assocAttrs('smartfit:person:address'), smartphoneConfigs: () => [], auth_token: () => datatype.uuid(), installments: () => [{ addonCode: random.word(), installments: datatype.number({ min: 1, max: 12 }) }], lastDigitsCardNumber: () => Math.floor(1000 + Math.random() * 9000).toString(), }, Person, ) factory.extend('smartfit:person', 'smartfit:person:money', { paymentMethod: PaymentMethods.money, }) factory.extend('smartfit:person', 'smartfit:person:blocked', { mainPurchaseExpiredAt: new Date(), }) factory.extend('smartfit:person', 'smartfit:person:cancelled', { mainPurchaseExpiredAt: date.past(1), }) factory.extend('smartfit:person', 'smartfit:person:main_purchase:in_cancellation', { mainPurchaseExpiredAt: date.future(), }) factory.extend('smartfit:person', 'smartfit:person:main_purchase:cancelling', { mainPurchaseExpiredAt: new Date(), }) factory.extend('smartfit:person', 'smartfit:person:main_purchase:cancelled', { mainPurchaseExpiredAt: subMonths(new Date(), 1), }) factory.extend('smartfit:person', 'smartfit:collaborator', { plan: sample(SmartFitPlanUtils.collaboratorPlanIds()), }) factory.extend('smartfit:collaborator', 'smartfit:collaborator:blocked', { mainPurchaseExpiredAt: new Date(), }) export { factory }