Subscription.js 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. const { db, ObjectId } = require('../../../../app/src/infrastructure/mongodb')
  2. const { expect } = require('chai')
  3. const SubscriptionUpdater = require('../../../../app/src/Features/Subscription/SubscriptionUpdater')
  4. const SubscriptionModel = require('../../../../app/src/models/Subscription')
  5. .Subscription
  6. const DeletedSubscriptionModel = require(`../../../../app/src/models/DeletedSubscription`)
  7. .DeletedSubscription
  8. class Subscription {
  9. constructor(options = {}) {
  10. this.admin_id = options.adminId || ObjectId()
  11. this.overleaf = options.overleaf || {}
  12. this.groupPlan = options.groupPlan
  13. this.manager_ids = options.managerIds || [this.admin_id]
  14. this.member_ids = options.memberIds || []
  15. this.invited_emails = options.invitedEmails || []
  16. this.teamName = options.teamName
  17. this.teamInvites = options.teamInvites || []
  18. this.planCode = options.planCode
  19. this.recurlySubscription_id = options.recurlySubscription_id
  20. }
  21. ensureExists(callback) {
  22. if (this._id) {
  23. return callback(null)
  24. }
  25. const options = { upsert: true, new: true, setDefaultsOnInsert: true }
  26. SubscriptionModel.findOneAndUpdate(
  27. { admin_id: this.admin_id },
  28. this,
  29. options,
  30. (error, subscription) => {
  31. if (error) {
  32. return callback(error)
  33. }
  34. this._id = subscription._id
  35. callback()
  36. }
  37. )
  38. }
  39. get(callback) {
  40. db.subscriptions.findOne({ _id: ObjectId(this._id) }, callback)
  41. }
  42. setManagerIds(managerIds, callback) {
  43. return SubscriptionModel.findOneAndUpdate(
  44. { _id: ObjectId(this._id) },
  45. { manager_ids: managerIds },
  46. callback
  47. )
  48. }
  49. refreshUsersFeatures(callback) {
  50. SubscriptionUpdater.refreshUsersFeatures(this, callback)
  51. }
  52. expectDeleted(deleterData, callback) {
  53. DeletedSubscriptionModel.find(
  54. { 'subscription._id': this._id },
  55. (error, deletedSubscriptions) => {
  56. if (error) {
  57. return callback(error)
  58. }
  59. expect(deletedSubscriptions.length).to.equal(1)
  60. const deletedSubscription = deletedSubscriptions[0]
  61. expect(deletedSubscription.subscription.teamInvites).to.be.empty
  62. expect(deletedSubscription.subscription.invited_emails).to.be.empty
  63. expect(deletedSubscription.deleterData.deleterIpAddress).to.equal(
  64. deleterData.ip
  65. )
  66. if (deleterData.id) {
  67. expect(deletedSubscription.deleterData.deleterId.toString()).to.equal(
  68. deleterData.id.toString()
  69. )
  70. } else {
  71. expect(deletedSubscription.deleterData.deleterId).to.be.undefined
  72. }
  73. SubscriptionModel.findById(this._id, (error, subscription) => {
  74. expect(subscription).to.be.null
  75. callback(error)
  76. })
  77. }
  78. )
  79. }
  80. }
  81. module.exports = Subscription