Files
cartodb/lib/assets/test/spec/dashboard/components/delete-account/delete-account.spec.js
T
2020-06-15 10:58:47 +08:00

165 lines
4.7 KiB
JavaScript

const $ = require('jquery');
const Backbone = require('backbone');
const CartoNode = require('carto-node');
const UserModel = require('dashboard/data/user-model');
const DeleteAccountView = require('dashboard/components/delete-account/delete-account-view');
const client = new CartoNode.AuthenticatedClient();
describe('dashboard/components/delete-account/delete-account-view', function () {
let user, deleteAccountView, onErrorsSpy;
beforeEach(function () {
jasmine.Ajax.install();
user = new UserModel({
username: 'pepe',
base_url: 'http://pepe.carto.com',
email: 'pepe@carto.com',
account_type: 'FREE'
});
onErrorsSpy = jasmine.createSpy('onError');
deleteAccountView = new DeleteAccountView({
userModel: user,
onError: onErrorsSpy,
modalModel: new Backbone.Model(),
client
});
});
afterEach(function () {
deleteAccountView.clean();
jasmine.Ajax.uninstall();
});
describe('._initModels', function () {
it('should init models', function () {
expect(deleteAccountView._userModel).toBe(user);
});
});
describe('.render', function () {
it('should render properly', function () {
expect(deleteAccountView.$('.js-form')).toBeDefined();
});
describe('needs password confirmation', function () {
beforeEach(function () {
user.set('needs_password_confirmation', true);
});
it('should render properly', function () {
const content = deleteAccountView.render().el;
expect(content.innerHTML).toContain('In any case, you need to type your password.');
expect(deleteAccountView.$('input#deletion_password_confirmation').length).toBe(1);
});
});
});
describe('._onClickDelete', function () {
beforeEach(function () {
deleteAccountView.render();
});
describe('success', function () {
it('should should delete account', function () {
const successResponse = {
message: 'Success'
};
jasmine.Ajax.stubRequest(new RegExp(/api\/v3\/me/))
.andReturn({
status: 200,
contentType: 'application/json; charset=utf-8',
responseText: JSON.stringify(successResponse)
});
spyOn(deleteAccountView, '_onSuccess');
const event = $.Event('click');
spyOn(deleteAccountView, 'killEvent');
deleteAccountView._onClickDelete(event);
expect(deleteAccountView.killEvent).toHaveBeenCalledWith(event);
expect(deleteAccountView._onSuccess).toHaveBeenCalledWith(successResponse);
});
});
describe('error', function () {
it('should fail', function () {
const errorResponse = {
message: 'Error'
};
jasmine.Ajax.stubRequest(new RegExp(/api\/v3\/me/))
.andReturn({
status: 400,
contentType: 'application/json; charset=utf-8',
responseText: JSON.stringify(errorResponse)
});
const event = $.Event('click');
spyOn(deleteAccountView, 'killEvent');
deleteAccountView._onError({}, errorResponse);
deleteAccountView._onClickDelete(event);
expect(deleteAccountView.killEvent).toHaveBeenCalledWith(event);
expect(deleteAccountView._onError).toHaveBeenCalledWith({}, errorResponse);
});
});
});
describe('._onError', function () {
const errorResponse = {
message: 'Error'
};
jasmine.Ajax.stubRequest(new RegExp(/api\/v3\/me/))
.andReturn({
status: 400,
contentType: 'application/json; charset=utf-8',
responseText: JSON.stringify(errorResponse)
});
it('should throw error and close', function () {
spyOn(deleteAccountView, '_closeDialog');
deleteAccountView._onFormError({}, errorResponse);
expect(onErrorsSpy).toHaveBeenCalledWith({}, errorResponse);
expect(deleteAccountView._closeDialog).toHaveBeenCalled();
});
});
describe('._onSuccess', function () {
it('should set href and close', function () {
const successResponse = {
message: 'Success',
logout_url: '/logout'
};
jasmine.Ajax.stubRequest(new RegExp(/api\/v3\/me/))
.andReturn({
status: 200,
contentType: 'application/json; charset=utf-8',
responseText: JSON.stringify(successResponse)
});
const logout_url = '/logout';
spyOn(deleteAccountView, '_setHref');
spyOn(deleteAccountView, '_closeDialog');
deleteAccountView._onSuccess({ logout_url: logout_url }, 'success', jasmine.any(Object));
expect(deleteAccountView._setHref).toHaveBeenCalledWith(logout_url);
expect(deleteAccountView._closeDialog).toHaveBeenCalled();
});
});
});