// __mocks__/stripe.ts: Jest Mock for Stripe class

/**
 * Fake a response from stripe.customers.list().
 * @example
 * mockStripeCustomerList(1) === { data: ['fake customer'], object: 'list', … }
 * @param count number of fake customers to return
 */
export const mockStripeCustomerList = (count: number) => ({
  data: (new Array(count)).fill('fake customer'),
  object: 'list',
  url: 'fake/v1/customers/',
});

const stripeCustomersList = () => mockStripeCustomerList(0);

const mock = jest.fn().mockImplementation(() => {
  return {
    customers: {
      list: () => jest.fn().mockImplementation(stripeCustomersList),
    },
  };
});

export default mock;

// Some other useful reads:
// https://stackoverflow.com/questions/51495473/typescript-and-jest-avoiding-type-errors-on-mocked-functions
// https://github.com/stripe/stripe-mock
// https://jestjs.io/docs/en/es6-class-mocks
// https://stackoverflow.com/a/57499771/1024811 (stripe jest mock)
// https://github.com/maurocarrero/sinon-jest-cheatsheet#return-value