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,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