'use strict'; const common = require('../common'); const fc = require('fast-check'); describe('DiscussionViewer', function () { describe('handleNotification, prepareNewDiscussion, addComment, finishDiscussion, getReplyMessage, getReplyNickname, getReplyCommentId & highlightComment', function () { this.timeout(30000); it('displays & hides comments as requested', () => { fc.assert(fc.property( fc.array( fc.record({ idArray: fc.array(common.fcAlnumString(), {minLength: 1}), parentidArray: fc.array(common.fcAlnumString(), {minLength: 1}), data: fc.string(), meta: fc.record({ nickname: fc.string(), postdate: fc.nat(), vizhash: fc.string() }) }) ), fc.nat(), fc.boolean(), fc.string(), fc.string(), fc.constantFrom('loading', 'danger', 'other'), fc.string({minLength: 1}), function (comments, commentKey, fadeOut, nickname, message, alertType, alert) { var clean = globalThis.cleanup(), results = []; PrivateBin.Model.reset(); PrivateBin.Helper.reset(); document.body.innerHTML = ( '' + '' + `

Discussion

name 0000-00-00
c

` ); PrivateBin.Model.init(); PrivateBin.Alert.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(''); comment.getCreated = function() { return comment.meta.postdate; }; comment.getIcon = function() { return comment.meta.vizhash; }; PrivateBin.DiscussionViewer.addComment(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') !== null && !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); } )); }); }); });