|
1 | 1 | import unittest2 |
2 | 2 |
|
3 | 3 |
|
4 | | -class Test_get_protobuf_attribute_and_value(unittest2.TestCase): |
| 4 | +class Test__get_protobuf_attribute_and_value(unittest2.TestCase): |
5 | 5 |
|
6 | 6 | def _callFUT(self, val): |
7 | | - from gcloud.datastore.helpers import get_protobuf_attribute_and_value |
| 7 | + from gcloud.datastore._helpers import _get_protobuf_attribute_and_value |
8 | 8 |
|
9 | | - return get_protobuf_attribute_and_value(val) |
| 9 | + return _get_protobuf_attribute_and_value(val) |
10 | 10 |
|
11 | 11 | def test_datetime_naive(self): |
12 | 12 | import calendar |
@@ -83,16 +83,23 @@ def test_unicode(self): |
83 | 83 | self.assertEqual(name, 'string_value') |
84 | 84 | self.assertEqual(value, u'str') |
85 | 85 |
|
| 86 | + def test_entity(self): |
| 87 | + from gcloud.datastore.entity import Entity |
| 88 | + entity = Entity() |
| 89 | + name, value = self._callFUT(entity) |
| 90 | + self.assertEqual(name, 'entity_value') |
| 91 | + self.assertTrue(value is entity) |
| 92 | + |
86 | 93 | def test_object(self): |
87 | 94 | self.assertRaises(ValueError, self._callFUT, object()) |
88 | 95 |
|
89 | 96 |
|
90 | | -class Test_get_value_from_protobuf(unittest2.TestCase): |
| 97 | +class Test__get_value_from_protobuf(unittest2.TestCase): |
91 | 98 |
|
92 | 99 | def _callFUT(self, pb): |
93 | | - from gcloud.datastore.helpers import get_value_from_protobuf |
| 100 | + from gcloud.datastore._helpers import _get_value_from_protobuf |
94 | 101 |
|
95 | | - return get_value_from_protobuf(pb) |
| 102 | + return _get_value_from_protobuf(pb) |
96 | 103 |
|
97 | 104 | def _makePB(self, attr_name, value): |
98 | 105 | from gcloud.datastore.datastore_v1_pb2 import Property |
@@ -146,7 +153,124 @@ def test_unicode(self): |
146 | 153 | pb = self._makePB('string_value', u'str') |
147 | 154 | self.assertEqual(self._callFUT(pb), u'str') |
148 | 155 |
|
| 156 | + def test_entity(self): |
| 157 | + from gcloud.datastore.datastore_v1_pb2 import Property |
| 158 | + from gcloud.datastore.entity import Entity |
| 159 | + |
| 160 | + pb = Property() |
| 161 | + entity_pb = pb.value.entity_value |
| 162 | + prop_pb = entity_pb.property.add() |
| 163 | + prop_pb.name = 'foo' |
| 164 | + prop_pb.value.string_value = 'Foo' |
| 165 | + entity = self._callFUT(pb) |
| 166 | + self.assertTrue(isinstance(entity, Entity)) |
| 167 | + self.assertEqual(entity['foo'], 'Foo') |
| 168 | + |
149 | 169 | def test_unknown(self): |
150 | 170 | from gcloud.datastore.datastore_v1_pb2 import Property |
| 171 | + |
151 | 172 | pb = Property() |
152 | 173 | self.assertEqual(self._callFUT(pb), None) # XXX desirable? |
| 174 | + |
| 175 | + |
| 176 | +class Test_set_protobuf_value(unittest2.TestCase): |
| 177 | + |
| 178 | + def _callFUT(self, value_pb, val): |
| 179 | + from gcloud.datastore._helpers import _set_protobuf_value |
| 180 | + |
| 181 | + return _set_protobuf_value(value_pb, val) |
| 182 | + |
| 183 | + def _makePB(self): |
| 184 | + from gcloud.datastore.datastore_v1_pb2 import Value |
| 185 | + |
| 186 | + return Value() |
| 187 | + |
| 188 | + def test_datetime(self): |
| 189 | + import calendar |
| 190 | + import datetime |
| 191 | + import pytz |
| 192 | + |
| 193 | + pb = self._makePB() |
| 194 | + utc = datetime.datetime(2014, 9, 16, 10, 19, 32, 4375, pytz.utc) |
| 195 | + self._callFUT(pb, utc) |
| 196 | + value = pb.timestamp_microseconds_value |
| 197 | + self.assertEqual(value / 1000000, calendar.timegm(utc.timetuple())) |
| 198 | + self.assertEqual(value % 1000000, 4375) |
| 199 | + |
| 200 | + def test_key(self): |
| 201 | + from gcloud.datastore.dataset import Dataset |
| 202 | + from gcloud.datastore.key import Key |
| 203 | + |
| 204 | + _DATASET = 'DATASET' |
| 205 | + _KIND = 'KIND' |
| 206 | + _ID = 1234 |
| 207 | + _PATH = [{'kind': _KIND, 'id': _ID}] |
| 208 | + pb = self._makePB() |
| 209 | + key = Key(dataset=Dataset(_DATASET), path=_PATH) |
| 210 | + self._callFUT(pb, key) |
| 211 | + value = pb.key_value |
| 212 | + self.assertEqual(value, key.to_protobuf()) |
| 213 | + |
| 214 | + def test_bool(self): |
| 215 | + pb = self._makePB() |
| 216 | + self._callFUT(pb, False) |
| 217 | + value = pb.boolean_value |
| 218 | + self.assertEqual(value, False) |
| 219 | + |
| 220 | + def test_float(self): |
| 221 | + pb = self._makePB() |
| 222 | + self._callFUT(pb, 3.1415926) |
| 223 | + value = pb.double_value |
| 224 | + self.assertEqual(value, 3.1415926) |
| 225 | + |
| 226 | + def test_int(self): |
| 227 | + pb = self._makePB() |
| 228 | + self._callFUT(pb, 42) |
| 229 | + value = pb.integer_value |
| 230 | + self.assertEqual(value, 42) |
| 231 | + |
| 232 | + def test_long(self): |
| 233 | + pb = self._makePB() |
| 234 | + must_be_long = (1 << 63) - 1 |
| 235 | + self._callFUT(pb, must_be_long) |
| 236 | + value = pb.integer_value |
| 237 | + self.assertEqual(value, must_be_long) |
| 238 | + |
| 239 | + def test_native_str(self): |
| 240 | + pb = self._makePB() |
| 241 | + self._callFUT(pb, 'str') |
| 242 | + value = pb.string_value |
| 243 | + self.assertEqual(value, 'str') |
| 244 | + |
| 245 | + def test_unicode(self): |
| 246 | + pb = self._makePB() |
| 247 | + self._callFUT(pb, u'str') |
| 248 | + value = pb.string_value |
| 249 | + self.assertEqual(value, u'str') |
| 250 | + |
| 251 | + def test_entity_empty_wo_key(self): |
| 252 | + from gcloud.datastore.entity import Entity |
| 253 | + |
| 254 | + pb = self._makePB() |
| 255 | + entity = Entity() |
| 256 | + self._callFUT(pb, entity) |
| 257 | + value = pb.entity_value |
| 258 | + self.assertEqual(value.key.SerializeToString(), '') |
| 259 | + props = list(value.property) |
| 260 | + self.assertEqual(len(props), 0) |
| 261 | + |
| 262 | + def test_entity_w_key(self): |
| 263 | + from gcloud.datastore.entity import Entity |
| 264 | + from gcloud.datastore.key import Key |
| 265 | + |
| 266 | + pb = self._makePB() |
| 267 | + key = Key(path=[{'kind': 'KIND', 'id': 123}]) |
| 268 | + entity = Entity().key(key) |
| 269 | + entity['foo'] = 'Foo' |
| 270 | + self._callFUT(pb, entity) |
| 271 | + value = pb.entity_value |
| 272 | + self.assertEqual(value.key, key.to_protobuf()) |
| 273 | + props = list(value.property) |
| 274 | + self.assertEqual(len(props), 1) |
| 275 | + self.assertEqual(props[0].name, 'foo') |
| 276 | + self.assertEqual(props[0].value.string_value, 'Foo') |
0 commit comments