SubscriptionViewModelBuilderTests.coffee 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. SandboxedModule = require('sandboxed-module')
  2. sinon = require 'sinon'
  3. should = require("chai").should()
  4. modulePath = '../../../../app/js/Features/Subscription/SubscriptionViewModelBuilder'
  5. describe 'SubscriptionViewModelBuilder', ->
  6. mockSubscription =
  7. uuid: "subscription-123-active"
  8. plan:
  9. name: "Gold"
  10. plan_code: "gold"
  11. current_period_ends_at: new Date()
  12. state: "active"
  13. unit_amount_in_cents: 999
  14. account:
  15. account_code: "user-123"
  16. beforeEach ->
  17. @user =
  18. email:"tom@yahoo.com",
  19. _id: 'one',
  20. signUpDate: new Date('2000-10-01')
  21. @plan =
  22. name: "test plan"
  23. @SubscriptionFormatters =
  24. formatDate: sinon.stub().returns("Formatted date")
  25. formatPrice: sinon.stub().returns("Formatted price")
  26. @RecurlyWrapper =
  27. sign: sinon.stub().callsArgWith(1, null, "something")
  28. getSubscription: sinon.stub().callsArgWith 2, null,
  29. account:
  30. hosted_login_token: "hosted_login_token"
  31. @builder = SandboxedModule.require modulePath, requires:
  32. "settings-sharelatex": { apis: { recurly: { subdomain: "example.com" }}}
  33. "./RecurlyWrapper": @RecurlyWrapper
  34. "./PlansLocator": @PlansLocator = {}
  35. "./SubscriptionLocator": @SubscriptionLocator = {}
  36. "./SubscriptionFormatters": @SubscriptionFormatters
  37. "./LimitationsManager": {}
  38. "./V1SubscriptionManager": @V1SubscriptionManager = {}
  39. "logger-sharelatex":
  40. log:->
  41. warn:->
  42. "underscore": {}
  43. @PlansLocator.findLocalPlanInSettings = sinon.stub().returns(@plan)
  44. @SubscriptionLocator.getUsersSubscription = sinon.stub().callsArgWith(1, null, mockSubscription)
  45. @SubscriptionLocator.getMemberSubscriptions = sinon.stub().callsArgWith(1, null, null)
  46. @V1SubscriptionManager.getSubscriptionsFromV1 = sinon.stub().yields(null, @mockV1Sub = ['mock-v1-subs'])
  47. it 'builds the user view model', ->
  48. callback = (error, subscription, memberSubscriptions, billingDetailsLink, v1Sub) =>
  49. @error = error
  50. @subscription = subscription
  51. @memberSubscriptions = memberSubscriptions
  52. @billingDetailsLink = billingDetailsLink
  53. @v1Sub = v1Sub
  54. @builder.buildUsersSubscriptionViewModel(@user, callback)
  55. @subscription.name.should.eq 'test plan'
  56. @subscription.nextPaymentDueAt.should.eq 'Formatted date'
  57. @subscription.price.should.eq 'Formatted price'
  58. @billingDetailsLink.should.eq "https://example.com.recurly.com/account/billing_info/edit?ht=hosted_login_token"
  59. @v1Sub.should.deep.equal @mockV1Sub