import assert from 'assert'; import React from 'react'; // jshint ignore:line import Root, { ChangeEmail, ChangePassword } from 'misago/components/options/sign-in-credentials'; // jshint ignore:line import misago from 'misago/index'; import snackbar from 'misago/services/snackbar'; import * as testUtils from 'misago/utils/test-utils'; let snackbarStore = null; let user = testUtils.mockUser(); describe("Change E-mail Form", function() { beforeEach(function() { snackbarStore = testUtils.snackbarStoreMock(); snackbar.init(snackbarStore); }); afterEach(function() { testUtils.unmountComponents(); testUtils.snackbarClear(snackbar); $.mockjax.clear(); }); it("renders", function(done) { /* jshint ignore:start */ testUtils.render(); /* jshint ignore:end */ testUtils.onElement('#test-mount form', function() { assert.ok(true, "component renders"); done(); }); }); it("handles empty submit", function(done) { /* jshint ignore:start */ testUtils.render(); /* jshint ignore:end */ snackbarStore.callback(function(message) { assert.deepEqual(message, { message: "Fill out all fields.", type: 'error' }, "error message was shown"); done(); }); testUtils.onElement('#test-mount form', function() { testUtils.simulateSubmit('#test-mount form'); }); }); it("handles backend rejection", function(done) { $.mockjax({ url: user.api_url.change_email, status: 400, responseText: { password: "Lol nope!" } }); /* jshint ignore:start */ testUtils.render(); /* jshint ignore:end */ snackbarStore.callback(function(message) { assert.deepEqual(message, { message: "Lol nope!", type: 'error' }, "error message from backend was shown"); done(); }); testUtils.onElement('#test-mount form', function() { testUtils.simulateChange('#test-mount form #id_new_email', 'new@wt.com'); testUtils.simulateChange('#test-mount form #id_password', 'p4ssw0rd'); testUtils.simulateSubmit('#test-mount form'); }); }); it("handles backend error", function(done) { $.mockjax({ url: user.api_url.change_email, status: 500 }); /* jshint ignore:start */ testUtils.render(); /* jshint ignore:end */ snackbarStore.callback(function(message) { assert.deepEqual(message, { message: "Unknown error has occured.", type: 'error' }, "error message from backend was shown"); done(); }); testUtils.onElement('#test-mount form', function() { testUtils.simulateChange('#test-mount form #id_new_email', 'new@wt.com'); testUtils.simulateChange('#test-mount form #id_password', 'p4ssw0rd'); testUtils.simulateSubmit('#test-mount form'); }); }); it("handles successful submission", function(done) { $.mockjax({ url: user.api_url.change_email, status: 200, responseText: { detail: "Well done gud!" } }); /* jshint ignore:start */ testUtils.render(); /* jshint ignore:end */ snackbarStore.callback(function(message) { assert.deepEqual(message, { message: "Well done gud!", type: 'success' }, "success message from backend was shown"); done(); }); testUtils.onElement('#test-mount form', function() { testUtils.simulateChange('#test-mount form #id_new_email', 'new@wt.com'); testUtils.simulateChange('#test-mount form #id_password', 'p4ssw0rd'); testUtils.simulateSubmit('#test-mount form'); }); }); }); describe("Change Password Form", function() { beforeEach(function() { snackbarStore = testUtils.snackbarStoreMock(); snackbar.init(snackbarStore); misago._context = { SETTINGS: { password_length_min: 4 } } }); afterEach(function() { testUtils.unmountComponents(); testUtils.snackbarClear(snackbar); $.mockjax.clear(); }); it("renders", function(done) { /* jshint ignore:start */ testUtils.render(); /* jshint ignore:end */ testUtils.onElement('#test-mount form', function() { assert.ok(true, "component renders"); done(); }); }); it("handles empty submit", function(done) { /* jshint ignore:start */ testUtils.render(); /* jshint ignore:end */ snackbarStore.callback(function(message) { assert.deepEqual(message, { message: "Fill out all fields.", type: 'error' }, "error message was shown"); done(); }); testUtils.onElement('#test-mount form', function() { testUtils.simulateSubmit('#test-mount form'); }); }); it("handles passwords mismatch", function(done) { /* jshint ignore:start */ testUtils.render(); /* jshint ignore:end */ snackbarStore.callback(function(message) { assert.deepEqual(message, { message: "New passwords are different.", type: 'error' }, "error message was shown"); done(); }); testUtils.onElement('#test-mount form', function() { testUtils.simulateChange('#test-mount form #id_new_password', 'newps'); testUtils.simulateChange('#test-mount form #id_repeat_password', 'nesss'); testUtils.simulateChange('#test-mount form #id_password', 'p4ssw0rd'); testUtils.simulateSubmit('#test-mount form'); }); }); it("handles backend rejection", function(done) { $.mockjax({ url: user.api_url.change_password, status: 400, responseText: { password: "Lol nope!" } }); /* jshint ignore:start */ testUtils.render(); /* jshint ignore:end */ snackbarStore.callback(function(message) { assert.deepEqual(message, { message: "Lol nope!", type: 'error' }, "error message from backend was shown"); done(); }); testUtils.onElement('#test-mount form', function() { testUtils.simulateChange('#test-mount form #id_new_password', 'newps'); testUtils.simulateChange('#test-mount form #id_repeat_password', 'newps'); testUtils.simulateChange('#test-mount form #id_password', 'p4ssw0rd'); testUtils.simulateSubmit('#test-mount form'); }); }); it("handles backend error", function(done) { $.mockjax({ url: user.api_url.change_password, status: 500 }); /* jshint ignore:start */ testUtils.render(); /* jshint ignore:end */ snackbarStore.callback(function(message) { assert.deepEqual(message, { message: "Unknown error has occured.", type: 'error' }, "error message from backend was shown"); done(); }); testUtils.onElement('#test-mount form', function() { testUtils.simulateChange('#test-mount form #id_new_password', 'newps'); testUtils.simulateChange('#test-mount form #id_repeat_password', 'newps'); testUtils.simulateChange('#test-mount form #id_password', 'p4ssw0rd'); testUtils.simulateSubmit('#test-mount form'); }); }); it("handles successful submission", function(done) { $.mockjax({ url: user.api_url.change_password, status: 200, responseText: { detail: "Well done gud!" } }); /* jshint ignore:start */ testUtils.render(); /* jshint ignore:end */ snackbarStore.callback(function(message) { assert.deepEqual(message, { message: "Well done gud!", type: 'success' }, "success message from backend was shown"); done(); }); testUtils.onElement('#test-mount form', function() { testUtils.simulateChange('#test-mount form #id_new_password', 'newps'); testUtils.simulateChange('#test-mount form #id_repeat_password', 'newps'); testUtils.simulateChange('#test-mount form #id_password', 'p4ssw0rd'); testUtils.simulateSubmit('#test-mount form'); }); }); }); describe("Change Sign In Credentials Root", function() { beforeEach(function() { snackbarStore = testUtils.snackbarStoreMock(); snackbar.init(snackbarStore); misago._context = { FORGOTTEN_PASSWORD_URL: '/lolo/toto/', SETTINGS: { password_length_min: 4 } } }); it("renders", function(done) { /* jshint ignore:start */ testUtils.render(); /* jshint ignore:end */ testUtils.onElement('#test-mount .message-line', function() { assert.equal($("#test-mount .message-line a").attr('href'), misago._context.FORGOTTEN_PASSWORD_URL, "change forgotten password url is rendered"); done(); }); }); });