RecurlySubscription.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. const { ObjectId } = require('mongodb')
  2. const Subscription = require('./Subscription')
  3. const MockRecurlyApiClass = require('../mocks/MockRecurlyApi')
  4. const RecurlyWrapper = require('../../../../app/src/Features/Subscription/RecurlyWrapper')
  5. const { promisifyClass } = require('@overleaf/promise-utils')
  6. let MockRecurlyApi
  7. before(function () {
  8. MockRecurlyApi = MockRecurlyApiClass.instance()
  9. })
  10. class RecurlySubscription {
  11. constructor(options = {}) {
  12. options.recurlySubscription_id = new ObjectId().toString()
  13. this.subscription = new Subscription(options)
  14. this.uuid = options.recurlySubscription_id
  15. this.state = options.state || 'active'
  16. this.tax_in_cents = 100
  17. this.tax_rate = 0.2
  18. this.unit_amount_in_cents = 500
  19. this.currency = 'GBP'
  20. this.current_period_ends_at = new Date(2018, 4, 5)
  21. this.trial_ends_at = new Date(2018, 6, 7)
  22. this.account = {
  23. id: this.subscription.admin_id.toString(),
  24. email: options.account && options.account.email,
  25. hosted_login_token: options.account && options.account.hosted_login_token,
  26. }
  27. this.planCode = options.planCode || 'personal'
  28. }
  29. ensureExists(callback) {
  30. this.subscription.ensureExists(error => {
  31. if (error) {
  32. return callback(error)
  33. }
  34. MockRecurlyApi.addMockSubscription(this)
  35. callback()
  36. })
  37. }
  38. buildCallbackXml(event) {
  39. return RecurlyWrapper._buildXml(event, {
  40. subscription: {
  41. uuid: this.uuid,
  42. state: this.state,
  43. plan: {
  44. plan_code: this.planCode,
  45. },
  46. },
  47. account: {
  48. account_code: this.account.id,
  49. },
  50. })
  51. }
  52. }
  53. module.exports = RecurlySubscription
  54. module.exports.promises = promisifyClass(RecurlySubscription, {
  55. without: ['buildCallbackXml'],
  56. })