import assert from 'assert';
import moment from 'moment';
import React from 'react'; // jshint ignore:line
import BanDetails from 'misago/components/profile/ban-details'; // jshint ignore:line
import misago from 'misago/index';
import ajax from 'misago/services/ajax';
import polls from 'misago/services/polls';
import * as testUtils from 'misago/utils/test-utils';
let profileMock = {
username: 'BobBoberson',
api_url: {
ban: '/test-api/users/123/just-ban/'
}
};
let expires_on = moment().add(5, 'days');
describe("User Profile Ban Details", function() {
beforeEach(function() {
polls.init(ajax, null);
});
afterEach(function() {
testUtils.unmountComponents();
$.mockjax.clear();
polls.stop('ban-details');
});
it("preloads", function(done) {
misago._context.PROFILE_BAN = {
user_message: null,
staff_message: null,
expires_on: null
};
$.mockjax({
url: profileMock.api_url.ban,
status: 200,
responseText: {
user_message: null,
staff_message: null,
expires_on: null
}
});
/* jshint ignore:start */
testUtils.render();
/* jshint ignore:end */
testUtils.onElement('#test-mount .ban-expires p.lead', function(element) {
assert.equal(element.text(), "BobBoberson's ban is permanent.",
"expiration message is displayed");
assert.ok(!$('#test-mount .ban-user-message').length,
"user message is hidden");
assert.ok(!$('#test-mount .ban-staff-message').length,
"staff message is hidden");
done();
});
});
it("loads", function(done) {
$.mockjax({
url: profileMock.api_url.ban,
status: 200,
responseText: {
user_message: null,
staff_message: null,
expires_on: null
}
});
/* jshint ignore:start */
testUtils.render();
/* jshint ignore:end */
testUtils.onElement('#test-mount .ban-expires p.lead', function(element) {
assert.equal(element.text(), "BobBoberson's ban is permanent.",
"expiration message is displayed");
assert.ok(!$('#test-mount .ban-user-message').length,
"user message is hidden");
assert.ok(!$('#test-mount .ban-staff-message').length,
"staff message is hidden");
done();
});
});
it("loads kitchensink", function(done) {
$.mockjax({
url: profileMock.api_url.ban,
status: 200,
responseText: {
user_message: {
plain: "Test user message.",
html: "
Test user message.
"
},
staff_message: {
plain: "Test staff message.",
html: "Test staff message.
"
},
expires_on: expires_on.format()
}
});
/* jshint ignore:start */
testUtils.render();
/* jshint ignore:end */
testUtils.onElement('#test-mount .ban-expires p.lead', function(element) {
assert.equal(element.text(), "This ban expires in 5 days.",
"expiration message is displayed");
assert.equal($('#test-mount .ban-user-message p').text(),
"Test user message.",
"user message is displayed");
assert.equal($('#test-mount .ban-staff-message p').text(),
"Test staff message.",
"staff message is displayed");
done();
});
});
it("loads no ban", function(done) {
$.mockjax({
url: profileMock.api_url.ban,
status: 200,
responseText: {}
});
/* jshint ignore:start */
testUtils.render();
/* jshint ignore:end */
testUtils.onElement('#test-mount .panel-message-body', function(element) {
assert.equal(element.find('p').text(), "No ban is active at the moment.",
"no ban message is displayed");
done();
});
});
it("handles backend error", function(done) {
$.mockjax({
url: profileMock.api_url.ban,
status: 500
});
/* jshint ignore:start */
testUtils.render();
/* jshint ignore:end */
testUtils.onElement('#test-mount .panel-message-body', function(element) {
assert.equal(element.find('p').text(), "Unknown error has occured.",
"rejection message is displayed");
done();
});
});
it("handles backend rejection", function(done) {
$.mockjax({
url: profileMock.api_url.ban,
status: 403,
responseText: {
detail: "You can't into user bans!"
}
});
/* jshint ignore:start */
testUtils.render();
/* jshint ignore:end */
testUtils.onElement('#test-mount .panel-message-body', function(element) {
assert.equal(element.find('p').text(), "You can't into user bans!",
"rejection message is displayed");
done();
});
});
});