如何解决如何单元测试文档是否具有给定的权限?
我正在使用marklogic-unit-test设置单元测试,我想做的一件事是检查给定文档是否具有特定权限。但是,当我根据权限序列测试我的权限时,出现XDMP-NONMIXEDCOMPLEXCONT
错误。我认为这与以下事实有关:权限是复杂的对象,而不是简单的字符串,因为它适用于集合。
const test = require("/test/test-helper.xqy");
let p1 = Sequence.from([xdmp.permission("rest-reader","read","element")]);
let p2 = Sequence.from([
xdmp.permission("rest-reader","element"),xdmp.permission("rest-writer","update","element")
]);
test.assertAtLeastOneEqual(p1,p2)
哪个返回:
[javascript] XDMP-NONMIXEDCOMPLEXCONT: fn:data(<sec:permission
xmlns:sec="http://marklogic.com/xdmp/security">
<sec:capability>...</sec:capability>...</sec:permission>)
-- Node has complex type with non-mixed complex content
我能想到的最好的选择是显式循环遍历Sequence,并在每个元素上与fn.deepEqual
进行比较。有更好的方法吗?
解决方法
test.assertAtLeastOneEqual()
函数需要原子值(item()
签名)。可以处理元素的唯一测试帮助器功能是test.assertEqualXml()
,但它查找完全匹配的内容。我认为您最好的选择是对权限进行分类。像这样:
const test = require("/test/test-helper.xqy");
let p1 = [xdmp.permission("rest-reader","read")];
let p2 = [
xdmp.permission("rest-reader","read"),xdmp.permission("rest-writer","update")
];
p1 = Sequence.from(p1.map(p => xdmp.roleName(p.roleId) + ':' + p.capability));
p2 = Sequence.from(p2.map(p => xdmp.roleName(p.roleId) + ':' + p.capability));
test.assertAtLeastOneEqual(p1,p2)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。