webogram-i2p/test/unit/controllers/PasswordRecoveryModalControllerSpec.js
Bart aea8530556 Added tests to improve Controller test coverage to over 10% (#1428)
* fully tested CountrySelectModal Controller

* Added test CountrySelectModal Controller for forgotten scenarios

* fully tested ImportContactModal Controller

* fully tested ProfileEditModal Controller and cleanup style of tests

* fully tested PasswordRecoveryModal Controller

* tested most of UsernameEditModal Controller

* Improved readability, refactored beforeEach ImportContactModalControllerSpec

* Tried to make the code more DRY

* removed unnecessary 'this.'
2017-06-28 18:04:48 +03:00

114 lines
3.2 KiB
JavaScript

'use strict'
/* global describe, it, inject, expect, beforeEach, jasmine */
describe('PasswordRecoveryModalController', function () {
beforeEach(module('myApp.controllers'))
beforeEach(function () {
this.PasswordManager = {
errorField: null,
recover: function () {
return this
},
then: function (callback, error) {
if (!this.errorField) {
callback({})
} else {
error(this.errorField)
}
return {
finally: function (final) {
final()
}
}
}
}
this.ErrorService = { alert: jasmine.createSpy('alert') }
this.modalInstance = {
close: jasmine.createSpy('close'),
dismiss: jasmine.createSpy('dismiss')
}
inject(function (_$controller_, _$rootScope_, ___) {
this.$controller = _$controller_
this.$scope = _$rootScope_.$new()
this.$scope.recovery = {}
this.$controller('PasswordRecoveryModalController', {
$scope: this.$scope,
$q: {},
_: ___,
PasswordManager: this.PasswordManager,
MtpApiManager: {},
ErrorService: this.ErrorService,
$modalInstance: this.modalInstance
})
})
})
it('can handle a successful password change', function (done) {
this.$scope.checkCode()
expect(this.$scope.recovery.updating).toBe(true)
expect(this.ErrorService.alert).toHaveBeenCalledWith('Password deactivated', 'You have disabled Two-Step Verification.')
expect(this.modalInstance.close).toHaveBeenCalled()
done()
})
describe('when an error occurs', function () {
beforeEach(function () {
this.PasswordManager.errorField = {}
})
it('cancels the recovery', function (done) {
this.$scope.checkCode()
expect(this.$scope.recovery.updating).not.toBeDefined()
expect(this.ErrorService.alert).not.toHaveBeenCalled()
expect(this.modalInstance.close).not.toHaveBeenCalled()
done()
})
it('can handle the error for an empty code', function (done) {
this.PasswordManager.errorField.type = 'CODE_EMPTY'
this.$scope.checkCode()
expect(this.$scope.recovery.error_field).toEqual('code')
done()
})
it('can handle the error for an invalid code', function (done) {
this.PasswordManager.errorField.type = 'CODE_INVALID'
this.$scope.checkCode()
expect(this.$scope.recovery.error_field).toEqual('code')
done()
})
it('can handle the error for an empty password', function (done) {
this.PasswordManager.errorField.type = 'PASSWORD_EMPTY'
this.$scope.checkCode()
expect(this.modalInstance.dismiss).toHaveBeenCalled()
done()
})
it('can handle the error for the unavailability of the recovery', function (done) {
this.PasswordManager.errorField.type = 'PASSWORD_RECOVERY_NA'
this.$scope.checkCode()
expect(this.modalInstance.dismiss).toHaveBeenCalled()
done()
})
it('can handle the error for an expired recovery', function (done) {
this.PasswordManager.errorField.type = 'PASSWORD_RECOVERY_EXPIRED'
this.$scope.checkCode()
expect(this.modalInstance.dismiss).toHaveBeenCalled()
done()
})
})
})