微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何单元测试文档是否具有给定的权限?

如何解决如何单元测试文档是否具有给定的权限?

我正在使用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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?