From 6d98b992423084dd737e80322c9360e0712368a2 Mon Sep 17 00:00:00 2001 From: SerenaFeng Date: Wed, 3 Jan 2018 16:03:33 +0800 Subject: simplify test_testcase.py using eq and templates Change-Id: If1d1e3e22be0ddbb92f0e3b927ea4e376f0a8c89 Signed-off-by: SerenaFeng --- testapi/opnfv_testapi/models/base_models.py | 3 +- testapi/opnfv_testapi/models/testcase_models.py | 69 +++++++------------- .../tests/unit/handlers/test_testcase.py | 74 ++++++++++------------ .../tests/unit/templates/testcase_d.json | 16 +++++ .../tests/unit/templates/testcase_e.json | 16 +++++ 5 files changed, 88 insertions(+), 90 deletions(-) create mode 100644 testapi/opnfv_testapi/tests/unit/templates/testcase_d.json create mode 100644 testapi/opnfv_testapi/tests/unit/templates/testcase_e.json diff --git a/testapi/opnfv_testapi/models/base_models.py b/testapi/opnfv_testapi/models/base_models.py index cd437d9..5017e85 100644 --- a/testapi/opnfv_testapi/models/base_models.py +++ b/testapi/opnfv_testapi/models/base_models.py @@ -24,7 +24,8 @@ class ModelBase(object): def __eq__(self, other): res = all(getattr(self, k) == getattr(other, k) - for k in self.format().keys() if k != '_id') + for k in self.format().keys() + if k not in ['_id', 'creation_date']) return res def format(self): diff --git a/testapi/opnfv_testapi/models/testcase_models.py b/testapi/opnfv_testapi/models/testcase_models.py index d1b8877..1a55cf7 100644 --- a/testapi/opnfv_testapi/models/testcase_models.py +++ b/testapi/opnfv_testapi/models/testcase_models.py @@ -12,10 +12,20 @@ from opnfv_testapi.tornado_swagger import swagger @swagger.model() class TestcaseCreateRequest(base_models.ModelBase): - def __init__(self, name, url=None, description=None, - catalog_description=None, tier=None, ci_loop=None, - criteria=None, blocking=None, dependencies=None, run=None, - domains=None, tags=None, version=None): + def __init__(self, name=None, + url=None, + description=None, + catalog_description=None, + tier=None, + ci_loop=None, + criteria=None, + blocking=None, + dependencies=None, + run=None, + domains=None, + tags=None, + version=None, + trust='Silver'): self.name = name self.url = url self.description = description @@ -29,56 +39,21 @@ class TestcaseCreateRequest(base_models.ModelBase): self.domains = domains self.tags = tags self.version = version - self.trust = "Silver" + self.trust = trust @swagger.model() -class TestcaseUpdateRequest(base_models.ModelBase): - def __init__(self, name=None, description=None, project_name=None, - catalog_description=None, tier=None, ci_loop=None, - criteria=None, blocking=None, dependencies=None, run=None, - domains=None, tags=None, version=None, trust=None): - self.name = name - self.description = description - self.catalog_description = catalog_description - self.project_name = project_name - self.tier = tier - self.ci_loop = ci_loop - self.criteria = criteria - self.blocking = blocking - self.dependencies = dependencies - self.run = run - self.domains = domains - self.tags = tags - self.version = version - self.trust = trust +class TestcaseUpdateRequest(TestcaseCreateRequest): + def __init__(self, **kwargs): + self.project_name = kwargs.pop('project_name', '') + super(TestcaseUpdateRequest, self).__init__(**kwargs) @swagger.model() -class Testcase(base_models.ModelBase): - def __init__(self, _id=None, name=None, project_name=None, - description=None, url=None, creation_date=None, - catalog_description=None, tier=None, ci_loop=None, - criteria=None, blocking=None, dependencies=None, run=None, - domains=None, tags=None, version=None, - trust=None): +class Testcase(TestcaseCreateRequest): + def __init__(self, _id=None, **kwargs): self._id = None - self.name = None - self.project_name = None - self.description = None - self.catalog_description = None - self.url = None - self.creation_date = None - self.tier = None - self.ci_loop = None - self.criteria = None - self.blocking = None - self.dependencies = None - self.run = None - self.domains = None - self.tags = None - self.version = None - self.trust = None + super(Testcase, self).__init__(**kwargs) @swagger.model() diff --git a/testapi/opnfv_testapi/tests/unit/handlers/test_testcase.py b/testapi/opnfv_testapi/tests/unit/handlers/test_testcase.py index 643057c..9a2bf58 100644 --- a/testapi/opnfv_testapi/tests/unit/handlers/test_testcase.py +++ b/testapi/opnfv_testapi/tests/unit/handlers/test_testcase.py @@ -6,12 +6,10 @@ # which accompanies this distribution, and is available at # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -import copy import httplib -import unittest from opnfv_testapi.common import message -from opnfv_testapi.models import testcase_models +from opnfv_testapi.models import testcase_models as tcm from opnfv_testapi.tests.unit import executor from opnfv_testapi.tests.unit import fake_pymongo from opnfv_testapi.tests.unit.handlers import test_base as base @@ -21,41 +19,35 @@ class TestCaseBase(base.TestBase): def setUp(self): super(TestCaseBase, self).setUp() self.project = 'functest' - self.req_d = testcase_models.TestcaseCreateRequest('vping_1', - '/cases/vping_1', - 'vping-ssh test') - self.req_e = testcase_models.TestcaseCreateRequest('doctor_1', - '/cases/doctor_1', - 'create doctor') - self.update_d = testcase_models.TestcaseUpdateRequest('vping_1', - 'vping-ssh test', - 'functest') - self.update_e = testcase_models.TestcaseUpdateRequest('doctor_1', - 'create doctor', - 'functest') - self.get_res = testcase_models.Testcase - self.list_res = testcase_models.Testcases - self.update_res = testcase_models.Testcase + self.req_d = tcm.TestcaseCreateRequest.from_dict( + self.load_json('testcase_d')) + self.req_e = tcm.TestcaseCreateRequest.from_dict( + self.load_json('testcase_e')) + self.update_req = tcm.TestcaseUpdateRequest(project_name=self.project, + **self.req_e.format()) + + self.get_res = tcm.Testcase + self.list_res = tcm.Testcases + self.update_res = tcm.Testcase self.basePath = '/api/v1/projects/%s/cases' fake_pymongo.projects.insert(self.project_e.format()) + print self.req_d.format() def assert_body(self, case, req=None): if not req: req = self.req_d - self.assertEqual(case.name, req.name) - self.assertEqual(case.description, req.description) - self.assertEqual(case.url, req.url) + self.assertEqual(req, + tcm.TestcaseCreateRequest.from_dict(case.format())) + self.assertEqual(case.project_name, self.project) self.assertIsNotNone(case._id) self.assertIsNotNone(case.creation_date) - def assert_update_body(self, old, new, req=None): + def assert_update_body(self, new_record, req=None): if not req: req = self.req_d - self.assertEqual(new.name, req.name) - self.assertEqual(new.description, req.description) - self.assertEqual(new.url, old.url) - self.assertIsNotNone(new._id) - self.assertIsNotNone(new.creation_date) + self.assertEqual(req, new_record) + self.assertIsNotNone(new_record._id) + self.assertIsNotNone(new_record.creation_date) @executor.mock_valid_lfid() def create_d(self): @@ -93,12 +85,12 @@ class TestCaseCreate(TestCaseBase): @executor.create(httplib.BAD_REQUEST, message.missing('name')) def test_emptyName(self): - req_empty = testcase_models.TestcaseCreateRequest('') + req_empty = tcm.TestcaseCreateRequest('') return req_empty @executor.create(httplib.BAD_REQUEST, message.missing('name')) def test_noneName(self): - req_none = testcase_models.TestcaseCreateRequest(None) + req_none = tcm.TestcaseCreateRequest(None) return req_none @executor.create(httplib.OK, '_assert_success') @@ -151,31 +143,33 @@ class TestCaseUpdate(TestCaseBase): @executor.update(httplib.NOT_FOUND, message.not_found_base) def test_notFound(self): - return self.update_e, 'notFound' + update = tcm.TestcaseUpdateRequest(description='update description') + return update, 'notFound' @executor.update(httplib.FORBIDDEN, message.exist_base) def test_newNameExist(self): self.create_e() - return self.update_e, self.req_d.name + return self.update_req, self.req_d.name @executor.update(httplib.FORBIDDEN, message.no_update()) def test_noUpdate(self): - return self.update_d, self.req_d.name + update = tcm.TestcaseUpdateRequest(project_name=self.project, + **self.req_d.format()) + return update, self.req_d.name @executor.update(httplib.OK, '_update_success') def test_success(self): - return self.update_e, self.req_d.name + return self.update_req, self.req_d.name @executor.update(httplib.OK, '_update_success') def test_with_dollar(self): - update = copy.deepcopy(self.update_d) - update.description = {'2. change': 'dollar change'} - return update, self.req_d.name + self.update_req.description = {'2. change': 'dollar change'} + return self.update_req, self.req_d.name def _update_success(self, request, body): - self.assert_update_body(self.req_d, body, request) + self.assert_update_body(body, request) _, new_body = self.get(request.name) - self.assert_update_body(self.req_d, new_body, request) + self.assert_update_body(new_body, request) class TestCaseDelete(TestCaseBase): @@ -195,7 +189,3 @@ class TestCaseDelete(TestCaseBase): self.assertEqual(body, '') code, body = self.get(self.req_d.name) self.assertEqual(code, httplib.NOT_FOUND) - - -if __name__ == '__main__': - unittest.main() diff --git a/testapi/opnfv_testapi/tests/unit/templates/testcase_d.json b/testapi/opnfv_testapi/tests/unit/templates/testcase_d.json new file mode 100644 index 0000000..7c36cb8 --- /dev/null +++ b/testapi/opnfv_testapi/tests/unit/templates/testcase_d.json @@ -0,0 +1,16 @@ +{ + "run": "vping.sh", + "name": "vping_ssh", + "ci_loop": "daily", + "tags": "", + "url": "/cases/vping_ssh", + "blocking": "true", + "domains": "os", + "dependencies": "", + "version": "euphrates", + "criteria": "PASS/FAIL", + "tier": "smoke", + "trust": "Silver", + "catalog_description": "", + "description": "vping-ssh test" +} \ No newline at end of file diff --git a/testapi/opnfv_testapi/tests/unit/templates/testcase_e.json b/testapi/opnfv_testapi/tests/unit/templates/testcase_e.json new file mode 100644 index 0000000..c031309 --- /dev/null +++ b/testapi/opnfv_testapi/tests/unit/templates/testcase_e.json @@ -0,0 +1,16 @@ +{ + "run": "parser.sh", + "name": "parser-basics", + "ci_loop": "daily", + "tags": "", + "url": "/cases/parser", + "blocking": "false", + "domains": "vnf", + "dependencies": "", + "version": "master", + "criteria": "PASS/FAIL", + "tier": "features", + "trust": "Silver", + "catalog_description": "", + "description": "parser test" +} \ No newline at end of file -- cgit 1.2.3-korg