Skip to content

Commit 5c0976a

Browse files
greenrobotdan-obx
authored andcommitted
Box tests: add test_datetime_special_values() and some clean up #29
1 parent e625664 commit 5c0976a

3 files changed

Lines changed: 53 additions & 13 deletions

File tree

objectbox/box.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ def get_all(self) -> list:
141141
finally:
142142
obx_bytes_array_free(c_bytes_array_p)
143143

144-
def remove(self, id_or_object):
144+
def remove(self, id_or_object) -> bool:
145145
if isinstance(id_or_object, self._entity.cls):
146146
id = self._entity.get_object_id(id_or_object)
147147
else:

tests/test_box.py

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -75,22 +75,24 @@ def test_box_basics():
7575

7676
# read again
7777
read = box.get(object.id)
78-
assert (floor(read.date.timestamp() * 1000) == object.date)
79-
assert (read.date_nano == floor(object.date_nano * 1000000000))
78+
assert read.str == "bar"
79+
assert floor(read.date.timestamp() * 1000) == object.date
80+
assert read.date_nano == floor(object.date_nano * 1000000000)
8081

8182
# remove
82-
box.remove(object)
83+
success = box.remove(object)
84+
assert success
8385

8486
# remove should return success
8587
success = box.remove(1)
86-
assert success == True
88+
assert success
8789
success = box.remove(1)
88-
assert success == False
90+
assert success is False
8991

9092
# check they're gone
9193
assert box.count() == 0
92-
assert box.get(object.id) == None
93-
assert box.get(1) == None
94+
assert box.get(object.id) is None
95+
assert box.get(1) is None
9496

9597
store.close()
9698

@@ -164,7 +166,6 @@ def test_datetime():
164166
assert pytest.approx(read.date) == object.date.timestamp()
165167

166168
# update
167-
object.str = "bar"
168169
object.date = datetime.utcnow()
169170
object.date_nano = datetime.utcnow()
170171
id = box.put(object)
@@ -173,19 +174,48 @@ def test_datetime():
173174
# read again
174175
read = box.get(object.id)
175176
assert pytest.approx(read.date) == object.date.timestamp()
177+
assert pytest.approx(read.date_nano.timestamp()) == object.date_nano.timestamp()
176178

177179
# remove
178180
success = box.remove(object)
179-
assert success == True
181+
assert success
180182

181183
# check they're gone
182184
assert box.count() == 0
183-
assert box.get(object.id) == None
184-
assert box.get(1) == None
185+
assert box.get(object.id) is None
186+
assert box.get(1) is None
185187

186188
store.close()
187189

188190

191+
def test_datetime_special_values():
192+
store = load_empty_test_datetime_store()
193+
box = store.box(TestEntityDatetime)
194+
assert box.is_empty()
195+
196+
object = TestEntityDatetime()
197+
object.date = 0
198+
object.date_nano = 0.0
199+
id = box.put(object)
200+
assert object.id == id
201+
202+
read = box.get(id)
203+
assert isinstance(read.date, float)
204+
assert read.date == 0.0
205+
assert isinstance(read.date_nano, datetime)
206+
assert read.date_nano == datetime.fromtimestamp(0, timezone.utc)
207+
208+
object.date = datetime.fromtimestamp(1.0, timezone.utc)
209+
object.date_nano = datetime.fromtimestamp(1.0)
210+
id = box.put(object)
211+
212+
read = box.get(id)
213+
assert isinstance(read.date, float)
214+
assert read.date == 1.0
215+
assert isinstance(read.date_nano, datetime)
216+
assert read.date_nano == datetime.fromtimestamp(1.0, timezone.utc)
217+
218+
189219
def test_flex():
190220
def test_put_get(object: TestEntity, box: objectbox.Box, property):
191221
object.flex = property

tests/test_utils.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import sys
12
from datetime import timezone, datetime, timedelta
23

34
import pytest
@@ -11,7 +12,16 @@ def test_date_value_to_int__basics():
1112
assert _Entity.date_value_to_int(1234, 1000000000) == 1234
1213
assert _Entity.date_value_to_int(1234.0, 1000) == 1234000 # milliseconds
1314
assert _Entity.date_value_to_int(1234.0, 1000000000) == 1234000000000 # nanoseconds
14-
assert _Entity.date_value_to_int(datetime.fromtimestamp(1234), 1000) == 1234000 # milliseconds
15+
dt = datetime.fromtimestamp(1234)
16+
if sys.platform == "win32":
17+
try:
18+
dt.timestamp()
19+
assert False, "Expected OSError"
20+
except OSError as e:
21+
assert e.errno == 22
22+
else:
23+
assert dt.timestamp() == 1234
24+
assert _Entity.date_value_to_int(dt, 1000) == 1234000 # milliseconds
1525

1626

1727
def test_date_value_to_int__timezone():

0 commit comments

Comments
 (0)