const { expect } = require('chai')
const async = require('async')
const User = require('./helpers/User')
const Subscription = require('./helpers/Subscription')

describe('Subscriptions', function () {
  describe('features', function () {
    describe('individual subscriptions', function () {
      beforeEach(function (done) {
        this.adminUser = new User()
        async.series(
          [
            cb => this.adminUser.ensureUserExists(cb),
            cb => {
              this.subscription = new Subscription({
                adminId: this.adminUser._id,
                groupPlan: false,
                planCode: 'professional'
              })
              this.subscription.ensureExists(cb)
            },
            cb => this.subscription.refreshUsersFeatures(cb)
          ],
          done
        )
      })

      it('should give features to admin', function (done) {
        this.adminUser.getFeatures((error, features) => {
          expect(features.collaborators).to.equal(-1)
          done(error)
        })
      })
    })

    describe('group subscriptions', function () {
      beforeEach(function (done) {
        this.adminUser = new User()
        this.memberUser = new User()
        async.series(
          [
            cb => this.adminUser.ensureUserExists(cb),
            cb => this.memberUser.ensureUserExists(cb),
            cb => {
              this.subscription = new Subscription({
                adminId: this.adminUser._id,
                memberIds: [this.memberUser._id],
                groupPlan: true,
                planCode: 'professional'
              })
              this.subscription.ensureExists(cb)
            },
            cb => this.subscription.refreshUsersFeatures(cb)
          ],
          done
        )
      })

      it('should give features to member', function (done) {
        this.memberUser.getFeatures((error, features) => {
          expect(features.collaborators).to.equal(-1)
          done(error)
        })
      })

      it('should not give features to admin', function (done) {
        this.adminUser.getFeatures((error, features) => {
          expect(features.collaborators).to.equal(1)
          done(error)
        })
      })
    })
  })
})
