fix(downloads): a suspended user's queued jobs wait, and a clip too big for the space left says so
A suspension now blocks the user's downloads as quota.resolve already advised: the worker leaves their queued jobs unclaimed until it is lifted (the confirm says so). A cut clip larger than the remaining storage is refused with its own message (not "storage is full"), and a clip's quota refusal reads as a clip's in both languages. The cancel poll compares to JobStatus.RUNNING.
This commit is contained in:
@@ -696,9 +696,10 @@ def test_a_clip_larger_than_what_its_owner_has_left_is_refused_and_not_placed(
|
||||
job = _clip(as_user(make_user()), source=source, ref=ref).json()
|
||||
monkeypatch.setattr(quota, "remaining_bytes", lambda _db, _uid: 3) # the cut is 4 bytes
|
||||
job, asset = worker["run"](job)
|
||||
# Not "full": there is room left, just not this much.
|
||||
assert (job.status, job.error, asset.status, asset.rel_path) == (
|
||||
"error",
|
||||
dlerrors.QUOTA_FULL_MESSAGE,
|
||||
dlerrors.CLIP_TOO_BIG_MESSAGE,
|
||||
"pending",
|
||||
None,
|
||||
)
|
||||
|
||||
@@ -63,6 +63,7 @@ def test_our_own_worker_refusals_classify_as_themselves():
|
||||
# fragment of the text. Pinning message and rule together is what stops an edit to the wording
|
||||
# from silently orphaning the category — the UI would then fall back to "Download failed".
|
||||
assert classify(dlerrors.QUOTA_FULL_MESSAGE) == "quota_exceeded"
|
||||
assert classify(dlerrors.CLIP_TOO_BIG_MESSAGE) == "quota_exceeded"
|
||||
|
||||
|
||||
def test_the_redacted_network_text_classifies_back_to_network():
|
||||
|
||||
@@ -155,6 +155,25 @@ def test_unlimited_user_is_never_excluded(db):
|
||||
assert _claim_job() == q.id
|
||||
|
||||
|
||||
def test_a_suspended_users_queued_jobs_wait(db):
|
||||
# Suspending a user blocks their downloads (quota.resolve's advice): a job they queued before
|
||||
# stays queued, unclaimed, and runs once the suspension is lifted.
|
||||
s = User(email="suspended@example.com", is_suspended=True)
|
||||
o = User(email="other@example.com")
|
||||
db.add_all([s, o])
|
||||
db.flush()
|
||||
waits = _job(db, s.id, queue_pos=1)
|
||||
served = _job(db, o.id, queue_pos=2)
|
||||
db.commit()
|
||||
assert _claim_job() == served.id
|
||||
assert _claim_job() is None
|
||||
db.expire_all()
|
||||
assert db.get(DownloadJob, waits.id).status == "queued"
|
||||
db.get(User, s.id).is_suspended = False
|
||||
db.commit()
|
||||
assert _claim_job() == waits.id
|
||||
|
||||
|
||||
# --- #3 · list cap --------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user