Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
erp5
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Sebastien Robin
erp5
Commits
2f5f336f
Commit
2f5f336f
authored
Feb 06, 2020
by
Gabriel Monnerat
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
erp5_document_scanner_ui_test: Improve test and introduce test to check memory exhaust on mobile
parent
f22a6227
Changes
8
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
873 additions
and
42 deletions
+873
-42
bt5/erp5_document_scanner_ui_test/PathTemplateItem/portal_tests/renderjs_erp5_document_scanner_zuite/testScanDocument.zpt
...renderjs_erp5_document_scanner_zuite/testScanDocument.zpt
+119
-41
bt5/erp5_document_scanner_ui_test/PathTemplateItem/portal_tests/renderjs_erp5_document_scanner_zuite/testScanDocumentOnMobile.xml
..._erp5_document_scanner_zuite/testScanDocumentOnMobile.xml
+58
-0
bt5/erp5_document_scanner_ui_test/PathTemplateItem/portal_tests/renderjs_erp5_document_scanner_zuite/testScanDocumentOnMobile.zpt
..._erp5_document_scanner_zuite/testScanDocumentOnMobile.zpt
+346
-0
bt5/erp5_document_scanner_ui_test/PathTemplateItem/portal_tests/renderjs_erp5_document_scanner_zuite/testScanDocumentPreference.xml
...rp5_document_scanner_zuite/testScanDocumentPreference.xml
+58
-0
bt5/erp5_document_scanner_ui_test/PathTemplateItem/portal_tests/renderjs_erp5_document_scanner_zuite/testScanDocumentPreference.zpt
...rp5_document_scanner_zuite/testScanDocumentPreference.zpt
+85
-0
bt5/erp5_document_scanner_ui_test/TestTemplateItem/portal_components/test.erp5.testDocumentScanner.py
...teItem/portal_components/test.erp5.testDocumentScanner.py
+78
-0
bt5/erp5_document_scanner_ui_test/TestTemplateItem/portal_components/test.erp5.testDocumentScanner.xml
...eItem/portal_components/test.erp5.testDocumentScanner.xml
+127
-0
bt5/erp5_document_scanner_ui_test/bt/template_test_id_list
bt5/erp5_document_scanner_ui_test/bt/template_test_id_list
+2
-1
No files found.
bt5/erp5_document_scanner_ui_test/PathTemplateItem/portal_tests/renderjs_erp5_document_scanner_zuite/testScanDocument.zpt
View file @
2f5f336f
...
...
@@ -68,11 +68,7 @@
<td>
field_your_title
</td>
<td>
Test Scan Document
<span
tal:replace=
"python: DateTime().ISO()"
></span></td>
</tr>
<!--tr>
<td>type</td>
<td>field_your_reference</td>
<td>TESTSCANDOCUMENT<span tal:replace="python: DateTime().ISO()"></span></td>
</tr-->
<tr>
<td>
type
</td>
<td>
field_your_language
</td>
...
...
@@ -95,7 +91,7 @@
</tr>
<div
tal:repeat=
"item python:range(2)"
>
<!-- Click on Capture -->
<tr>
<td>
waitForElementPresent
</td>
<td>
//button[@class="take-picture-btn ui-btn-icon-left ui-icon-circle"]
</td>
...
...
@@ -106,11 +102,17 @@
<td>
//button[@class="take-picture-btn ui-btn-icon-left ui-icon-circle"]
</td>
<td></td>
</tr>
<tr>
<td>
waitForElementPresent
</td>
<td>
//div[@class="cropper-wrap-box"]
</td>
<td></td>
</tr>
<tr>
<td>
waitForElementPresent
</td>
<td>
//button[@class="reset-btn ui-btn-icon-left ui-icon-times"]
</td>
<td></td>
</tr>
<!-- Click on Delete -->
<tr>
<td>
click
</td>
<td>
//button[@class="reset-btn ui-btn-icon-left ui-icon-times"]
</td>
...
...
@@ -121,6 +123,7 @@
<td>
//button[@class="take-picture-btn ui-btn-icon-left ui-icon-circle"]
</td>
<td></td>
</tr>
<!-- Click on Capture again -->
<tr>
<td>
click
</td>
<td>
//button[@class="take-picture-btn ui-btn-icon-left ui-icon-circle"]
</td>
...
...
@@ -131,42 +134,128 @@
<td>
//button[@class="confirm-btn ui-btn-icon-left ui-icon-check"]
</td>
<td></td>
</tr>
<!-- Click on Confirm -->
<tr>
<td>
click
</td>
<td>
//button[@class="confirm-btn ui-btn-icon-left ui-icon-check"]
</td>
<td></td>
</tr>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_content_loaded"
/>
<tal:block
tal:define=
"notification_configuration python: {'class': 'success',
'text': 'Captured'}"
>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_notification"
/>
</tal:block>
<tr>
<td>
waitForElementPresent
</td>
<td>
//button[@class="take-picture-btn ui-btn-icon-left ui-icon-circle"]
</td>
<td></td>
</tr>
<!-- wait upload starts -->
<tr>
<td>
waitForElementPresent
</td>
<td>
//button[@class="btn-thumbnail ui-btn-icon-top ui-icon-spinner"]
</td>
<td></td>
</tr>
</div>
<!-- wait upload finish -->
<tr>
<td>
storeValue
</td>
<td>
//
input[@id="field_your_active_process_url
"]
</td>
<td>
active_process_url
</td>
<td>
waitForElementNotPresent
</td>
<td>
//
button[@class="btn-thumbnail ui-btn-icon-top ui-icon-spinner
"]
</td>
<td></td>
</tr>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplateForRenderjsUi/macros/submit_dialog"
/>
<tal:block
tal:define=
"notification_configuration python: {'class': 'success',
'text': 'The document is being created in background.'}"
>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_notification"
/>
</tal:block>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_content_loaded"
/>
<tr>
<td>
open
</td>
<td>
${base_url}/erp5/Base_assertActiveProcessHasOneImage?active_process_url=${active_process_url}
</td>
<td>
assertElementPresent
</td>
<td>
//button[@class="new-btn ui-btn-icon-left ui-icon-plus" and @disabled]
</td>
<td></td>
</tr>
<!-- check if first image exists -->
<tr>
<td>
assertTextPresent
</td>
<td>
OK
</td>
<td>
assertElementPresent
</td>
<td>
//img[@data-page="0" and @class="show-img"]
</td>
<td></td>
</tr>
<!-- check if second image exists -->
<tr>
<td>
assertElementPresent
</td>
<td>
//img[@data-page="1" and @class="show-img"]
</td>
<td></td>
</tr>
<!-- check if third image does not exists -->
<tr>
<td>
assertElementNotPresent
</td>
<td>
//img[@data-page="2" and @class="show-img"]
</td>
<td></td>
</tr>
<!-- open first image -->
<tr>
<td>
click
</td>
<td>
//img[@data-page="0" and @class="show-img"]
</td>
<td></td>
</tr>
<!-- check if delete button appears -->
<tr>
<td>
waitForElementPresent
</td>
<td>
//button[@class="delete-btn ui-btn-icon-left ui-icon-times"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementNotPresent
</td>
<td>
//button[@class="new-btn ui-btn-icon-left ui-icon-plus" and @disabled]
</td>
<td></td>
</tr>
<tr>
<td>
click
</td>
<td>
//button[@class="new-btn ui-btn-icon-left ui-icon-plus"]
</td>
<td></td>
</tr>
<tr>
<td>
waitForElementPresent
</td>
<td>
//button[@class="take-picture-btn ui-btn-icon-left ui-icon-circle"]
</td>
<td></td>
</tr>
<tr>
<td>
click
</td>
<td>
//button[@class="take-picture-btn ui-btn-icon-left ui-icon-circle"]
</td>
<td></td>
</tr>
<tr>
<td>
waitForElementPresent
</td>
<td>
//div[@class="cropper-wrap-box"]
</td>
<td></td>
</tr>
<tr>
<td>
waitForElementPresent
</td>
<td>
//button[@class="confirm-btn ui-btn-icon-left ui-icon-check"]
</td>
<td></td>
</tr>
<!-- Click on Confirm -->
<tr>
<td>
click
</td>
<td>
//button[@class="confirm-btn ui-btn-icon-left ui-icon-check"]
</td>
<td></td>
</tr>
<tr>
<td>
waitForElementPresent
</td>
<td>
//button[@class="take-picture-btn ui-btn-icon-left ui-icon-circle"]
</td>
<td></td>
</tr>
<tr>
<td>
waitForElementPresent
</td>
<td>
//button[@class="btn-thumbnail ui-btn-icon-top ui-icon-spinner"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//img[@data-page="2" and @class="show-img"]
</td>
<td></td>
</tr>
<tr>
<td>
waitForElementNotPresent
</td>
<td>
//button[@class="btn-thumbnail ui-btn-icon-top ui-icon-spinner"]
</td>
<td></td>
</tr>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplateForRenderjsUi/macros/submit_dialog"
/>
<tal:block
tal:define=
"notification_configuration python: {'class': 'success',
'text': 'The document is being created in background.'}"
>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_notification"
/>
</tal:block>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_content_loaded"
/>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplate/macros/wait_for_activities"
/>
...
...
@@ -215,12 +304,12 @@
</tr>
<tr>
<td>
waitForTextPresent
</td>
<td>
of
2
</td>
<td>
of
3
</td>
<td></td>
</tr>
<tr>
<td>
assertTextPresent
</td>
<td>
of
2
</td>
<td>
of
3
</td>
<td></td>
</tr>
<tr>
...
...
@@ -229,17 +318,6 @@
<td></td>
</tr>
<!--tr>
<td>open</td>
<td>${base_url}/erp5/Base_removeActiveProcessFromFileSystem?active_process_url=${active_process_url}</td>
<td></td>
</tr>
<tr>
<td>assertTextPresent</td>
<td>Done</td>
<td></td>
</tr-->
</tbody></table>
</body>
</html>
\ No newline at end of file
bt5/erp5_document_scanner_ui_test/PathTemplateItem/portal_tests/renderjs_erp5_document_scanner_zuite/testScanDocumentOnMobile.xml
0 → 100644
View file @
2f5f336f
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"ZopePageTemplate"
module=
"Products.PageTemplates.ZopePageTemplate"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
_bind_names
</string>
</key>
<value>
<object>
<klass>
<global
name=
"NameAssignments"
module=
"Shared.DC.Scripts.Bindings"
/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key>
<string>
_asgns
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
name_subpath
</string>
</key>
<value>
<string>
traverse_subpath
</string>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key>
<string>
content_type
</string>
</key>
<value>
<string>
text/html
</string>
</value>
</item>
<item>
<key>
<string>
expand
</string>
</key>
<value>
<int>
0
</int>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
testScanDocumentOnMobile
</string>
</value>
</item>
<item>
<key>
<string>
output_encoding
</string>
</key>
<value>
<string>
utf-8
</string>
</value>
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<unicode>
Test memory exhausted issue on mobile (expected failure)
</unicode>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
bt5/erp5_document_scanner_ui_test/PathTemplateItem/portal_tests/renderjs_erp5_document_scanner_zuite/testScanDocumentOnMobile.zpt
0 → 100644
View file @
2f5f336f
This diff is collapsed.
Click to expand it.
bt5/erp5_document_scanner_ui_test/PathTemplateItem/portal_tests/renderjs_erp5_document_scanner_zuite/testScanDocumentPreference.xml
0 → 100644
View file @
2f5f336f
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"ZopePageTemplate"
module=
"Products.PageTemplates.ZopePageTemplate"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
_bind_names
</string>
</key>
<value>
<object>
<klass>
<global
name=
"NameAssignments"
module=
"Shared.DC.Scripts.Bindings"
/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key>
<string>
_asgns
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
name_subpath
</string>
</key>
<value>
<string>
traverse_subpath
</string>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key>
<string>
content_type
</string>
</key>
<value>
<string>
text/html
</string>
</value>
</item>
<item>
<key>
<string>
expand
</string>
</key>
<value>
<int>
0
</int>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
testScanDocumentPreference
</string>
</value>
</item>
<item>
<key>
<string>
output_encoding
</string>
</key>
<value>
<string>
utf-8
</string>
</value>
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<unicode>
Test Scan Document Preference
</unicode>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
bt5/erp5_document_scanner_ui_test/PathTemplateItem/portal_tests/renderjs_erp5_document_scanner_zuite/testScanDocumentPreference.zpt
0 → 100644
View file @
2f5f336f
<html
xmlns:tal=
"http://xml.zope.org/namespaces/tal"
xmlns:metal=
"http://xml.zope.org/namespaces/metal"
>
<head>
<meta
http-equiv=
"Content-Type"
content=
"text/html; charset=UTF-8"
>
<title>
Test Scan Document (expected failure)
</title>
</head>
<body>
<table
cellpadding=
"1"
cellspacing=
"1"
border=
"1"
>
<thead>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplate/macros/init"
/>
<tr><td
rowspan=
"1"
colspan=
"3"
>
Test Scan Document (expected failure)
</td></tr>
</thead><tbody>
<tr>
<td>
open
</td>
<td>
${base_url}/Zuite_waitForActivities
</td>
<td></td>
</tr>
<tr>
<td>
assertTextPresent
</td>
<td>
Done.
</td>
<td></td>
</tr>
<tr>
<td>
open
</td>
<td>
${base_url}/web_site_module/renderjs_runner/
</td>
<td></td>
</tr>
<tr>
<td>
waitForTextPresent
</td>
<td>
Preferences
</td>
<td></td>
</tr>
<tr>
<td>
click
</td>
<td>
//a[text()="Preferences"]
</td>
<td></td>
</tr>
<tr>
<td>
waitForElementPresent
</td>
<td>
//dd/a[text()="Document Scanner"]
</td>
<td></td>
</tr>
<tr>
<td>
click
</td>
<td>
//dd/a[text()="Document Scanner"]
</td>
<td></td>
</tr>
<tr>
<td>
waitForTextPresent
</td>
<td>
Document Scanner
</td>
<td></td>
</tr>
<tr>
<td>
waitForElementPresent
</td>
<td>
//input[@id="field_my_preferred_image_scanner_conversion_brightness"]
</td>
<td></td>
</tr>
<tr>
<td>
click
</td>
<td>
//input[@id="field_my_preferred_image_scanner_conversion_enable_greyscale"]
</td>
<td></td>
</tr>
<tr>
<td>
type
</td>
<td>
//input[@id="field_my_preferred_image_scanner_conversion_brightness"]
</td>
<td>
20
</td>
</tr>
<tr>
<td>
type
</td>
<td>
//input[@id="field_my_preferred_image_scanner_conversion_contrast"]
</td>
<td>
20
</td>
</tr>
<tr>
<td>
click
</td>
<td>
//button[@name="submit"]
</td>
<td></td>
</tr>
<tr>
<td>
waitForElementPresent
</td>
<td>
//div[@class="visible"]/button[text()="Data updated."]
</td>
<td></td>
</tr>
</tbody></table>
</body>
</html>
\ No newline at end of file
bt5/erp5_document_scanner_ui_test/TestTemplateItem/portal_components/test.erp5.testDocumentScanner.py
0 → 100644
View file @
2f5f336f
##############################################################################
#
# Copyright (c) 2002-2020 Nexedi SA and Contributors. All Rights Reserved.
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsibility of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# guarantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
##############################################################################
import
json
from
DateTime
import
DateTime
from
Products.ERP5Type.tests.ERP5TypeTestCase
import
ERP5TypeTestCase
class
DocumentScanner
(
ERP5TypeTestCase
):
"""
Document Scanner Test Case
"""
def
getTitle
(
self
):
return
"Test Document Scanner"
def
afterSetUp
(
self
):
"""
This is ran before anything, used to set the environment
"""
id_list
=
[
o
.
getId
()
for
o
in
self
.
portal
.
portal_catalog
(
reference
=
"document_scanner_js"
,
portal_type
=
"Active Process"
)]
if
id_list
:
self
.
portal
.
portal_activities
.
manage_delObjects
(
ids
=
id_list
)
self
.
tic
()
def
test_remove_outdated_active_process
(
self
):
data_dict
=
json
.
loads
(
self
.
portal
.
Base_getDefaultBackendDataAsJSON
())
self
.
assertEqual
(
data_dict
[
"image_list"
],
[])
active_process_url
=
data_dict
[
"active_process"
]
active_process
=
self
.
portal
.
restrictedTraverse
(
str
(
active_process_url
))
self
.
assertEqual
(
active_process
.
getResultList
(),
[])
data_png
=
(
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA"
"AEAAAABCAQAAAC1HAwCAAAAC0lEQVQYV2NgYAAAAAMAAWgm"
"WQ0AAAAASUVORK5CYII="
)
response
=
self
.
portal
.
Base_storeNewImageCropped
(
data_png
,
active_process
.
getRelativeUrl
())
first_uuid
=
json
.
loads
(
response
)[
"uuid"
]
self
.
assertIn
(
first_uuid
,
[
r
.
reference
for
r
in
active_process
.
getResultList
()])
response
=
self
.
portal
.
Base_storeNewImageCropped
(
data_png
,
active_process
.
getRelativeUrl
())
second_uuid
=
json
.
loads
(
response
)[
"uuid"
]
self
.
assertIn
(
second_uuid
,
[
r
.
reference
for
r
in
active_process
.
getResultList
()])
self
.
assertIn
(
first_uuid
,
[
r
.
reference
for
r
in
active_process
.
getResultList
()])
self
.
tic
()
req
=
self
.
portal
.
erp5_sql_connection
.
manage_test
req
(
"update catalog set modification_date='{date}' where uid={uid}"
.
format
(
date
=
(
DateTime
()
-
6
).
toZone
(
'UTC'
),
uid
=
active_process
.
getUid
()))
self
.
portal
.
portal_alarms
.
remove_outdated_active_process
.
activeSense
()
self
.
tic
()
self
.
assertNotIn
(
active_process
.
getId
(),
list
(
self
.
portal
.
portal_activities
.
objectIds
()))
\ No newline at end of file
bt5/erp5_document_scanner_ui_test/TestTemplateItem/portal_components/test.erp5.testDocumentScanner.xml
0 → 100644
View file @
2f5f336f
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"Test Component"
module=
"erp5.portal_type"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
_recorded_property_dict
</string>
</key>
<value>
<persistent>
<string
encoding=
"base64"
>
AAAAAAAAAAI=
</string>
</persistent>
</value>
</item>
<item>
<key>
<string>
default_reference
</string>
</key>
<value>
<string>
testDocumentScanner
</string>
</value>
</item>
<item>
<key>
<string>
description
</string>
</key>
<value>
<none/>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
test.erp5.testDocumentScanner
</string>
</value>
</item>
<item>
<key>
<string>
portal_type
</string>
</key>
<value>
<string>
Test Component
</string>
</value>
</item>
<item>
<key>
<string>
sid
</string>
</key>
<value>
<none/>
</value>
</item>
<item>
<key>
<string>
text_content_error_message
</string>
</key>
<value>
<tuple/>
</value>
</item>
<item>
<key>
<string>
text_content_warning_message
</string>
</key>
<value>
<tuple/>
</value>
</item>
<item>
<key>
<string>
version
</string>
</key>
<value>
<string>
erp5
</string>
</value>
</item>
<item>
<key>
<string>
workflow_history
</string>
</key>
<value>
<persistent>
<string
encoding=
"base64"
>
AAAAAAAAAAM=
</string>
</persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record
id=
"2"
aka=
"AAAAAAAAAAI="
>
<pickle>
<global
name=
"PersistentMapping"
module=
"Persistence.mapping"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
data
</string>
</key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</pickle>
</record>
<record
id=
"3"
aka=
"AAAAAAAAAAM="
>
<pickle>
<global
name=
"PersistentMapping"
module=
"Persistence.mapping"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
data
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
component_validation_workflow
</string>
</key>
<value>
<persistent>
<string
encoding=
"base64"
>
AAAAAAAAAAQ=
</string>
</persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record
id=
"4"
aka=
"AAAAAAAAAAQ="
>
<pickle>
<global
name=
"WorkflowHistoryList"
module=
"Products.ERP5Type.Workflow"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
_log
</string>
</key>
<value>
<list>
<dictionary>
<item>
<key>
<string>
action
</string>
</key>
<value>
<string>
validate
</string>
</value>
</item>
<item>
<key>
<string>
validation_state
</string>
</key>
<value>
<string>
validated
</string>
</value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
bt5/erp5_document_scanner_ui_test/bt/template_test_id_list
View file @
2f5f336f
test.erp5.testRenderJSDocumentScanner
test.erp5.testDocumentScanner
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment