Files
tradon/tests/test_routes.py
2025-12-26 13:11:43 +00:00

198 lines
6.2 KiB
Python
Executable File

# 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 base64
import json
import unittest
from trytond.pool import Pool
from trytond.protocols.wrappers import Response
from trytond.tests.test_tryton import DB_NAME, Client, activate_module, drop_db
from trytond.transaction import Transaction
from trytond.wsgi import app
class RoutesTestCase(unittest.TestCase):
@classmethod
def setUpClass(cls):
drop_db()
activate_module(['ir', 'res'], 'fr')
pool = Pool(DB_NAME)
with Transaction().start(DB_NAME, 0):
User = pool.get('res.user')
admin, = User.search([('login', '=', 'admin')])
admin.password = 'password'
admin.save()
@classmethod
def tearDownClass(cls):
super().tearDownClass()
drop_db()
@property
def auth_headers(self):
return {
'Authorization': (
'Basic ' + base64.b64encode(b'admin:password').decode()),
}
def data_url(self, model):
return '/%(database)s/data/%(model)s' % {
'database': DB_NAME,
'model': model,
}
def test_data_no_field(self):
"Test GET data without field"
c = Client(app, Response)
response = c.get(self.data_url('res.user'), headers=self.auth_headers)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data, b'\r\n\r\n')
def test_data_one_field(self):
"Test GET data with one field"
c = Client(app, Response)
response = c.get(
self.data_url('res.user'), headers=self.auth_headers,
query_string=[('f', 'name')])
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data, b'Nom\r\nAdministrator\r\n')
def test_data_multiple_fields(self):
"Test GET data with multiple fields"
c = Client(app, Response)
response = c.get(
self.data_url('res.user'), headers=self.auth_headers,
query_string=[('f', 'name'), ('f', 'login')])
self.assertEqual(response.status_code, 200)
self.assertEqual(
response.data, b'Nom,Identifiant\r\nAdministrator,admin\r\n')
def test_data_language(self):
"Test GET data with language"
c = Client(app, Response)
response = c.get(
self.data_url('ir.lang'), headers=self.auth_headers,
query_string=[
('f', 'name'),
('l', 'fr'),
('d', json.dumps([('code', '=', 'fr')])),
])
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data, 'Nom\r\nFrançais\r\n'.encode('utf-8'))
def test_data_size(self):
"Test GET data with size limit"
c = Client(app, Response)
response = c.get(
self.data_url('ir.lang'), headers=self.auth_headers,
query_string=[
('f', 'name'),
('s', 5),
])
self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data.splitlines()), 5 + 1)
def test_data_page(self):
"Test GET data with page"
c = Client(app, Response)
response0 = c.get(
self.data_url('ir.lang'), headers=self.auth_headers,
query_string=[
('f', 'name'),
('s', 5),
('p', 0)
])
response1 = c.get(
self.data_url('ir.lang'), headers=self.auth_headers,
query_string=[
('f', 'name'),
('s', 5),
('p', 1)
])
self.assertEqual(response0.status_code, 200)
self.assertEqual(response1.status_code, 200)
self.assertNotEqual(response0.data, response1.data)
def test_data_encoding(self):
"Test GET data with encoding"
c = Client(app, Response)
response = c.get(
self.data_url('ir.lang'), headers=self.auth_headers,
query_string=[
('f', 'name'),
('l', 'fr'),
('d', json.dumps([('code', '=', 'fr')])),
('enc', 'latin1'),
])
self.assertEqual(response.status_code, 200)
self.assertEqual(
response.data, 'Nom\r\nFrançais\r\n'.encode('latin1'))
def test_data_delimiter(self):
"Test GET data with delimiter"
c = Client(app, Response)
response = c.get(
self.data_url('res.user'), headers=self.auth_headers,
query_string=[('f', 'name'), ('f', 'login'), ('dl', '|')])
self.assertEqual(response.status_code, 200)
self.assertEqual(
response.data, b'Nom|Identifiant\r\nAdministrator|admin\r\n')
def test_data_quotechar(self):
"Test GET data with quotechar"
c = Client(app, Response)
response = c.get(
self.data_url('res.user'), headers=self.auth_headers,
query_string=[
('f', 'name'), ('f', 'login'), ('dl', 'n'), ('qc', '*')])
self.assertEqual(response.status_code, 200)
self.assertEqual(
response.data,
b'Nomn*Identifiant*\r\n*Administrator*n*admin*\r\n')
def test_data_no_header(self):
"Test GET data without header"
c = Client(app, Response)
response = c.get(
self.data_url('res.user'), headers=self.auth_headers,
query_string=[('f', 'name'), ('h', 0)])
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data, b'Administrator\r\n')
def test_data_locale_format(self):
"Test GET data in locale format"
c = Client(app, Response)
response_std = c.get(
self.data_url('res.user'), headers=self.auth_headers,
query_string=[('f', 'create_date')])
response_locale = c.get(
self.data_url('res.user'), headers=self.auth_headers,
query_string=[('f', 'create_date'), ('loc', 1)])
self.assertEqual(response_std.status_code, 200)
self.assertEqual(response_locale.status_code, 200)
self.assertNotEqual(response_std.data, response_locale.data)