mourningdove/views/dev/tests/commentmanage.js
2026-05-24 01:03:05 +00:00

554 lines
19 KiB
JavaScript

/* INCLUDE:
old: js/commentmanage.js
jquery: js/jquery/jquery.ui.widget.js
jquery: js/jquery.ajaxtip.js
jquery: js/jquery.commentmanage.js
jquery: js/jquery/jquery.ui.core.js
jquery: js/jquery/jquery.ui.dialog.js
jquery: js/jquery/jquery.ui.tooltip.js
jquery: js/jquery/jquery.ui.position.js
*/
var lifecycle = {
setup: function() {
var p = {
"freeze": {
"mode": "freeze",
"text": "Freeze",
"img": "http://localhost/img/silk/comments/freeze.png",
"url": "http://localhost/talkscreen?mode=freeze&journal=test&talkid=123",
"msg": "thread was frozen"
},
"unfreeze": {
"mode": "unfreeze",
"text": "Unfreeze",
"img": "http://localhost/img/silk/comments/unfreeze.png",
"url": "http://localhost/talkscreen?mode=unfreeze&journal=test&talkid=123",
"msg": "thread was unfrozen"
},
"screen": {
"mode": "screen",
"text": "Screen",
"img": "http://localhost/img/silk/comments/screen.png",
"url": "http://localhost/talkscreen?mode=screen&journal=test&talkid=123",
"msg": "comment was screened"
},
"unscreen": {
"mode": "unscreen",
"text": "Unscreen",
"img": "http://localhost/img/silk/comments/unscreen.png",
"url": "http://localhost/talkscreen?mode=unscreen&journal=test&talkid=123",
"msg": "comment was unscreened"
},
"delete": {
"mode": "delete",
"text": "Delete",
"img": "http://localhost/img/silk/comments/delete.png",
"url": "http://localhost/delcomment?journal=test&id=123",
"msg": "comment deleted"
}
};
this.linkprops = p;
this.del_args = {
cmtinfo: {
"form_auth": "authauthauth",
"remote": "test",
"journal": "test",
"canSpam": 1,
"canAdmin": 1,
"123": { "parent": "",
"u": "test",
"rc": [ "456" ],
"full": 1
},
"456": {
"parent": "123",
"u": "test",
"rc": [],
"full": 1
}
},
journal: "test",
form_auth: "authauthauth"
};
this.mod_args = {
journal: "test",
form_auth: "authauthauth"
};
this.server = sinon.sandbox.useFakeServer();
this.server.respondWith( /mode=freeze/, [
200,
{},
'{\
"mode": "freeze",\
"id": 123,\
"newalt": "'+p.unfreeze.text+'",\
"oldimage": "'+p.freeze.img+'",\
"newimage": "'+p.unfreeze.img+'",\
"newurl": "'+p.unfreeze.url+'",\
"msg": "'+p.unfreeze.msg+'"\
}'
] );
this.server.respondWith( /mode=unfreeze/, [
200,
{},
'{\
"mode": "unfreeze",\
"id": 123,\
"newalt": "'+p.freeze.text+'",\
"oldimage": "'+p.unfreeze.img+'",\
"newimage": "'+p.freeze.img+'",\
"newurl": "'+p.freeze.url+'",\
"msg": "'+p.freeze.msg+'"\
}'
] );
this.server.respondWith( /mode=screen/, [
200,
{},
'{\
"mode": "screen",\
"id": 123,\
"newalt": "'+p.unscreen.text+'",\
"oldimage": "'+p.screen.img+'",\
"newimage": "'+p.unscreen.img+'",\
"newurl": "'+p.unscreen.url+'",\
"msg": "'+p.unscreen.msg+'"\
}'
] );
this.server.respondWith( /mode=unscreen/, [
200,
{},
'{\
"mode": "unscreen",\
"id": 123,\
"newalt": "'+p.screen.text+'",\
"oldimage": "'+p.unscreen.img+'",\
"newimage": "'+p.screen.img+'",\
"newurl": "'+p.screen.url+'",\
"msg": "'+p.screen.msg+'"\
}'
] );
this.server.respondWith( /delforcefail/ [
200,
{},
'{ "error": "fail!" }'
] );
this.server.respondWith( /delcomment/, [
200,
{},
'{ "msg": "'+p["delete"].msg+'" }'
] );
this.server.respondWith( [
200,
{},
'{ "error": "error!" }'
] );
},
teardown: function() {
this.server.restore();
}
};
module( "jquery", lifecycle );
function _check_link(linkid, oldstate, newstate) {
var $link = $("#"+linkid);
equal($link.attr("href"), oldstate.url, linkid + " - original url" );
equal($link.text(), oldstate.text, linkid + " - original text" );
$link
.moderate(this.mod_args)
.one( "moderatecomplete", function( event, data ) {
equal($link.attr("href"), newstate.url, linkid + " - new url" );
equal($link.text(), newstate.text, linkid + " - new text" );
equals($link.ajaxtip("option", "content"), newstate.msg, linkid + " - did action");
})
.trigger("click");
this.server.respond();
$link
.one("moderatecomplete", function( event, data ) {
equal($link.attr("href"), oldstate.url, linkid + " - changed back to old url");
equal($link.text(), oldstate.text, linkid + " - changed back to old text");
equals($link.ajaxtip("option", "content"), oldstate.msg, linkid + " - did action");
})
.trigger("click");
this.server.respond();
}
function _check_link_with_image(linkid, oldstate, newstate) {
var $link = $("#"+linkid);
var $img = $link.find("img");
equal($link.attr("href"), oldstate.url, linkid + " - original url" );
equal($img.attr("alt"), oldstate.text, linkid + " - original alt" );
equal($img.attr("title"), oldstate.text, linkid + " - original title" );
$link
.moderate(this.mod_args)
.one( "moderatecomplete", function(event, data) {
equal($link.attr("href"), newstate.url, linkid + " - new url" );
equal($img.attr("alt"), newstate.text, linkid + " - new alt" );
equal($img.attr("title"), newstate.text, linkid + " - new title" );
equals($link.ajaxtip("option", "content"), newstate.msg, linkid + " - did action");
})
.trigger("click");
this.server.respond();
$link
.one("moderatecomplete", function(event, data) {
equal($link.attr("href"), oldstate.url, linkid + " - changed back to old url");
equal($img.attr("alt"), oldstate.text, linkid + " - changed back to old alt");
equal($img.attr("title"), oldstate.text, linkid + " - changed back to old title" );
equals($link.ajaxtip("option", "content"), oldstate.msg, linkid + " - did action");
})
.trigger("click");
this.server.respond();
}
test( "freeze / unfreeze", 38, function() {
_check_link.call(this, "freeze_link", this.linkprops.freeze, this.linkprops.unfreeze);
_check_link.call(this, "unfreeze_link", this.linkprops.unfreeze, this.linkprops.freeze);
_check_link_with_image.call(this, "freeze_img", this.linkprops.freeze, this.linkprops.unfreeze);
_check_link_with_image.call(this, "unfreeze_img", this.linkprops.unfreeze, this.linkprops.freeze);
} );
test( "screen / unscreen", 38, function() {
_check_link.call(this, "screen_link", this.linkprops.screen, this.linkprops.unscreen);
_check_link.call(this, "unscreen_link", this.linkprops.unscreen, this.linkprops.screen);
_check_link_with_image.call(this, "screen_img", this.linkprops.screen, this.linkprops.unscreen);
_check_link_with_image.call(this, "unscreen_img", this.linkprops.unscreen, this.linkprops.screen);
} );
test( "delete with shift", 4, function() {
var parent = $("#cmt123");
var child = $("#cmt456");
ok( parent.is(":visible"), "Parent comment started out visible" );
ok( child.is(":visible"), "Child comment started out visible" );
$("#delete_link")
.delcomment(this.del_args)
.one( "delcommentcomplete", function(event, data) {
// finish animation early
parent.stop(true, true);
// child.stop(true, true);
ok( ! parent.is(":visible"), "Parent comment successfully hidden after delete" );
ok( child.is(":visible"), "Child comment not deleted, still visible" );
})
.trigger({type: "click", shiftKey: true});
this.server.respond();
} );
test( "delete all children (has children)", 4, function() {
var parent = $("#cmt123");
var child = $("#cmt456");
ok( parent.is(":visible"), "Parent comment started out visible" );
ok( child.is(":visible"), "Child comment started out visible" );
$("#delete_link")
.delcomment(this.del_args)
.one( "delcommentcomplete", function(event, data) {
// finish animation early
parent.stop(true, true);
child.stop(true, true);
ok( ! parent.is(":visible"), "Parent comment successfully hidden after delete" );
ok( ! child.is(":visible"), "Child comment successfully hidden after delete" );
})
.trigger("click");
$(".popdel")
.find("input[value='thread']")
.attr("checked", "checked")
.end()
.find("button")
.click();
this.server.respond();
} );
test( "delete all children (has no children)", 4, function() {
var parent = $("#cmt123");
var child = $("#cmt456");
ok( parent.is(":visible"), "Parent comment started out visible" );
ok( child.is(":visible"), "Child comment started out visible" );
$("#child_delete_link")
.delcomment(this.del_args)
.one( "delcommentcomplete", function(event, data) {
// finish animation early
// parent.stop(true, true);
child.stop(true, true);
ok( parent.is(":visible"), "Parent comment not deleted" );
ok( ! child.is(":visible"), "Child comment successfully hidden after delete" );
})
.trigger("click");
$(".popdel")
.find("input[value='thread']")
.attr("checked", "checked")
.end()
.find("button")
.click();
this.server.respond();
} );
test( "delete no children (has children)", 4, function() {
var parent = $("#cmt123");
var child = $("#cmt456");
ok( parent.is(":visible"), "Parent comment started out visible" );
ok( child.is(":visible"), "Child comment started out visible" );
$("#delete_link")
.delcomment(this.del_args)
.one( "delcommentcomplete", function(event, data) {
// finish animation early
parent.stop(true, true);
// child.stop(true, true);
ok( ! parent.is(":visible"), "Parent comment successfully hidden after delete" );
ok( child.is(":visible"), "Child comment not deleted, still visible" );
})
.trigger("click");
$(".popdel")
.find("button")
.click();
this.server.respond();
} );
test( "delete no children (has no children)", 4, function() {
var parent = $("#cmt123");
var child = $("#cmt456");
ok( parent.is(":visible"), "Parent comment started out visible" );
ok( child.is(":visible"), "Child comment started out visible" );
$("#child_delete_link")
.delcomment(this.del_args)
.one( "delcommentcomplete", function(event, data) {
// finish animation early
// parent.stop(true, true);
child.stop(true, true);
ok( parent.is(":visible"), "Parent comment not deleted, still visible" );
ok( ! child.is(":visible"), "Child comment successfully hidden after delete" );
})
.trigger("click");
$(".popdel")
.find("button")
.click();
this.server.respond();
} );
test( "failed delete: no hiding", 4, function() {
var parent = $("#cmt123");
var child = $("#cmt456");
ok( parent.is(":visible"), "Parent comment started out visible" );
ok( child.is(":visible"), "Child comment started out visible" );
this.del_args["endpoint"] = "/delforcefail";
$("#delete_link")
.delcomment(this.del_args)
.one( "delcommentcomplete", function(event, data) {
// finish animation early
// parent.stop(true, true);
// child.stop(true, true);
ok( parent.is(":visible"), "Parent comment not deleted, still visible" );
ok( child.is(":visible"), "Child comment not deleted, still visible" );
})
.trigger("click");
$(".popdel")
.find("button")
.click();
this.server.respond();
} );
test( "invalid moderate link", 1, function() {
$("#invalid_moderate_link")
.moderate(this.mod_args)
.trigger("click")
this.server.respond()
equals($("#invalid_moderate_link").ajaxtip("option","content"),
"Error moderating comment #. Not enough context available.");
});
test( "invalid delete link", 1, function() {
$("#invalid_delete_link")
.delcomment(this.del_args)
.trigger({ type: "click", shiftKey: true })
this.server.respond();
equals($("#invalid_delete_link").ajaxtip("option","content"),
"Error deleting comment #. Comment is not visible on this page.");
} );
test( "no such comment for moderation", 1, function() {
$("#mismatched_moderate_link")
.moderate(this.mod_args)
.trigger("click")
this.server.respond();
equals($("#mismatched_moderate_link").ajaxtip("option","content"),
"Error moderating comment #999. Cannot moderate comment which is not visible on this page.")
} );
test( "mismatched journal for deletion", 1, function() {
$("#mismatched_journal_delete_link")
.delcomment(this.del_args)
.trigger({ type: "click", shiftKey: true })
this.server.respond();
equals($("#mismatched_journal_delete_link").ajaxtip("option","content"),
"Error deleting comment #123. Journal in link does not match expected journal.")
} );
test( "no such comment for moderation", 1, function() {
$("#mismatched_journal_moderate_link")
.moderate(this.mod_args)
.trigger("click")
this.server.respond();
equals($("#mismatched_journal_moderate_link").ajaxtip("option","content"),
"Error moderating comment #123. Journal in link does not match expected journal.")
} );
test( "no such comment for deletion", 1, function() {
$("#mismatched_delete_link")
.delcomment(this.del_args)
.trigger({ type: "click", shiftKey: true })
this.server.respond();
equals($("#mismatched_delete_link").ajaxtip("option","content"),
"Error deleting comment #999. Comment is not visible on this page.")
} );
test( "lacking arguments for moderate: form_auth", 1, function() {
delete this.mod_args["form_auth"]
$("#freeze_link")
.moderate(this.mod_args)
.trigger("click");
this.server.respond();
equals($("#freeze_link").ajaxtip("option","content"),
"Error moderating comment #123. Not enough context available.")
} );
test( "lacking arguments for moderate: journal", 1, function() {
delete this.mod_args["journal"]
$("#freeze_link")
.moderate(this.mod_args)
.trigger("click");
this.server.respond();
equals($("#freeze_link").ajaxtip("option","content"),
"Error moderating comment #123. Not enough context available.")
} );
test( "lacking arguments for delete: cmtinfo", 1, function() {
delete this.del_args["cmtinfo"]
$("#delete_link")
.delcomment(this.del_args)
.trigger({ type: "click", shiftKey: true })
this.server.respond();
equals($("#delete_link").ajaxtip("option","content"),
"Error deleting comment #123. Not enough context available.")
} );
test( "lacking arguments for delete: journal", 1, function() {
delete this.del_args["journal"];
$("#delete_link")
.delcomment(this.del_args)
.trigger({ type: "click", shiftKey: true })
this.server.respond();
equals($("#delete_link").ajaxtip("option","content"),
"Error deleting comment #123. Not enough context available.")
} );
test( "lacking arguments for delete: form_auth", 1, function() {
delete this.del_args["form_auth"]
$("#delete_link")
.delcomment(this.del_args)
.trigger({ type: "click", shiftKey: true })
this.server.respond();
equals($("#delete_link").ajaxtip("option","content"),
"Error deleting comment #123. Not enough context available.")
} );
module( "jquery util" );
test( "extract params", 18, function() {
var params;
params = $.extractParams("http://blah.com/");
deepEqual( params, {}, "no params" );
params = $.extractParams("http://blah.com/?");
deepEqual( params, {}, "has ?, but no params" );
params = $.extractParams("http://blah.com/?noequals&novalue=&key=value&key2=value 2");
equal( params["key"], "value", "extract url params: key" );
equal( params["noequals"], undefined, "extract url params: noequals" );
equal( params["novalue"], "", "extract url params: novalue" );
equal( params["key2"], "value 2", "extract url params: key2" );
params = $.extractParams("http://blah.com/?noequals&novalue=&key=value&key2=value%202");
equal( params["key"], "value", "extract url params URI-escaped: key" );
equal( params["noequals"], undefined, "extract url params URI-escaped: noequals" );
equal( params["novalue"], "", "extract url params URI-escaped: novalue" );
equal( params["key2"], "value 2", "extract url params: key2" );
params = $.extractParams($("#url_with_params_noescape").attr("href"));
equal( params["key"], "value", "url from dom: key" );
equal( params["noequals"], undefined, "url from dom: noequals" );
equal( params["novalue"], "", "url from dom: novalue" );
equal( params["key2"], "value 2", "url from dom: key2" );
params = $.extractParams($("#url_with_params_escaped").attr("href"));
equal( params["key"], "value", "url from dom, escaped: key" );
equal( params["noequals"], undefined, "url from dom, escaped: noequals" );
equal( params["novalue"], "", "url from dom, escaped: novalue" );
equal( params["key2"], "value 2", "url from dom, escaped: key2" );
});