Skip to content

Commit 0dbb220

Browse files
committed
Switch bracketed time comparisons to use from_now
1 parent 99423ae commit 0dbb220

File tree

4 files changed

+49
-48
lines changed

4 files changed

+49
-48
lines changed

tests/test_dm.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from sogs.model.user import SystemUser
66
import nacl.bindings as salt
77
from nacl.utils import random
8-
import time
8+
from util import from_now
99

1010

1111
def test_dm_default_empty(client, blind_user):
@@ -71,21 +71,21 @@ def test_dm_send(client, blind_user, blind_user2):
7171
r = sogs_post(client, f'/inbox/{blind_user2.session_id}', post, blind_user)
7272
assert r.status_code == 201
7373
data = r.json
74-
assert -1 < data.pop('posted_at') - time.time() < 1
75-
assert -1 < data.pop('expires_at') - config.DM_EXPIRY - time.time() < 1
74+
assert data.pop('posted_at') == from_now.seconds(0)
75+
assert data.pop('expires_at') == from_now.seconds(config.DM_EXPIRY)
7676
assert data == {k: v for k, v in msg_expected.items() if k != 'message'}
7777

7878
r = sogs_get(client, '/inbox', blind_user2)
7979
assert r.status_code == 200
8080
assert len(r.json) == 1
8181
data = r.json[0]
82-
assert -1 < data.pop('posted_at') - time.time() < 1
83-
assert -1 < data.pop('expires_at') - config.DM_EXPIRY - time.time() < 1
82+
assert data.pop('posted_at') == from_now.seconds(0)
83+
assert data.pop('expires_at') == from_now.seconds(config.DM_EXPIRY)
8484
assert data == msg_expected
8585

8686
r = sogs_get(client, '/outbox', blind_user)
8787
assert len(r.json) == 1
8888
data = r.json[0]
89-
assert -1 < data.pop('posted_at') - time.time() < 1
90-
assert -1 < data.pop('expires_at') - config.DM_EXPIRY - time.time() < 1
89+
assert data.pop('posted_at') == from_now.seconds(0)
90+
assert data.pop('expires_at') == from_now.seconds(config.DM_EXPIRY)
9191
assert data == msg_expected

tests/test_room_routes.py

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -571,7 +571,7 @@ def test_fetch_since(client, room, user, no_rate_limit):
571571
assert post['seqno'] == j
572572
assert utils.decode_base64(post['data']) == f"fake data {j}".encode()
573573
assert utils.decode_base64(post['signature']) == pad64(f"fake sig {j}")
574-
assert -10 <= post['posted'] - time.time() <= 10
574+
assert post['posted'] == from_now.seconds(0, 10)
575575

576576
top_fetched = post['seqno']
577577

@@ -693,7 +693,7 @@ def room_json():
693693
ri = room_json()
694694
assert ri['info_updates'] == 2
695695
assert filter_timestamps(ri['pinned_messages']) == [{'id': 3, 'pinned_by': admin.session_id}]
696-
assert -1 < ri['pinned_messages'][0]['pinned_at'] - time.time() < 1
696+
assert ri['pinned_messages'][0]['pinned_at'] == from_now.now()
697697

698698
url = "/room/test-room/pin/7"
699699
r = sogs_post(client, url, {}, admin)
@@ -752,7 +752,9 @@ def room_json():
752752
{'id': 3, 'pinned_by': admin.session_id},
753753
{'id': 7, 'pinned_by': admin.session_id},
754754
]
755-
assert time.time() - 1 < rpm[0]['pinned_at'] < rpm[1]['pinned_at'] < time.time() + 1
755+
assert rpm[0]['pinned_at'] == from_now.now()
756+
assert rpm[0]['pinned_at'] < rpm[1]['pinned_at']
757+
assert rpm[1]['pinned_at'] == from_now.now()
756758

757759
url = "/room/test-room/unpin/all"
758760
r = sogs_post(client, url, {}, admin)
@@ -776,7 +778,7 @@ def test_posting(client, room, user, user2, mod, global_mod):
776778
'data': d,
777779
'signature': s,
778780
}
779-
assert -1 < p1['posted'] - time.time() < 1
781+
assert p1['posted'] == from_now.now()
780782

781783
url_get = "/room/test-room/messages/since/0"
782784
r = sogs_get(client, url_get, user)
@@ -806,7 +808,7 @@ def test_whisper_to(client, room, user, user2, mod, global_mod):
806808
'whisper_mods': False,
807809
'whisper_to': user2.session_id,
808810
}
809-
assert -1 < msg['posted'] - time.time() < 1
811+
assert msg['posted'] == from_now.now()
810812

811813
url_get = "/room/test-room/messages/since/0"
812814
# user shouldn't get the whisper:
@@ -852,7 +854,7 @@ def test_whisper_mods(client, room, user, user2, mod, global_mod, admin):
852854
'whisper': True,
853855
'whisper_mods': True,
854856
}
855-
assert -1 < msg['posted'] - time.time() < 1
857+
assert msg['posted'] == from_now.now()
856858

857859
url_get = "/room/test-room/messages/since/0"
858860

@@ -972,7 +974,7 @@ def test_edits(client, room, user, user2, mod, global_admin):
972974
'data': d,
973975
'signature': s,
974976
}
975-
assert -1 < p1['posted'] - time.time() < 1
977+
assert p1['posted'] == from_now.now()
976978

977979
url_get = "/room/test-room/messages/since/0"
978980
r = sogs_get(client, url_get, user)
@@ -1000,7 +1002,9 @@ def test_edits(client, room, user, user2, mod, global_admin):
10001002

10011003
r = sogs_get(client, url_get, user)
10021004
assert filter_timestamps(r.json) == filter_timestamps([p1])
1003-
assert time.time() - 1 < r.json[0]['posted'] < r.json[0]['edited'] < time.time() + 1
1005+
assert r.json[0]['posted'] == from_now.now()
1006+
assert r.json[0]['posted'] < r.json[0]['edited']
1007+
assert r.json[0]['edited'] == from_now.now()
10041008
p1['edited'] = r.json[0]['edited']
10051009

10061010
d, s = (utils.encode_base64(x) for x in (b"post 2", pad64("sig 2")))
@@ -1014,7 +1018,7 @@ def test_edits(client, room, user, user2, mod, global_admin):
10141018
'data': d,
10151019
'signature': s,
10161020
}
1017-
assert -1 < p2['posted'] - time.time() < 1
1021+
assert p2['posted'] == from_now.now()
10181022

10191023
d, s = (utils.encode_base64(x) for x in (b"post 1c", pad64("sig 1c")))
10201024
time.sleep(0.001)

tests/test_rooms.py

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from sogs.model.room import Room, get_rooms
55
from sogs.model.file import File
66
from sogs import config
7-
from util import pad64
7+
from util import pad64, from_now
88

99

1010
def test_create(room, room2):
@@ -446,15 +446,14 @@ def test_upload(room, user):
446446

447447
import os
448448

449-
now = time.time()
450449
file = File(id=room.upload_file(content=b'abc', uploader=user, filename="abc.txt", lifetime=30))
451450

452451
assert file.id
453452
assert file.room.id and file.room.id == room.id
454453
assert file.uploader.id and file.uploader.id == user.id
455454
assert file.size == 3
456-
assert now - 1 < file.uploaded < now + 1
457-
assert now - 1 < file.expiry - 30 < now + 1
455+
assert file.uploaded == from_now.now()
456+
assert file.expiry == from_now.seconds(30)
458457
assert os.path.isfile(file.path)
459458
assert os.path.getsize(file.path) == file.size
460459
assert file.path == f'{config.UPLOAD_PATH}/{room.token}/{file.id}_abc.txt'
@@ -466,8 +465,8 @@ def test_upload(room, user):
466465
assert file.room.id and file.room.id == room.id
467466
assert file.uploader.id and file.uploader.id == user.id
468467
assert file.size == 4
469-
assert now - 1 < file.uploaded < now + 1
470-
assert now - 1 < file.expiry - 15 * 86400 < now + 1
468+
assert file.uploaded == from_now.now()
469+
assert file.expiry == from_now.days(15)
471470
assert os.path.isfile(file.path)
472471
assert os.path.getsize(file.path) == file.size
473472
assert file.path == f'{config.UPLOAD_PATH}/{room.token}/{file.id}_(unnamed)'
@@ -478,13 +477,11 @@ def test_upload_expiry(room, user):
478477

479478
import os
480479

481-
now = time.time()
482-
now = time.time()
483480
file = File(id=room.upload_file(content=b'abc', uploader=user, filename="abc.txt", lifetime=-1))
484481

485482
assert file.id
486-
assert now - 1 < file.uploaded < now + 1
487-
assert now - 2 < file.expiry < now
483+
assert file.uploaded == from_now.now()
484+
assert file.expiry == from_now.seconds(-1)
488485
assert os.path.isfile(file.path)
489486
assert os.path.getsize(file.path) == file.size
490487
assert file.path == f'{config.UPLOAD_PATH}/{room.token}/{file.id}_abc.txt'
@@ -562,19 +559,15 @@ def test_pinning(room, room2, user, mod, admin, global_admin, no_rate_limit):
562559
room.pin(msgs[5]['id'], admin)
563560
assert msgs[5]['id'] == 6
564561

565-
assert -1 < room.pinned_messages[0]['pinned_at'] - time.time() < 1
566-
del room.pinned_messages[0]['pinned_at']
562+
assert room.pinned_messages[0].pop('pinned_at') == from_now.now()
567563
assert room.pinned_messages == [{"id": 6, "pinned_by": admin.session_id}]
568564

569565
time.sleep(0.001)
570566

571567
room.pin(7, global_admin)
572-
assert (
573-
time.time() - 1
574-
< room.pinned_messages[0]['pinned_at']
575-
< room.pinned_messages[1]['pinned_at']
576-
< time.time() + 1
577-
)
568+
assert room.pinned_messages[0]['pinned_at'] == from_now.now()
569+
assert room.pinned_messages[0]['pinned_at'] < room.pinned_messages[1]['pinned_at']
570+
assert room.pinned_messages[1]['pinned_at'] == from_now.now()
578571
old_ts_t = room.pinned_messages[1]['pinned_at']
579572
rpm = room.pinned_messages.copy()
580573
for pm in rpm:
@@ -588,12 +581,9 @@ def test_pinning(room, room2, user, mod, admin, global_admin, no_rate_limit):
588581
# Re-pin (will update its pinned timestamp and thus implicit reorder, along with pinned_by)
589582
room.pin(6, global_admin)
590583

591-
assert (
592-
time.time() - 1
593-
< room.pinned_messages[0]['pinned_at']
594-
< room.pinned_messages[1]['pinned_at']
595-
< time.time() + 1
596-
)
584+
assert room.pinned_messages[0]['pinned_at'] == from_now.now()
585+
assert room.pinned_messages[0]['pinned_at'] < room.pinned_messages[1]['pinned_at']
586+
assert room.pinned_messages[1]['pinned_at'] == from_now.now()
597587
assert old_ts_t == room.pinned_messages[0]['pinned_at']
598588
rpm = room.pinned_messages.copy()
599589
for pm in rpm:

tests/util.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,20 +35,27 @@ def __repr__(self):
3535

3636
class from_now:
3737
@staticmethod
38-
def seconds(n):
39-
return FuzzyTime(n)
38+
def seconds(n, epsilon=None):
39+
f = FuzzyTime(n)
40+
if epsilon is not None:
41+
f.epsilon = epsilon
42+
return f
4043

4144
@staticmethod
42-
def minutes(n):
43-
return from_now.seconds(60) * n
45+
def now(epsilon=None):
46+
return from_now.seconds(0, epsilon)
4447

4548
@staticmethod
46-
def hours(n):
47-
return from_now.minutes(60) * n
49+
def minutes(n, epsilon=None):
50+
return from_now.seconds(60, epsilon) * n
4851

4952
@staticmethod
50-
def days(n):
51-
return from_now.hours(24) * n
53+
def hours(n, epsilon=None):
54+
return from_now.minutes(60, epsilon) * n
55+
56+
@staticmethod
57+
def days(n, epsilon=None):
58+
return from_now.hours(24, epsilon) * n
5259

5360

5461
@contextmanager

0 commit comments

Comments
 (0)