deploy ProspectOS workspace final

This commit is contained in:
Marco0300
2026-09-06 17:16:09 +02:00
parent eeffaf4b6c
commit 7250f6d521
10 changed files with 1151 additions and 81 deletions
+16
View File
@@ -17,6 +17,8 @@ class BrowserOnlyAppTests(unittest.TestCase):
self.tmp = tempfile.NamedTemporaryFile(delete=False)
self.tmp.close()
server.DB_PATH = self.tmp.name
self.auth_required = server.AUTH_REQUIRED
server.AUTH_REQUIRED = False
self.scan_patcher = patch("api.server.scan_website", return_value={"website_status": "healthy", "website_http_status": 200, "website_final_url": "", "website_latency_ms": 50, "website_https": 1, "website_title": "", "website_technology": "", "website_has_viewport": 1, "website_tls_expires_at": "", "website_checked_at": server.now(), "website_error": "", "website_emails": [], "email_evidence": []})
self.scan_patcher.start()
self.http = server.ThreadingHTTPServer(("127.0.0.1", 0), server.Handler)
@@ -25,6 +27,7 @@ class BrowserOnlyAppTests(unittest.TestCase):
self.conn = HTTPConnection("127.0.0.1", self.http.server_port)
def tearDown(self):
server.AUTH_REQUIRED = self.auth_required
self.scan_patcher.stop()
self.http.shutdown(); self.http.server_close(); self.thread.join(1)
try: os.unlink(self.tmp.name)
@@ -294,6 +297,19 @@ class BrowserOnlyAppTests(unittest.TestCase):
saved = server.db().execute("SELECT ai_promotion_id FROM prospects WHERE id=1").fetchone()
self.assertEqual(saved[0], promotion["id"])
@patch("api.server.ai_assess_prospect", return_value={"ai_probability": 88, "ai_recommendation": "contact", "ai_reasoning": "Active business with a broken site."})
def test_workspace_workflow_and_assessment_history(self, assess):
with patch("api.server.google_search", return_value=[{"name": "Acme", "website": "https://acme.co.za", "domain": "acme.co.za"}]):
_, run = self.request("POST", "/api/discover", {"category": "plumbers", "keywords": "plumbing", "location": "Cape Town"})
self.wait_for_run(run["id"])
conn = server.db(); conn.execute("INSERT INTO users(organization_id,email,name,password_hash,role,active,created_at,updated_at) VALUES(?,?,?,?,?,?,?,?)", (1, "reviewer@example.com", "Reviewer", "", "reviewer", 1, server.now(), server.now())); conn.commit(); user_id = conn.execute("SELECT id FROM users WHERE email='reviewer@example.com'").fetchone()[0]; conn.close()
status, note = self.request("POST", "/api/prospects/1/notes", {"body": "Call after reviewing the website."}); self.assertEqual(status, 201)
status, task = self.request("POST", "/api/prospects/1/tasks", {"title": "Send tailored draft", "due_at": "2030-01-01"}); self.assertEqual(status, 201)
status, assigned = self.request("POST", "/api/prospects/1/assignment", {"assigned_user_id": user_id}); self.assertEqual(status, 200); self.assertEqual(assigned["assigned_user_id"], user_id)
status, body = self.request("POST", "/api/prospects/1/assess", {}); self.assertEqual(status, 200); self.assertEqual(body["ai_probability"], 88)
status, history = self.request("GET", "/api/prospects/1/history"); self.assertEqual(status, 200); self.assertTrue(history["score_history"]); self.assertTrue(history["ai_history"])
status, tasks = self.request("GET", "/api/prospects/1/tasks"); self.assertEqual(status, 200); self.assertEqual(tasks["items"][0]["title"], "Send tailored draft")
if __name__ == "__main__":
unittest.main()