import assert from 'assert';
import moment from 'moment';
import React from 'react'; // jshint ignore:line
import Header from 'misago/components/profile/header'; // jshint ignore:line
import * as testUtils from 'misago/utils/test-utils';
let profileMock = null;
describe("User Profile Header", function() {
beforeEach(function() {
profileMock = {
id: 42,
username: "BobBoberson",
email: '',
joined_on: moment(),
title: '',
rank: {
id: 321,
name: "Test Rank",
slug: "test-rank",
css_class: '',
is_tab: false,
title: ''
},
status: {
is_online: true
},
is_followed: false,
acl: {
can_follow: false,
can_moderate: false
}
};
});
afterEach(function() {
testUtils.unmountComponents();
});
it("renders", function() {
/* jshint ignore:start */
testUtils.render();
/* jshint ignore:end */
let element = $('#test-mount .page-header');
assert.ok(element.length, "component renders");
assert.equal(element.find('h1 .user-name').text(), profileMock.username,
"header displays correct username");
assert.equal(element.find('.user-joined-on abbr').text(),
"Joined a few seconds ago",
"correct join date is displayed");
assert.equal(element.find('.user-rank span').text(), "Test Rank",
"correct rank name is displaued");
assert.ok(element.find('.user-status-display').length,
"user status is displayed");
assert.ok(!element.find('.user-title').length, "no title is displayed");
assert.ok(!element.find('.user-email').length, "no email is displayed");
assert.ok(!element.find('.btn-follow').length,
"follow button is hidden");
assert.ok(!element.find('.btn-moderate').length,
"moderate button is hidden");
});
it("renders follow button", function() {
/* jshint ignore:start */
profileMock.acl.can_follow = true;
testUtils.render();
/* jshint ignore:end */
let element = $('#test-mount .page-header');
assert.ok(element.length, "component renders");
assert.ok(element.find('.btn-follow').length,
"follow button is shown");
});
it("renders moderation button", function() {
/* jshint ignore:start */
profileMock.acl.can_moderate = true;
testUtils.render();
/* jshint ignore:end */
let element = $('#test-mount .page-header');
assert.ok(element.length, "component renders");
assert.ok(element.find('.btn-moderate').length,
"moderate button is shown");
});
it("renders email", function() {
/* jshint ignore:start */
profileMock.email = 'lorem@ipsum.com';
testUtils.render();
/* jshint ignore:end */
let element = $('#test-mount .page-header');
assert.ok(element.length, "component renders");
assert.ok(element.find('.user-email a').text(), 'lorem@ipsum.com',
"email address renders");
});
it("renders user title", function() {
/* jshint ignore:start */
profileMock.title = "Test User";
testUtils.render();
/* jshint ignore:end */
let element = $('#test-mount .page-header');
assert.ok(element.length, "component renders");
assert.ok(element.find('.user-title').text(), "Test User",
"user title renders");
});
it("renders rank title", function() {
/* jshint ignore:start */
profileMock.rank.title = "Test Rank User";
testUtils.render();
/* jshint ignore:end */
let element = $('#test-mount .page-header');
assert.ok(element.length, "component renders");
assert.ok(element.find('.user-title').text(), "Test Rank User",
"user rank title renders");
});
it("renders rank url", function() {
/* jshint ignore:start */
profileMock.rank.is_tab = true;
profileMock.rank.absolute_url = '/rank-url/';
testUtils.render();
/* jshint ignore:end */
let element = $('#test-mount .page-header');
assert.ok(element.length, "component renders");
assert.ok(element.find('.user-rank a').text(), profileMock.rank.name,
"user rank renders as link to profile");
});
it("renders compact menu toggle", function(done) { // jshint ignore:line
/* jshint ignore:start */
let toggleNav = function() {
assert.ok(true, "callback was called!");
done();
}
testUtils.render();
/* jshint ignore:end */
let element = $('#test-mount .page-header');
assert.ok(element.length, "component renders");
testUtils.simulateClick('.btn-dropdown-toggle');
});
});