From a66ddc839099fd43f29c7dfb5e993927c287b015 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Thu, 18 Mar 2021 16:36:19 +0100 Subject: [PATCH] bugfix trade action --- ereuse_devicehub/dummy/dummy.py | 5 +++-- ereuse_devicehub/resources/action/schemas.py | 19 +++++++++++++++++-- ereuse_devicehub/resources/action/views.py | 11 ----------- tests/test_action.py | 1 + tests/test_basic.py | 3 ++- 5 files changed, 23 insertions(+), 16 deletions(-) diff --git a/ereuse_devicehub/dummy/dummy.py b/ereuse_devicehub/dummy/dummy.py index 376ccd1b..16c22771 100644 --- a/ereuse_devicehub/dummy/dummy.py +++ b/ereuse_devicehub/dummy/dummy.py @@ -115,10 +115,11 @@ class Dummy: user1.post({'type': model.t, 'devices': [pc]}, res=m.Action) # Perform a Sell to several devices + # import pdb; pdb.set_trace() user1.post( { 'type': m.Sell.t, - 'to': user1.user['individuals'][0]['id'], + 'userTo': user1.user['email'], 'devices': list(itertools.islice(pcs, len(pcs) // 2)) }, res=m.Action) @@ -174,7 +175,7 @@ class Dummy: user1.post( # Sell device { 'type': m.Sell.t, - 'to': user1.user['individuals'][0]['id'], + 'userTo': user1.user['email'], 'devices': [sample_pc] }, res=m.Action) diff --git a/ereuse_devicehub/resources/action/schemas.py b/ereuse_devicehub/resources/action/schemas.py index 09befc5d..fdd51822 100644 --- a/ereuse_devicehub/resources/action/schemas.py +++ b/ereuse_devicehub/resources/action/schemas.py @@ -21,6 +21,7 @@ from ereuse_devicehub.resources.enums import AppearanceRange, BiosAccessRange, F from ereuse_devicehub.resources.models import STR_BIG_SIZE, STR_SIZE from ereuse_devicehub.resources.schemas import Thing from ereuse_devicehub.resources.user import schemas as s_user +from ereuse_devicehub.resources.user.models import User class Action(Thing): @@ -459,8 +460,22 @@ class Trade(ActionWithMultipleDevices): __doc__ = m.Trade.__doc__ date = DateTime(data_key='date', required=False) price = Float(required=False, data_key='price') - user_to = SanitizedStr(validate=Length(max=STR_SIZE), data_key='userTo', required=False) - user_from = SanitizedStr(validate=Length(max=STR_SIZE), data_key='userTo', required=False) + user_to_id = SanitizedStr(validate=Length(max=STR_SIZE), data_key='userTo', required=False) + user_from_id = SanitizedStr(validate=Length(max=STR_SIZE), data_key='userTo', required=False) + + @validates_schema + def validate_user_to_id(self, data: dict): + if 'user_to_id' in data: + user_to = User.query.filter_by(email=data['user_to_id']).one() + data['user_to_id'] = user_to.id + for dev in data['devices']: + dev.owner_id = user_to.id + + @validates_schema + def validate_user_from_id(self, data: dict): + if 'user_from_id' in data: + user_to = User.query.filter_by(email=data['user_from_id']).one() + data['user_from_id'] = user_to.id class OfferTrade(ActionWithMultipleDevices): diff --git a/ereuse_devicehub/resources/action/views.py b/ereuse_devicehub/resources/action/views.py index 3b28ceec..a8d9d09d 100644 --- a/ereuse_devicehub/resources/action/views.py +++ b/ereuse_devicehub/resources/action/views.py @@ -75,18 +75,7 @@ class TradeView(View): def post(self): res_json = request.get_json() - devices = res_json['devices'] - if 'user_to' in res_json: - user_to_id = User.query.filter_by(email=res_json['user_to']).one().id - res_json.pop('user_to') - res_json['user_to_id'] = user_to_id - for dev in devices: - dev.owner_id = user_to_id - if 'user_from' in res_json: - res_json['user_from_id'] = User.query.filter_by(email=res_json['user_from']).one().id - res_json.pop('user_from') res_obj = self.model(**res_json) - db.session.add(res_obj) db.session().final_flush() ret = self.schema.jsonify(res_obj) diff --git a/tests/test_action.py b/tests/test_action.py index 0def7530..6e6398fe 100644 --- a/tests/test_action.py +++ b/tests/test_action.py @@ -740,6 +740,7 @@ def test_deallocate_bad_dates(user: UserClient): @pytest.mark.mvp +@pytest.mark.xfail(reason='Old functionality') @pytest.mark.parametrize('action_model_state', (pytest.param(ams, id=ams[0].__name__) for ams in [ diff --git a/tests/test_basic.py b/tests/test_basic.py index 11ffbb80..52e252b8 100644 --- a/tests/test_basic.py +++ b/tests/test_basic.py @@ -54,6 +54,7 @@ def test_api_docs(client: Client): '/metrics/', '/tags/', '/tags/{tag_id}/device/{device_id}', + '/trades/', '/users/', '/users/login/' # '/devices/{dev1_id}/merge/{dev2_id}', @@ -119,4 +120,4 @@ def test_api_docs(client: Client): 'scheme': 'basic', 'name': 'Authorization' } - assert len(docs['definitions']) == 117 + assert len(docs['definitions']) == 118