|
8 | 8 |
|
9 | 9 | import random
|
10 | 10 | import json
|
| 11 | +import inspect |
| 12 | +import datetime |
11 | 13 |
|
12 | 14 |
|
13 | 15 | try:
|
14 | 16 | strtypes = (str, unicode)
|
15 |
| -except: |
| 17 | +except NameError: |
16 | 18 | strtypes = str
|
17 | 19 |
|
18 | 20 |
|
@@ -63,8 +65,7 @@ def rand_hash(n):
|
63 | 65 | 'source_file_version': 'file_versions'},
|
64 | 66 | 'instances': {'file_version': 'file_versions'},
|
65 | 67 | 'vectors': {'instance': 'instances',
|
66 |
| - 'file_version': 'file_versions', |
67 |
| - 'file': 'files'}} |
| 68 | + 'file_version': 'file_versions'}} |
68 | 69 |
|
69 | 70 |
|
70 | 71 | def resolve_reqs(model_name, user):
|
@@ -110,35 +111,42 @@ def setup_model(model_name, user):
|
110 | 111 |
|
111 | 112 |
|
112 | 113 | def assert_eq(a, b):
|
113 |
| - import inspect, datetime |
114 | 114 | print(a, b)
|
115 | 115 | if isinstance(a, list) and isinstance(b, list):
|
116 | 116 | assert len(a) == len(b)
|
117 | 117 | for a_item, b_item in zip(a, b):
|
118 | 118 | assert_eq(a_item, b_item)
|
119 | 119 | elif isinstance(a, dict) and isinstance(b, dict):
|
120 | 120 | for k in b:
|
121 |
| - assert a[k] == b[k] |
122 |
| - elif type(a) == type(b): |
123 |
| - assert a == b |
| 121 | + assert_eq(a[k], b[k]) |
| 122 | + elif isinstance(a, datetime.datetime): |
| 123 | + assert_eq(a.replace(microsecond=0, tzinfo=None), b) |
| 124 | + elif isinstance(b, datetime.datetime): |
| 125 | + assert_eq(a, b.replace(microsecond=0, tzinfo=None)) |
124 | 126 | elif isinstance(b, dict) and (isinstance(a, models.Model) or
|
125 | 127 | inspect.isclass(a)):
|
126 | 128 | assert_eq(b, a)
|
127 | 129 | elif isinstance(a, dict) and (isinstance(b, models.Model) or
|
128 | 130 | inspect.isclass(b)):
|
129 | 131 | for k in a:
|
130 |
| - b_value = getattr(b, k) |
| 132 | + # TODO: serializer-added values cannot be validated, so we'll have to |
| 133 | + # ignore any attribute that does not exist in Model object |
| 134 | + if not hasattr(b, k): |
| 135 | + print("Ignoring missing model parameter: {} in {}".format(k, b)) |
| 136 | + continue |
131 | 137 | a_value = a.__getitem__(k)
|
| 138 | + b_value = getattr(b, k) |
132 | 139 | assert_eq(a_value, b_value)
|
133 |
| - #elif isinstance(b, datetime.datetime): |
134 |
| - # assert_eq(a, b.isoformat().replace('+00:00', 'Z')) |
135 |
| - elif isinstance(b, models.Model): |
| 140 | + elif isinstance(b, datetime.datetime): |
| 141 | + assert_eq(a, b.isoformat()) |
| 142 | + elif isinstance(a, (int, long)) and isinstance(b, models.Model): |
136 | 143 | assert_eq(a, b.id)
|
| 144 | + elif isinstance(a, strtypes) and isinstance(b, models.Model): |
| 145 | + assert_eq(a, b.username) |
| 146 | + elif b.__class__.__name__ == 'RelatedManager': |
| 147 | + assert_eq(a, list(b.all())) |
137 | 148 | else:
|
138 |
| - print(type(a), type(b)) |
139 | 149 | assert a == b
|
140 |
| - #raise Exception("Cannot assert equality between types {} and {}" |
141 |
| - # .format(type(a), type(b))) |
142 | 150 |
|
143 | 151 |
|
144 | 152 | def assert_response(response, status, data=None):
|
|
0 commit comments