add operator review workflow
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
import sqlite3
|
||||
try:
|
||||
from test_api import ApiSmokeTests
|
||||
except ModuleNotFoundError:
|
||||
from tests.test_api import ApiSmokeTests
|
||||
|
||||
|
||||
class OperatorWorkflowTests(ApiSmokeTests):
|
||||
def test_saved_filter_round_trip_update_delete_and_bounds(self):
|
||||
status, saved = self.request("POST", "/api/v1/saved-filters", {"name": "Hot", "filters": {"score_min": 70, "website_state": "business_site"}})
|
||||
self.assertEqual(status, 201)
|
||||
self.assertEqual(saved["filters"]["score_min"], 70)
|
||||
fid = saved["id"]
|
||||
status, listing = self.request("GET", "/api/v1/saved-filters")
|
||||
self.assertEqual(status, 200)
|
||||
self.assertEqual(listing["items"][0]["name"], "Hot")
|
||||
self.assertEqual(self.request("PATCH", f"/api/v1/saved-filters/{fid}", {"filters": {"priority": "high"}})[0], 200)
|
||||
self.assertEqual(self.request("DELETE", f"/api/v1/saved-filters/{fid}")[0], 200)
|
||||
self.assertEqual(self.request("POST", "/api/v1/saved-filters", {"name": "Bad", "filters": {"x": ["a"] * 51}})[0], 400)
|
||||
|
||||
def test_review_queue_filters_flags_suppression_and_bulk_is_atomic(self):
|
||||
_, first = self.request("POST", "/api/v1/businesses", {"name": "Queue One", "website": "https://queue-one.test", "email": "one@queue.test"})
|
||||
_, second = self.request("POST", "/api/v1/businesses", {"name": "Queue Two", "website": "https://queue-two.test"})
|
||||
self.assertEqual(self.request("POST", "/api/v1/suppressions", {"kind": "domain", "value": "queue-one.test"})[0], 201)
|
||||
status, queue = self.request("GET", "/api/v1/review-queue?review_status=pending&website_state=business_site&page_size=10")
|
||||
self.assertEqual(status, 200)
|
||||
flagged = next(x for x in queue["items"] if x["id"] == first["id"])
|
||||
self.assertTrue(flagged["suppressed"])
|
||||
self.assertFalse(flagged["outreach_eligible"])
|
||||
self.assertEqual(self.request("POST", "/api/v1/businesses/bulk-review", {"ids": [first["id"], second["id"]], "action": "verify"})[0], 200)
|
||||
status, queue = self.request("GET", "/api/v1/review-queue?review_status=verified&page_size=10")
|
||||
self.assertEqual(status, 200)
|
||||
self.assertEqual({x["id"] for x in queue["items"]}, {first["id"], second["id"]})
|
||||
self.assertFalse(next(x for x in queue["items"] if x["id"] == first["id"])["outreach_eligible"])
|
||||
self.assertEqual(self.request("POST", "/api/v1/businesses/bulk-review", {"ids": [first["id"]] * 101, "action": "reject"})[0], 400)
|
||||
db = sqlite3.connect(self.db_path)
|
||||
self.assertEqual(db.execute("SELECT COUNT(*) FROM audit_log WHERE action='businesses.bulk_review'").fetchone()[0], 1)
|
||||
db.close()
|
||||
|
||||
def test_dashboard_operator_counts_and_clickable_metadata(self):
|
||||
self.request("POST", "/api/v1/businesses", {"name": "Dashboard New", "website": "https://dash.test"})
|
||||
status, summary = self.request("GET", "/api/v1/dashboard/summary")
|
||||
self.assertEqual(status, 200)
|
||||
self.assertEqual(summary["counts"]["new"], 1)
|
||||
for key in ("new", "hot", "review", "source_health", "active_jobs"):
|
||||
self.assertIn(key, summary["clickable_filters"])
|
||||
self.assertEqual(summary["clickable_filters"][key]["count"], summary["counts"][key])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import unittest
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user