import assert from 'assert';
import moment from 'moment'; // jshint ignore:line
import React from 'react'; // jshint ignore:line
import ListReady from 'misago/components/threads-list/list/ready'; // jshint ignore:line
import * as testUtils from 'misago/utils/test-utils';
/* jshint ignore:start */
const props = {
threads: [
{
id: 123,
category: 3,
title: "Doloremque alias repudiandae magnam facilis eligendi.",
weight: 0,
top_category: 3,
replies: 2,
has_unapproved_posts: false,
started_on: moment("2016-04-17T16:37:42.317994Z"),
last_post: 68707,
last_poster_name: "Amya",
last_poster_url: "/user/amya-1522/",
last_post_on: moment("2016-04-17T16:37:42.364183Z"),
is_read: true,
is_unapproved: false,
is_hidden: false,
is_closed: false,
absolute_url: "/threads/not-implemented-yet-123/",
last_post_url: "/threads/not-implemented-yet-123/last/",
new_post_url: "/threads/not-implemented-yet-123/new/",
subscription: true,
api_url: "/api/threads/123/",
moderation: [],
acl: {
can_edit: true,
can_reply: true,
can_hide: 2,
can_close: 1,
can_report: 1,
can_see_reports: 1,
can_move: 1,
can_pin: 2,
can_approve: 1
}
},
{
id: 42,
category: 4,
title: "Sit facere pariatur consequatur qui voluptatum ducimus.",
weight: 0,
top_category: 3,
replies: 3,
has_unapproved_posts: false,
started_on: moment("2016-04-17T16:37:13.224850Z"),
last_post: 67637,
last_poster_name: "Madora",
last_poster_url: "/user/madora-1530/",
last_post_on: moment("2016-04-17T16:37:13.287355Z"),
is_read: true,
is_unapproved: false,
is_hidden: false,
is_closed: false,
absolute_url: "/threads/not-implemented-yet-42/",
last_post_url: "/threads/not-implemented-yet-42/last/",
new_post_url: "/threads/not-implemented-yet-42/new/",
subscription: null,
api_url: "/api/threads/42/",
moderation: [],
acl: {
can_edit: true,
can_reply: true,
can_hide: 2,
can_close: 1,
can_report: 1,
can_see_reports: 1,
can_move: 1,
can_pin: 2,
can_approve: 1
}
}
],
categories: {
2: {
id: 2,
parent: null,
name: "Root",
description: null,
css_class: null,
absolute_url: "/",
api_url: {
read: "/api/threads/read/"
},
special_role: true
},
3: {
id: 3,
parent: {
id: 2,
name: "Root",
css_class: null,
absolute_url: "/"
},
name: "First category",
description: null,
css_class: "accent",
absolute_url: "/category/first-category-3/",
api_url: {
read: "/api/threads/read/?category=3"
}
},
4: {
id: 4,
parent: {
id: 3,
name: "First category",
css_class: null,
absolute_url: "/category/first-category-3/"
},
name: "Herma Turnpike",
description: null,
css_class: null,
absolute_url: "/category/herma-turnpike-4/",
api_url: {
read: "/api/threads/read/?category=4"
}
}
},
list: {
type: 'all',
path: '',
name: gettext("All"),
longName: gettext("All threads")
},
diffSize: 0,
applyDiff: null,
showOptions: false,
selection: [],
busyThreads: []
};
/* jshint ignore:end */
describe("Ready Threads List", function() {
afterEach(function() {
testUtils.unmountComponents();
});
it("renders", function(done) {
/* jshint ignore:start */
testUtils.render();
/* jshint ignore:end */
testUtils.onElement('#test-mount .threads-list', function(element) {
assert.ok(true, "component renders");
assert.ok(!$(element).find('.thread-busy').length,
"no thread is busy");
assert.ok(!$(element).find('.thread-selected').length,
"no thread is selected");
assert.ok(!$(element).find('.thread-new').length,
"no thread is unread");
assert.ok(!$(element).find('.thread-new-posts').length,
"no thread is unread");
assert.ok(!$(element).find('.thread-pinned-globally').length,
"no thread is pinned globally");
assert.ok(!$(element).find('.thread-pinned-locally').length,
"no thread is pinned locally");
assert.ok(!$(element).find('.thread-unapproved').length,
"no thread is unapproved");
assert.ok(!$(element).find('.thread-unapproved-posts').length,
"no thread has unapproved posts");
assert.ok(!$(element).find('.thread-hidden').length,
"no thread is hidden");
assert.ok(!$(element).find('.thread-closed').length,
"no thread is closed");
assert.ok(!$(element).find('.thread-options').length,
"no thread options are shown");
done();
});
});
it("renders with diff message", function(done) { // jshint ignore:line
/* jshint ignore:start */
const applyDiff = function() {
assert.ok(true, "apply diff message runs callback");
done();
};
const newProps = Object.assign({}, props, {
diffSize: 1,
applyDiff
});
testUtils.render();
/* jshint ignore:end */
testUtils.onElement('#test-mount .threads-list .btn', function(element) {
assert.ok(true, "component renders");
assert.equal($(element).find('.diff-message').text(),
"There is 1 new or updated thread. Click this message to show it.",
"message about new threads is displayed");
testUtils.simulateClick('.btn');
});
});
it("renders with state flags and options", function(done) {
/* jshint ignore:start */
let newProps = Object.assign({}, props, {
showOptions: true,
selection: [123],
busyThreads: [42]
});
newProps.threads[0] = Object.assign({}, newProps.threads[0], {
weight: 2,
has_unapproved_posts: false,
is_read: false,
is_unapproved: true,
is_hidden: true,
is_closed: true,
moderation: [true]
});
newProps.threads[1] = Object.assign({}, newProps.threads[1], {
weight: 1,
has_unapproved_posts: true,
moderation: [true]
});
testUtils.render();
/* jshint ignore:end */
testUtils.onElement('#test-mount .threads-list', function(element) {
assert.ok(true, "component renders");
assert.equal($(element).find('.thread-busy').length, 1,
"one thread is busy");
assert.equal($(element).find('.thread-selected').length, 1,
"one thread is selected");
assert.ok($(element).find('.thread-new').length,
"unread threads are shown");
assert.ok($(element).find('.thread-new-posts').length,
"unread threads have state flag");
assert.ok($(element).find('.thread-pinned-globally').length,
"globally pinned thread has state flag");
assert.ok($(element).find('.thread-pinned-locally').length,
"locally pinned thread has state flag");
assert.ok($(element).find('.thread-unapproved').length,
"unapproved thread has state flag");
assert.ok($(element).find('.thread-unapproved-posts').length,
"thread with unapproved posts has state flag");
assert.ok($(element).find('.thread-hidden').length,
"hidden thread has state flag");
assert.ok($(element).find('.thread-closed').length,
"closed thread has state flag");
assert.ok($(element).find('.thread-options').length,
"thread options are shown");
done();
});
});
});