first commit

This commit is contained in:
root
2026-03-14 09:42:12 +00:00
commit 0adbd20c2c
10991 changed files with 1646955 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.

Binary file not shown.

View File

@@ -0,0 +1,35 @@
==========================
Document Incoming Scenario
==========================
Imports::
>>> from proteus import Model
>>> from trytond.tests.tools import activate_modules, assertEqual
>>> from trytond.tools import file_open
Activate modules::
>>> config = activate_modules('document_incoming')
>>> Document = Model.get('document.incoming')
Create incoming document::
>>> document = Document()
>>> document.name = 'test.pdf'
>>> document.type = 'document_incoming'
>>> with file_open(
... 'document_incoming/tests/mutipage.pdf',
... mode='rb') as fp:
... document.data = fp.read()
>>> document.save()
Process document::
>>> document.click('process')
>>> document.state
'done'
>>> new_document = document.result
>>> assertEqual(new_document.data, document.data)
>>> new_document.type

View File

@@ -0,0 +1,47 @@
================================
Document Incoming Split Scenario
================================
Imports::
>>> from proteus import Model
>>> from trytond.tests.tools import activate_modules
>>> from trytond.tools import file_open
Activate modules::
>>> config = activate_modules('document_incoming')
>>> Document = Model.get('document.incoming')
Create incoming document::
>>> document = Document()
>>> document.name = 'test.pdf'
>>> with file_open(
... 'document_incoming/tests/mutipage.pdf',
... mode='rb') as fp:
... document.data = fp.read()
>>> document.save()
>>> document.mime_type
'application/pdf'
Split in 2::
>>> split_wizard = document.click('split_wizard')
>>> split_wizard.form.pages
'1-3'
>>> split_wizard.form.pages = '1-2,3'
>>> split_wizard.execute('split')
>>> len(document.children)
2
Process parent document::
>>> document.click('process')
>>> document.state
'done'
>>> bool(document.result)
False

View File

@@ -0,0 +1,245 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import uuid
from unittest.mock import patch
from trytond.modules.company.tests import CompanyTestMixin
from trytond.modules.document_incoming.document import iter_pages
from trytond.pool import Pool
from trytond.protocols.wrappers import HTTPStatus
from trytond.tests.test_tryton import (
ModuleTestCase, RouteTestCase, with_transaction)
from trytond.transaction import Transaction
class DocumentIncomingTestCase(CompanyTestMixin, ModuleTestCase):
"Test Document Incoming module"
module = 'document_incoming'
extras = ['inbound_email']
def test_iter_pages(self):
"Test iter_pages"
for expression, size, result in [
('1', 1, [[0]]),
('1,2', 2, [[0], [1]]),
('1-2', 2, [[0, 1]]),
('1-3', 2, [[0, 1]]),
('1-2', 4, [[0, 1], [2, 3]]),
('1-', 3, [[0, 1, 2]]),
('-2', 2, [[0, 1]]),
('1-2,3-4', 4, [[0, 1], [2, 3]]),
('2', 3, [[0], [1], [2]]),
('-2,3-', 4, [[0, 1], [2, 3]]),
('1--2', 2, [[0, 1]]),
('1,,4', 4, [[0], [1, 2], [3]]),
]:
with self.subTest(expression=expression, size=size):
self.assertEqual(
[list(i) for i in iter_pages(expression, size)],
result)
def test_iter_pages_value_error(self):
"Test iter_pages value error"
for expression in ['a', 'a,b', '1-a']:
with self.subTest(expression=expression):
with self.assertRaises(ValueError):
iter_pages(expression, 0)
@with_transaction()
def test_document_from_inbound_email(self):
"Test document from inbound email"
pool = Pool()
Document = pool.get('document.incoming')
Email = pool.get('inbound.email')
Rule = pool.get('inbound.email.rule')
with patch.object(Email, 'as_dict') as as_dict:
as_dict.return_value = {
'subject': "Subject",
'text': "Text",
'attachments': [{
'filename': "document",
'data': b'data',
}],
}
email = Email()
rule = Rule(
document_incoming_type='document_incoming',
document_incoming_company=None,
)
document = Document.from_inbound_email(email, rule)
self.assertFalse(document.active)
self.assertEqual(document.name, "Subject")
self.assertEqual(document.data, b'Text')
self.assertEqual(document.source, 'inbound_email')
child, = document.children
self.assertTrue(child.active)
self.assertEqual(child.name, 'document')
self.assertEqual(child.data, b'data')
self.assertEqual(child.source, 'inbound_email')
@with_transaction()
def test_document_from_inbound_email_without_content(self):
"Test document from inbound email without content"
pool = Pool()
Document = pool.get('document.incoming')
Email = pool.get('inbound.email')
Rule = pool.get('inbound.email.rule')
with patch.object(Email, 'as_dict') as as_dict:
as_dict.return_value = {
'subject': "Subject",
'attachments': [{
'filename': "document",
'data': b'data',
}],
}
email = Email()
rule = Rule(
document_incoming_type='document_incoming',
document_incoming_company=None,
)
document = Document.from_inbound_email(email, rule)
self.assertFalse(document.data)
child, = document.children
self.assertEqual(child.data, b'data')
class DocumentIncomingRouteTestCase(RouteTestCase):
"Test Document Incoming route"
module = 'document_incoming'
key = uuid.uuid4().hex
@classmethod
def setUpDatabase(cls):
pool = Pool()
Application = pool.get('res.user.application')
Application(
key=cls.key, user=1, application='document_incoming',
state='validated').save()
cls.Document = pool.get('document.incoming')
def test_document_incoming_route_data(self):
"Test document incoming route with data"
client = self.client()
response = client.post(
f'/{self.db_name}/document_incoming'
'?name=test&type=document_incoming',
data=b'data',
headers={
'Authorization': f'bearer {self.key}',
})
self.assertEqual(response.status_code, HTTPStatus.NO_CONTENT)
@with_transaction()
def check():
pool = Pool()
Document = pool.get('document.incoming')
document, = Document.search([])
try:
self.assertEqual(document.name, 'test')
self.assertEqual(document.type, 'document_incoming')
self.assertEqual(document.data, b'data')
finally:
Document.delete([document])
Transaction().commit()
check()
def test_document_incoming_route_json(self):
"Test document incoming route with JSON"
client = self.client()
response = client.post(
f'/{self.db_name}/document_incoming',
json={
'name': 'test',
'type': 'document_incoming',
'data': 'ZGF0YQ==',
},
headers={
'Authorization': f'bearer {self.key}',
})
self.assertEqual(response.status_code, HTTPStatus.NO_CONTENT)
@with_transaction()
def check():
pool = Pool()
Document = pool.get('document.incoming')
document, = Document.search([])
try:
self.assertEqual(document.name, 'test')
self.assertEqual(document.type, 'document_incoming')
self.assertEqual(document.data, b'data')
finally:
Document.delete([document])
Transaction().commit()
check()
def test_document_incoming_route_unknown_arguments(self):
"Test document incoming route with JSON"
client = self.client()
response = client.post(
f'/{self.db_name}/document_incoming?foo=bar',
data=b'data',
headers={
'Authorization': f'bearer {self.key}',
})
self.assertEqual(response.status_code, HTTPStatus.NO_CONTENT)
@with_transaction()
def check():
pool = Pool()
Document = pool.get('document.incoming')
document, = Document.search([])
try:
self.assertEqual(document.data, b'data')
finally:
Document.delete([document])
Transaction().commit()
check()
def test_document_incoming_route_process(self):
"Test document incoming route with JSON"
client = self.client()
with patch.object(self.Document, 'process') as process:
response = client.post(
f'/{self.db_name}/document_incoming'
'?process=1&type=document_incoming',
data=b'data',
headers={
'Authorization': f'bearer {self.key}',
})
process.assert_called_once()
self.assertEqual(response.status_code, HTTPStatus.NO_CONTENT)
@with_transaction()
def clean():
pool = Pool()
Document = pool.get('document.incoming')
document, = Document.search([])
Document.delete([document])
Transaction().commit()
clean()
del ModuleTestCase, RouteTestCase

View File

@@ -0,0 +1,8 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.tests.test_tryton import load_doc_tests
def load_tests(*args, **kwargs):
return load_doc_tests(__name__, __file__, *args, **kwargs)