| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- 'use strict';
- var common = require('../common');
- describe('DiscussionViewer', function () {
- describe('handleNotification, prepareNewDiscussion, addComment, finishDiscussion, getReplyMessage, getReplyNickname, getReplyCommentId & highlightComment', function () {
- this.timeout(30000);
- jsc.property(
- 'displays & hides comments as requested',
- jsc.array(
- jsc.record({
- idArray: jsc.nearray(common.jscAlnumString()),
- parentidArray: jsc.nearray(common.jscAlnumString()),
- data: jsc.string,
- meta: jsc.record({
- nickname: jsc.string,
- postdate: jsc.nat,
- vizhash: jsc.string
- })
- })
- ),
- 'nat',
- 'bool',
- 'string',
- 'string',
- jsc.elements(['loading', 'danger', 'other']),
- 'nestring',
- function (comments, commentKey, fadeOut, nickname, message, alertType, alert) {
- var clean = globalThis.cleanup(),
- results = [];
- document.body.innerHTML = (
- `<div id="discussion">
- <h4>Discussion</h4>
- <div id="commentcontainer"></div>
- </div>
- <div id="templates">
- <article id="commenttemplate" class="comment">
- <div class="commentmeta">
- <span class="nickname">name</span>
- <span class="commentdate">0000-00-00</span>
- </div>
- <div class="commentdata">c</div>
- <button class="btn btn-default btn-sm">Reply</button>
- </article>
- <p id="commenttailtemplate" class="comment">
- <button class="btn btn-default btn-sm">Add comment</button>
- </p>
- <div id="replytemplate" class="reply hidden">
- <input type="text" id="nickname" class="form-control" title="Optional nickname…"
- placeholder="Optional nickname…" />
- <textarea id="replymessage" class="replymessage form-control" cols="80" rows="7"></textarea>
- <br />
- <div id="replystatus" role="alert" class="statusmessage hidden alert">
- <span class="glyphicon" aria-hidden="true"></span>
- </div>
- <button id="replybutton" class="btn btn-default btn-sm">Post comment</button>
- </div>
- </div>
- `
- );
- PrivateBin.Model.init();
- PrivateBin.DiscussionViewer.init();
- results.push(
- !document.getElementById('discussion').classList.contains('hidden')
- );
- PrivateBin.DiscussionViewer.prepareNewDiscussion();
- results.push(
- document.getElementById('discussion').classList.contains('hidden')
- );
- comments.forEach(function (comment) {
- comment.id = comment.idArray.join('');
- comment.parentid = comment.parentidArray.join('');
- PrivateBin.DiscussionViewer.addComment(PrivateBin.Helper.CommentFactory(comment), comment.data, comment.meta.nickname);
- });
- results.push(
- document.getElementById('discussion').classList.contains('hidden')
- );
- PrivateBin.DiscussionViewer.finishDiscussion();
- results.push(
- !document.getElementById('discussion').classList.contains('hidden') &&
- comments.length + 1 >= document.getElementById('commentcontainer').children.length
- );
- if (comments.length > 0) {
- if (commentKey >= comments.length) {
- commentKey = commentKey % comments.length;
- }
- PrivateBin.DiscussionViewer.highlightComment(comments[commentKey].id, fadeOut);
- results.push(
- document.getElementById('comment_' + comments[commentKey].id).classList.contains('highlight')
- );
- }
- // clicking "Add comment" button should open the reply form
- document.getElementById('commentcontainer').querySelector('button').click();
- results.push(
- !document.getElementById('reply').classList.contains('hidden')
- );
- document.querySelector('#reply #nickname').value = nickname;
- document.querySelector('#reply #replymessage').value = message;
- PrivateBin.DiscussionViewer.getReplyCommentId();
- results.push(
- PrivateBin.DiscussionViewer.getReplyNickname() === document.querySelector('#reply #nickname').value &&
- PrivateBin.DiscussionViewer.getReplyMessage() === document.querySelector('#reply #replymessage').value
- );
- var notificationResult = PrivateBin.DiscussionViewer.handleNotification(alertType === 'other' ? alert : alertType);
- if (alertType === 'loading') {
- results.push(notificationResult === false);
- } else {
- results.push(
- alertType === 'danger' ? (
- notificationResult.classList.contains('alert-danger') &&
- !notificationResult.classList.contains('alert-info')
- ) : (
- !notificationResult.classList.contains('alert-danger') &&
- notificationResult.classList.contains('alert-info')
- )
- );
- }
- clean();
- return results.every(element => element);
- }
- );
- });
- });
|