From 37c6bb0c8b2fd9a67a8d15830f545949657e74eb Mon Sep 17 00:00:00 2001 From: Luka Peschke Date: Wed, 27 Mar 2019 10:35:26 +0100 Subject: [PATCH] Fix the rating.get_quotation method This updates the rating.get_quotation method of the client. Tests on this method have been added. Depends-On: https://review.openstack.org/#/c/648062/ Change-Id: Ie2de0162311c2d162c1573042187ac4e628bd966 (cherry picked from commit de96c61985a978a5c1ca6ddf5fe58b3f601c054f) --- cloudkittyclient/tests/functional/v1/base.py | 2 +- cloudkittyclient/tests/unit/v1/test_rating.py | 48 +++++++++++++++++++ cloudkittyclient/v1/rating/__init__.py | 6 ++- .../fix-get-quotation-1d2c18a979f85fe6.yaml | 5 ++ 4 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 cloudkittyclient/tests/unit/v1/test_rating.py create mode 100644 releasenotes/notes/fix-get-quotation-1d2c18a979f85fe6.yaml diff --git a/cloudkittyclient/tests/functional/v1/base.py b/cloudkittyclient/tests/functional/v1/base.py index 37890fb..5a37594 100644 --- a/cloudkittyclient/tests/functional/v1/base.py +++ b/cloudkittyclient/tests/functional/v1/base.py @@ -35,7 +35,7 @@ class BaseFunctionalTest(utils.BaseTestCase): if p.returncode != 0: raise RuntimeError('"{cmd}" returned {val}: {msg}'.format( cmd=' '.join(cmd), val=p.returncode, msg=stderr)) - return json.loads(stdout) if has_output else None + return json.loads(stdout.decode('ascii')) if has_output else None def openstack(self, action, flags='', params='', fmt='-f json', has_output=True): diff --git a/cloudkittyclient/tests/unit/v1/test_rating.py b/cloudkittyclient/tests/unit/v1/test_rating.py new file mode 100644 index 0000000..b1db6cb --- /dev/null +++ b/cloudkittyclient/tests/unit/v1/test_rating.py @@ -0,0 +1,48 @@ +# Copyright 2019 Objectif Libre +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +import decimal + +from cloudkittyclient import exc +from cloudkittyclient.tests.unit.v1 import base + + +class TestRating(base.BaseAPIEndpointTestCase): + + def test_quote_request(self): + res_data = [{'usage': { + 'instance': [{ + 'vol': {'unit': 'undef', 'qty': '1'}, + 'rating': {'price': decimal.Decimal(1)}, + 'desc': { + 'disk_total_display': 1, + 'image_id': 'c43a3e7d-c4e6-45d6-8c8d-e2832a45bc0a', + 'ram': 64, + 'ephemeral': 0, + 'vcpus': 1, + 'source_type': 'image', + 'disk_total': 1, + 'flavor_id': '42', + 'flavor': 'm1.nano', + 'disk': 1, + 'source_val': 'c43a3e7d-c4e6-45d6-8c8d-e2832a45bc0a'} + }] + }}] + + self.rating.get_quotation(res_data=res_data) + self.api_client.post.assert_called_once_with( + '/v1/rating/quote/', json={'resources': res_data}) + + def test_get_quotation_no_res_data(self): + self.assertRaises(exc.ArgumentRequired, self.rating.get_quotation) diff --git a/cloudkittyclient/v1/rating/__init__.py b/cloudkittyclient/v1/rating/__init__.py index 25ffdaf..16fa101 100644 --- a/cloudkittyclient/v1/rating/__init__.py +++ b/cloudkittyclient/v1/rating/__init__.py @@ -78,8 +78,10 @@ class RatingManager(base.BaseManager): """ if not kwargs.get('res_data', None): raise exc.ArgumentRequired("'res_data' argument is required.") - url = self.get_url('quote') - return self.api_client.post(url, kwargs['res_data']) + url = self.get_url('quote', {}) + + body = {'resources': kwargs['res_data']} + return self.api_client.post(url, json=body).json() class CliModuleGet(lister.Lister): diff --git a/releasenotes/notes/fix-get-quotation-1d2c18a979f85fe6.yaml b/releasenotes/notes/fix-get-quotation-1d2c18a979f85fe6.yaml new file mode 100644 index 0000000..c5ddf0e --- /dev/null +++ b/releasenotes/notes/fix-get-quotation-1d2c18a979f85fe6.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + The ``rating.get_quotation`` method of the client has been fixed: the json + body has been updated to match the API reference.