|
4 | 4 | from odm2api.ODM2 import models |
5 | 5 | from odm2api.ODMconnection import dbconnection |
6 | 6 | from odm2api.ODM2.services.readService import ReadODM2 |
| 7 | +from sqlalchemy.orm import class_mapper |
| 8 | +import sqlalchemy |
7 | 9 |
|
8 | 10 | # run this test from the root directory using: |
9 | 11 | # python -m pytest tests/test_odm2/test_readservice.py |
10 | 12 |
|
| 13 | +globals = {} |
11 | 14 |
|
12 | 15 |
|
| 16 | +def rawSql2Alchemy(rawsqlresult, sqlalchemyClass): |
| 17 | + """ |
| 18 | + converts the results of a raw sql select query into SqlAlchemy Model Object |
| 19 | + :param rawsqlresult: array of values, sql select results |
| 20 | + :param sqlalchemyModelObj: model object to convert into |
| 21 | + :return: populated model object |
| 22 | + """ |
| 23 | + |
| 24 | + map = {} |
| 25 | + class_attributes = [prop.key for prop in class_mapper(sqlalchemyClass).iterate_properties |
| 26 | + if isinstance(prop, sqlalchemy.orm.ColumnProperty)] |
| 27 | + |
| 28 | + for i in range(len(class_attributes)): |
| 29 | + map[class_attributes[i]] = rawsqlresult[i] |
| 30 | + |
| 31 | + modelObj = sqlalchemyClass() |
| 32 | + modelObj.__dict__ = map |
| 33 | + return modelObj |
| 34 | + |
13 | 35 |
|
14 | | -globals = {} |
15 | 36 |
|
16 | 37 | class TestReadService: |
17 | 38 |
|
@@ -81,8 +102,6 @@ def test_getAllModels(self): |
81 | 102 |
|
82 | 103 | assert len(res) == len(resapi) |
83 | 104 |
|
84 | | - |
85 | | - |
86 | 105 | def test_getModelByCode(self): |
87 | 106 |
|
88 | 107 | # get a model from the database |
@@ -114,14 +133,22 @@ def test_getModelByCode(self): |
114 | 133 |
|
115 | 134 | def test_getRelatedModelsByID(self): |
116 | 135 |
|
117 | | - # get one model from the database |
118 | | - res = self.engine.execute('SELECT * FROM Models').fetchone() |
119 | | - model_id = res[0] |
| 136 | + # get all models from the database |
| 137 | + res = self.engine.execute('SELECT * FROM Models').fetchall() |
| 138 | + m1 = rawSql2Alchemy(res[0], models.Models) |
| 139 | + m2 = rawSql2Alchemy(res[1], models.Models) |
| 140 | + |
| 141 | + |
| 142 | + # create a relationship between them |
| 143 | + self.engine.execute('INSERT INTO RelatedModels Values(1, ?, "TestRelationship", ?)', (m1.ModelID), m2.ModelID) |
| 144 | + |
| 145 | + |
120 | 146 |
|
121 | 147 | # get related models by id using the api |
122 | | - resapi = self.reader.getRelatedModelsByID(model_id) |
| 148 | + resapi = self.reader.getRelatedModelsByID(m1.ModelID) |
123 | 149 |
|
124 | | - assert False |
| 150 | + assert resapi is not None |
| 151 | + assert resapi[0].RelatedModelObj.ModelCode == 'swmm' |
125 | 152 |
|
126 | 153 | def test_getRelatedModelsByCode(self): |
127 | 154 | pass |
|
0 commit comments