From 4541ad05f36c8d203698f822766fd38e4a1488aa Mon Sep 17 00:00:00 2001 From: Rodia Date: Sun, 29 Dec 2024 15:31:24 -0500 Subject: [PATCH] Fix: MACHETE test_get_products lock_table --- modules/sale_don_confiao/routes.py | 52 ++++++------ .../tests/test_api_donconfiao.py | 79 +++++++++++++++---- modules/sale_don_confiao/tryton.cfg | 3 +- 3 files changed, 95 insertions(+), 39 deletions(-) diff --git a/modules/sale_don_confiao/routes.py b/modules/sale_don_confiao/routes.py index e59f0f3..40005d6 100644 --- a/modules/sale_don_confiao/routes.py +++ b/modules/sale_don_confiao/routes.py @@ -1,34 +1,42 @@ from trytond.wsgi import app from trytond.protocols.wrappers import ( - # with_pool, - # with_transaction, + with_pool, + with_transaction, user_application, - # allow_null_origin -) -import json + allow_null_origin) +# from werkzeug.wrappers import Response don_confiao_application = user_application( 'sale_don_confiao') +@app.route('//sale_don_confiao/parties', methods=[ + 'GET']) +@app.route('//sale_don_confiao/parties', methods=[ + 'POST']) +@allow_null_origin +@with_pool +@with_transaction() @don_confiao_application -@app.route('/parties', methods=['GET']) -@app.route('//sale_don_confiao/parties') -def get_parties(request): - parties = [{ - 'id': 1, - 'name': 'Alejandro' - }] +def parties(request, pool): + Party = pool.get('party.party') + parties = Party.search_read( + [], + order=[('id', 'ASC')], + fields_names=['id', 'name']) + return parties - return json.dumps(parties) -# @app.route('/parties') -# @allow_null_origin -# @with_pool -# @with_transaction() -# @don_confiao_application -# def get_parties(request, pool): -# Party = pool.get('party.party') -# parties = Party.search([]) -# return json.dumps(parties) +@app.route('//sale_don_confiao/products', methods=['GET']) +@allow_null_origin +@with_pool +@with_transaction() +@don_confiao_application +def get_products(request, pool): + Product = pool.get('product.product') + products = Product.search_read( + [], + order=[('id', 'ASC')], + fields_names=['id', 'name']) + return products diff --git a/modules/sale_don_confiao/tests/test_api_donconfiao.py b/modules/sale_don_confiao/tests/test_api_donconfiao.py index 1d2fc7f..5bf510f 100644 --- a/modules/sale_don_confiao/tests/test_api_donconfiao.py +++ b/modules/sale_don_confiao/tests/test_api_donconfiao.py @@ -1,17 +1,15 @@ -from trytond.tests.test_routes import RoutesTestCase -from trytond.tests.test_tryton import Client -from trytond.protocols.wrappers import Response +from trytond.tests.test_tryton import RouteTestCase from trytond.pool import Pool -from trytond.wsgi import app - from http import HTTPStatus - import uuid +import json +from trytond.tests.test_tryton import DB_NAME +from trytond.transaction import Transaction class DonConfiaoApiRouteTestCase( - RoutesTestCase): - "Speco API Routes" + RouteTestCase): + "Don Confiao API Routes" module = 'sale_don_confiao' @@ -21,23 +19,72 @@ class DonConfiaoApiRouteTestCase( def setUpDatabase(cls): pool = Pool() Application = pool.get('res.user.application') + Company = pool.get('company.company') + Party = pool.get('party.party') + + # Product = pool.get('product.product') + Application( key=cls.key, user=1, application='sale_don_confiao', state='validated').save() + customer = Party() + customer.name = 'Dunkan' + customer.save() + + company = Company( + party=1, + currency=1 + ) + company.save() + def test_get_parties(self): - client = Client(app, Response) + client = self.client() response = client.get( - '/parties', + f'/{self.db_name}/sale_don_confiao/parties', headers={ 'Authorization': f'bearer {self.key}', }) + + parties = json.loads( + response.get_data().decode()) + self.assertEqual(response.status_code, HTTPStatus.OK) - # response = client.get( - # '/parties', - # headers={ - # 'Authorization': f'bearer {self.key}', - # }) - # self.assertEqual(response.status_code, HTTPStatus.OK) + self.assertEqual(len(parties), 1) + + def test_get_products(self): + pool = Pool(DB_NAME) + transaction = Transaction().start(DB_NAME, 0, _lock_tables=[ + 'product_product']) + with transaction: + # MACHETE: Se bloquea la tabla manualmente + # transaction._locked_tables = ['product_product'] + User = pool.get('res.user') + admin, = User.search([('login', '=', 'admin')]) + admin.password = 'password' + admin.save() + + ProductTemplate = pool.get('product.template') + Product = pool.get('product.product') + Uom = pool.get('product.uom') + template, = ProductTemplate.create([ + {'name': 'Product', + 'default_uom': Uom.search([('name', '=', 'Unit')])[0].id + } + ]) + + Product.create([{'template': template.id}]) + + client = self.client() + response = client.get( + f'/{self.db_name}/sale_don_confiao/products', + headers={ + 'Authorization': f'bearer {self.key}', + }) + + products = json.loads( + response.get_data().decode()) + self.assertEqual(response.status_code, HTTPStatus.OK) + self.assertEqual(len(products), 1) diff --git a/modules/sale_don_confiao/tryton.cfg b/modules/sale_don_confiao/tryton.cfg index ed07a93..945cdf4 100644 --- a/modules/sale_don_confiao/tryton.cfg +++ b/modules/sale_don_confiao/tryton.cfg @@ -1,6 +1,7 @@ [tryton] -version=6.8.0 +version=7.4.0 depends: ir party + product xml: