import assert from 'assert';
import moment from 'moment'; // jshint ignore:line
import React from 'react'; // jshint ignore:line
import UserStatus, { StatusIcon, StatusLabel } from 'misago/components/user-status'; // jshint ignore:line
import * as testUtils from 'misago/utils/test-utils';
let status = {
is_hidden: false,
is_online_hidden: false,
is_offline_hidden: false,
is_online: false,
is_offline: false,
last_click: moment().subtract(7, 'days'),
is_banned: false,
banned_until: moment().add(7, 'days')
};
/* jshint ignore:start */
let user = {
username: 'Boberson'
};
/* jshint ignore:end */
describe("User Status", function() {
afterEach(function() {
testUtils.unmountComponents();
});
it('renders for offline user', function() {
/* jshint ignore:start */
let testStatus = Object.assign({}, status, {
is_offline: true
});
testUtils.render(
Some stuff
);
/* jshint ignore:end */
let element = $('#test-mount .user-status');
assert.ok(element.hasClass('user-offline'),
"component renders with valid class");
assert.equal(element.text().trim(), "Some stuff",
"component renders its children");
});
it('renders for offline (hidden) user', function() {
/* jshint ignore:start */
let testStatus = Object.assign({}, status, {
is_offline_hidden: true
});
testUtils.render(
Some stuff
);
/* jshint ignore:end */
let element = $('#test-mount .user-status');
assert.ok(element.hasClass('user-offline'),
"component renders with valid class");
assert.equal(element.text().trim(), "Some stuff",
"component renders its children");
});
it('renders for online user', function() {
/* jshint ignore:start */
let testStatus = Object.assign({}, status, {
is_online: true
});
testUtils.render(
Some stuff
);
/* jshint ignore:end */
let element = $('#test-mount .user-status');
assert.ok(element.hasClass('user-online'),
"component renders with valid class");
assert.equal(element.text().trim(), "Some stuff",
"component renders its children");
});
it('renders for online (hidden) user', function() {
/* jshint ignore:start */
let testStatus = Object.assign({}, status, {
is_online_hidden: true
});
testUtils.render(
Some stuff
);
/* jshint ignore:end */
let element = $('#test-mount .user-status');
assert.ok(element.hasClass('user-online'),
"component renders with valid class");
assert.equal(element.text().trim(), "Some stuff",
"component renders its children");
});
it('renders for hidden user', function() {
/* jshint ignore:start */
let testStatus = Object.assign({}, status, {
is_hidden: true
});
testUtils.render(
Some stuff
);
/* jshint ignore:end */
let element = $('#test-mount .user-status');
assert.ok(element.hasClass('user-offline'),
"component renders with valid class");
assert.equal(element.text().trim(), "Some stuff",
"component renders its children");
});
it('renders for banned user', function() {
/* jshint ignore:start */
let testStatus = Object.assign({}, status, {
is_banned: true
});
testUtils.render(
Some stuff
);
/* jshint ignore:end */
let element = $('#test-mount .user-status');
assert.ok(element.hasClass('user-banned'),
"component renders with valid class");
assert.equal(element.text().trim(), "Some stuff",
"component renders its children");
});
});
describe("User Status Icon", function() {
afterEach(function() {
testUtils.unmountComponents();
});
it('renders for offline user', function() {
/* jshint ignore:start */
let testStatus = Object.assign({}, status, {
is_offline: true
});
testUtils.render();
/* jshint ignore:end */
let element = $('#test-mount .status-icon');
assert.equal(element.text().trim(), 'panorama_fish_eye',
"component renders with valid icon");
});
it('renders for offline (hidden) user', function() {
/* jshint ignore:start */
let testStatus = Object.assign({}, status, {
is_offline_hidden: true
});
testUtils.render();
/* jshint ignore:end */
let element = $('#test-mount .status-icon');
assert.equal(element.text().trim(), 'label_outline',
"component renders with valid icon");
});
it('renders for online user', function() {
/* jshint ignore:start */
let testStatus = Object.assign({}, status, {
is_online: true
});
testUtils.render();
/* jshint ignore:end */
let element = $('#test-mount .status-icon');
assert.equal(element.text().trim(), 'lens',
"component renders with valid icon");
});
it('renders for online (hidden) user', function() {
/* jshint ignore:start */
let testStatus = Object.assign({}, status, {
is_online_hidden: true
});
testUtils.render();
/* jshint ignore:end */
let element = $('#test-mount .status-icon');
assert.equal(element.text().trim(), 'label',
"component renders with valid icon");
});
it('renders for hidden user', function() {
/* jshint ignore:start */
let testStatus = Object.assign({}, status, {
is_hidden: true
});
testUtils.render();
/* jshint ignore:end */
let element = $('#test-mount .status-icon');
assert.equal(element.text().trim(), 'help_outline',
"component renders with valid icon");
});
it('renders for banned user', function() {
/* jshint ignore:start */
let testStatus = Object.assign({}, status, {
is_banned: true
});
testUtils.render();
/* jshint ignore:end */
let element = $('#test-mount .status-icon');
assert.equal(element.text().trim(), 'remove_circle_outline',
"component renders with valid icon");
});
});
describe("User Status Label", function() {
afterEach(function() {
testUtils.unmountComponents();
});
it('renders for offline user', function() {
/* jshint ignore:start */
let testStatus = Object.assign({}, status, {
is_offline: true
});
testUtils.render();
/* jshint ignore:end */
let element = $('#test-mount .status-label');
assert.equal(element.text().trim(), gettext("Offline"),
"component renders with valid label");
assert.equal(element.attr('title'),
"Boberson was last seen " + status.last_click.fromNow(),
"component renders with valid help");
});
it('renders for offline (hidden) user', function() {
/* jshint ignore:start */
let testStatus = Object.assign({}, status, {
is_offline_hidden: true
});
testUtils.render();
/* jshint ignore:end */
let element = $('#test-mount .status-label');
assert.equal(element.text().trim(), gettext("Offline (hidden)"),
"component renders with valid label");
assert.equal(element.attr('title'),
"Boberson was last seen " + status.last_click.fromNow() + " (hidden)",
"component renders with valid status.help");
});
it('renders for online user', function() {
/* jshint ignore:start */
let testStatus = Object.assign({}, status, {
is_online: true
});
testUtils.render();
/* jshint ignore:end */
let element = $('#test-mount .status-label');
assert.equal(element.text().trim(), gettext("Online"),
"component renders with valid label");
assert.equal(element.attr('title'), "Boberson is online",
"component renders with valid help");
});
it('renders for online (hidden) user', function() {
/* jshint ignore:start */
let testStatus = Object.assign({}, status, {
is_online_hidden: true
});
testUtils.render();
/* jshint ignore:end */
let element = $('#test-mount .status-label');
assert.equal(element.text().trim(), gettext("Online (hidden)"),
"component renders with valid label");
assert.equal(element.attr('title'), "Boberson is online (hidden)",
"component renders with valid help");
});
it('renders for hidden user', function() {
/* jshint ignore:start */
let testStatus = Object.assign({}, status, {
is_hidden: true
});
testUtils.render();
/* jshint ignore:end */
let element = $('#test-mount .status-label');
assert.equal(element.text().trim(), gettext("Hidden"),
"component renders with valid label");
assert.equal(element.attr('title'), "Boberson is hiding presence",
"component renders with valid help");
});
it('renders for banned user', function() {
/* jshint ignore:start */
let testStatus = Object.assign({}, status, {
is_banned: true
});
testUtils.render();
/* jshint ignore:end */
let element = $('#test-mount .status-label');
assert.equal(element.text().trim(), gettext("Banned"),
"component renders with valid label");
assert.equal(element.attr('title'),
"Boberson is banned until " + status.banned_until.format('LL, LT'),
"component renders with valid help");
});
it('renders for permabanned user', function() {
/* jshint ignore:start */
let testStatus = Object.assign({}, status, {
is_banned: true,
banned_until: null
});
testUtils.render();
/* jshint ignore:end */
let element = $('#test-mount .status-label');
assert.equal(element.text().trim(), gettext("Banned"),
"component renders with valid label");
assert.equal(element.attr('title'), "Boberson is banned",
"component renders with valid help");
});
});