dp2 icon indicating copy to clipboard operation
dp2 copied to clipboard

SetReaderInfo() API 测试

Open DigitalPlatform opened this issue 4 years ago • 4 comments

近期 dp2library 对 SetReaderInfo() API 代码进行了重构,需要充分测试。以下是关于测试项目的设想:

DigitalPlatform avatar Aug 05 '21 16:08 DigitalPlatform

修改动作

  1. 修改动作,在请求提交的读者 XML 记录中缺乏 barcode 元素

会被当作删除 barcode 元素。保存成功后,观察读者 XML 记录,原有 barcode 记录被删除了

  1. 修改动作,在请求提交的读者 XML 记录中缺乏 barcode 元素。例如只包含 name 元素。并在 XML 记录根元素的 dataFields 属性中指明提交的元素 "name",这样 dp2library 就知道不会破坏原有记录的 barcode 元素。

保存成功后,观察读者 XML 记录,原有 barcode 记录依然完好无损

  1. 修改动作。提交的 barcode 元素发生了变化,并且 barcode 元素内容不符合条码规则,保存时应当明确报错说条码号不符合规则。注意 library.xml 中 circulation 元素是可以控制是否校验条码号的,测试前应妥善设置好

注意测试一种变体:barcode 元素在请求提交的 XML 记录中不存在,但根元素 dataFields 属性指明了并不包含 barcode 元素。这样 dp2library 即便要校验条码号也应该是拿着旧记录的条码号去校验,可以考虑用 dp2rms 前端先把旧记录的 barcode 元素改成不合法/合法的状态,然后观察程序的反应是否合理

  1. 修改动作。提交的 readerType 元素发生了变化,并且 readerType 元素内容不符合已经定义的值范围,保存时应当明确报错说读者类型不符合规则。注意 library.xml 中 circulation 元素是可以控制是否校验读者类型的,测试前应妥善设置好

注意测试一种变体:readerType 元素在请求提交的 XML 记录中不存在,但根元素 dataFields 属性指明了并不包含 readerType 元素。这样 dp2library 即便要校验读者类型也应该是拿着旧记录的读者类型去校验,可以考虑用 dp2rms 前端先把旧记录的 readerType 元素改成不合法/合法的状态,然后观察程序的反应是否合理

  1. 读者身份只能修改 preferrence 和 displayName 两个元素,其它的元素无法修改

  2. 当读者记录有借还信息的时候,无法修改 barcode 元素

  3. 当读者记录有借还信息的时候,无法修改 state 元素为 “注销”

  4. library.xml 中 circulation 元素可以设置保存读者记录的时候是否接受空证条码号。测试验证功能是否兑现(即根据接受和不接受两种情况,各制造 barcode 是否为空两种场景进行测试)

  5. 修改动作。会强制对证条码号进行查重。因为查重开销较大,目前是仅当真正提交修改的 barcode 元素和旧记录不同的时候,才会对新提交的 barcode 进行查重。制造重复 barcode 的其它记录进行测试验证。

注意测试一种变体:barcode 元素在请求提交的 XML 记录中不存在,但根元素 dataFields 属性指明了并不包含 barcode 元素。这样 dp2library 即便要针对条码号查重也应该是拿着旧记录的条码号去查重,可以考虑用 dp2rms 前端先把旧记录的 barcode 元素改成和其它读者记录重复/不重复的状态,然后观察程序的反应是否合理。(注:前面说过新旧记录如果对 barcode 元素没有发生修改,是不会真正去查重,意思就是说即便旧记录中的 barcode 和其它记录发生了重复,也不会被觉察到。这主要是考虑到执行速度和效率)

  1. 修改动作。会校验读者记录。

  2. 修改动作。对显示名 (displayName) 会进行查重。和 barcode 查重类似。

也检查显示名和证条码号之间的重复。也检查工作人员账户名和显示名之间的重复。

  1. 当 rights 元素内容发生变化时,要检查和兑现 password/@expire

  2. 强制修改读者记录时,允许读者记录有借书信息的情况下修改 barcode,软件会自动把牵涉到的册记录中的 borrower 元素也做对应修改。

DigitalPlatform avatar Aug 05 '21 16:08 DigitalPlatform

新创建动作

  1. library.xml 中 circulation/@acceptBlankReaderBarcode 可以设置保存读者记录的时候是否接受空证条码号。测试验证功能是否兑现(即根据接受和不接受两种情况,各制造 barcode 是否为空两种场景进行测试)

  2. 创建读者记录时,会强制对证条码号进行查重。制造重复 barcode 的其它记录进行测试验证。

  3. 路径为空的时候,会自动选择第一个读者库追加创建记录。

  4. 创建读者记录时,对显示名 (displayName) 会进行查重。和 barcode 查重类似。

也检查显示名和证条码号之间的重复。也检查工作人员账户名和显示名之间的重复。

  1. 创建读者记录时,请求所提交的读者 XML 记录中如果包含流通信息元素,比如 borrows 等,软件会过滤掉这些元素然后才真正写入新记录。

  2. 当前用户只能在自己管辖的分馆内的读者库中创建新记录

  3. 创建读者记录时,会校验读者记录。

校验事项包括,检查读者记录中 rights 元素的权限是否大于当前用户的权限,如果大于会报错。还有其它一些检查事项后面待补充介绍。

  1. 创建读者记录时,会检查 readerType 元素内容,如果不符合已经定义的值范围,会明确报错说读者类型不符合规则。注意 library.xml 中 circulation 元素是可以控制是否校验读者类型的,测试前应妥善设置好

DigitalPlatform avatar Aug 05 '21 16:08 DigitalPlatform

删除动作

  1. 测试账户具备 setreaderinfo 权限时的删除功能。应当可以删除任意读者记录。这里又细分以下情形: 1.1) 工作人员账户,注意如果是分馆身份,则只能删除自己管辖的分馆的读者库的记录。如果是总馆身份,可以删除总馆和任意分馆的读者库的记录。 1.2) 读者身份,无法删除任何读者记录。即便是读者自己的读者记录也不能删除。 1.3) 凡是有流通信息的读者记录都无法删除。

  2. 测试账户只有 setreaderinfo:xxx 权限时的删除功能。又细分以下情形: 2.1) 如果 xxx 中不包含 r_delete,则无法删除读者记录。 2.2) 如果 xxx 中包含了 r_delete,则具备删除读者记录的可能。还要看拟删除的读者记录中实际存在的元素,是否正好在当前用户可修改的元素范围内,在范围内才允许删除。(注: borrows libraryCode 等系统负责维护的元素,不在上述检查范围之内)

  3. 用证条码号来删除的时候,如果读者记录不存在,会返回错误码 ErrorCode.ReaderBarcodeNotFound。而如果用记录路径来删除,如果读者记录不存在,会返回错误码 ErrorCode.NotFound

DigitalPlatform avatar Aug 08 '21 14:08 DigitalPlatform

2021/8/3 13:42:11 dp2installer 测试版和 dp2libraryxe 测试版更新了。SetReaderInfo() API 除了原先的具有 setreaderinfo 权限的用户具有删除读者记录的权限外,新增允许具有 setreaderinfo:xxx|r_delete 权限的用户删除读者记录,不过还有一个限定条件是拟删除的读者记录中包含的数据元素不超过此用户的可修改字段范围

例如,当用户具备 setreaderinfo:1|r_delete 权限的时候,如果打算删除的读者记录中只包含 1 级的元素,那么就可以被删除。注意 r_delete 表示允许 setreaderinfo: 这种形态的权限具备删除读者记录的能力。如果没有 r_delete,比如 setreaderinfo:1 这样的权限,是没法删除任何读者记录的

测试的时候,注意检查原先的用法有没有问题。另外检查一下读者身份是不允许删除读者记录的,这里不要出现漏洞

renyh avatar Feb 02 '23 07:02 renyh