fix: harden week-two ordering, artwork and operations
This commit is contained in:
60
tests/quote_pagination_test.py
Normal file
60
tests/quote_pagination_test.py
Normal file
@@ -0,0 +1,60 @@
|
||||
"""The 101st pending quote and older approved quotes remain reachable on the board."""
|
||||
from uuid import uuid4
|
||||
from urllib.parse import urlencode
|
||||
|
||||
from psycopg.types.json import Jsonb
|
||||
|
||||
from app.core import db
|
||||
from tests.smoke_test import Client
|
||||
|
||||
|
||||
def run():
|
||||
owner = uuid4()
|
||||
pending_ids = [uuid4() for _ in range(105)]
|
||||
approved_ids = [uuid4() for _ in range(22)]
|
||||
created = pending_ids + approved_ids
|
||||
draft = {'customer': {'mail': 'pagination-fixture@example.test'},
|
||||
'items': [], 'freight': {'service': 'pickup'}}
|
||||
try:
|
||||
with db.connect() as c:
|
||||
for uid in pending_ids:
|
||||
c.execute('''INSERT INTO dtf_local.quotes
|
||||
(id,owner,request_key,request_hash,draft,created_at)
|
||||
VALUES(%s,%s,%s,%s,%s,now()+interval '1 hour')''',
|
||||
(uid, owner, uuid4(), 'pagination-fixture', Jsonb(draft)))
|
||||
for uid in approved_ids:
|
||||
c.execute('''INSERT INTO dtf_local.quotes
|
||||
(id,owner,request_key,request_hash,draft,approved,approved_at,created_at)
|
||||
VALUES(%s,%s,%s,%s,%s,%s,now(),now()+interval '1 hour')''',
|
||||
(uid, owner, uuid4(), 'pagination-fixture', Jsonb(draft),
|
||||
Jsonb({'items': [], 'total_cents': 0})))
|
||||
|
||||
client = Client()
|
||||
board = client.call('/operator/board', operator=True)
|
||||
assert board['pending_total'] >= 105
|
||||
assert board['approved_total'] >= 22
|
||||
for kind, fixture_ids in [('pending', pending_ids), ('approved', approved_ids)]:
|
||||
first = [q for q in board['quotes'] if (q['approved'] is None) == (kind == 'pending')]
|
||||
seen = {q['id'] for q in first}
|
||||
assert len(first) == (100 if kind == 'pending' else 20)
|
||||
last = first[-1]
|
||||
for _ in range(5):
|
||||
path = '/operator/quotes?' + urlencode({
|
||||
'kind': kind, 'limit': 50,
|
||||
'before_created_at': last['created_at'], 'before_id': last['id']})
|
||||
page = client.call(path, operator=True)
|
||||
assert page['quotes'], 'An older quote page disappeared'
|
||||
assert not seen.intersection(q['id'] for q in page['quotes']), 'Quote page repeated rows'
|
||||
seen.update(q['id'] for q in page['quotes'])
|
||||
if set(map(str, fixture_ids)) <= seen:
|
||||
break
|
||||
last = page['quotes'][-1]
|
||||
assert set(map(str, fixture_ids)) <= seen, f'{kind} quotes were hidden by the board limit'
|
||||
print('PASS: 105 pending and 22 approved quotes remain reachable across board pages')
|
||||
finally:
|
||||
with db.connect() as c:
|
||||
c.execute('DELETE FROM dtf_local.quotes WHERE id=ANY(%s)', (created,))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
run()
|
||||
Reference in New Issue
Block a user