deploy Maps-backed ProspectOS workspace
This commit is contained in:
+27
-3
@@ -2,6 +2,7 @@ import json
|
||||
import os
|
||||
import tempfile
|
||||
import threading
|
||||
import time
|
||||
import unittest
|
||||
from http.client import HTTPConnection
|
||||
from unittest.mock import patch
|
||||
@@ -30,22 +31,45 @@ class BrowserOnlyAppTests(unittest.TestCase):
|
||||
response = self.conn.getresponse()
|
||||
return response.status, json.loads(response.read() or b"{}")
|
||||
|
||||
def wait_for_run(self, run_id):
|
||||
for _ in range(50):
|
||||
status, body = self.request("GET", f"/api/runs/{run_id}")
|
||||
self.assertEqual(status, 200)
|
||||
if body["status"] not in {"queued", "running"}:
|
||||
return body
|
||||
time.sleep(0.01)
|
||||
self.fail("run did not finish")
|
||||
|
||||
def test_search_redirect_links_are_unwrapped(self):
|
||||
wrapped = "https://duckduckgo.com/l/?uddg=https%3A%2F%2Fwww.example.co.za%2Fservices"
|
||||
self.assertEqual(server.normalize_result_href(wrapped), "https://www.example.co.za/services")
|
||||
self.assertEqual(server.normalize_result_href("//example.co.za/about"), "https://example.co.za/about")
|
||||
|
||||
@patch.dict(os.environ, {"DISCOVERY_BACKEND": "browser"})
|
||||
@patch("api.server.google_search", return_value=[{"name": "Acme Plumbing", "website": "https://www.acme.co.za", "domain": "acme.co.za"}, {"name": "Other", "website": "https://other.co.za", "domain": "other.co.za"}])
|
||||
def test_discovery_filters_catalogued_root_domains(self, search):
|
||||
status, first = self.request("POST", "/api/discover", {"category": "plumbers", "keywords": "plumbing", "location": "Cape Town", "max_results": 5})
|
||||
self.assertEqual(status, 201); self.assertEqual(first["added"], 2)
|
||||
self.assertEqual(status, 202)
|
||||
first = self.wait_for_run(first["id"])
|
||||
self.assertEqual(first["added"], 2)
|
||||
status, second = self.request("POST", "/api/discover", {"category": "plumbers", "keywords": "plumbing", "location": "Cape Town", "max_results": 5})
|
||||
self.assertEqual(status, 201); self.assertEqual(second["found"], 2); self.assertEqual(second["added"], 0)
|
||||
self.assertEqual(status, 202)
|
||||
second = self.wait_for_run(second["id"])
|
||||
self.assertEqual(second["found"], 2); self.assertEqual(second["added"], 0)
|
||||
self.assertEqual(self.request("GET", "/api/prospects")[1]["total"], 2)
|
||||
|
||||
@patch.dict(os.environ, {"DISCOVERY_BACKEND": "browser"})
|
||||
def test_map_without_website_gets_stable_catalogue_key(self):
|
||||
mapped = server.map_gmaps_result({"title": "A Local Plumber", "place_id": "abc123", "address": "Cape Town", "phone": "+27 10", "review_rating": 4.5, "review_count": 12}, "plumbers Cape Town")
|
||||
self.assertEqual(mapped["domain"], "maps:abc123")
|
||||
self.assertEqual(mapped["website_status"], "missing")
|
||||
self.assertGreaterEqual(mapped["opportunity_score"], 70)
|
||||
|
||||
@patch.dict(os.environ, {"DISCOVERY_BACKEND": "browser"})
|
||||
def test_review_updates_only_selected_prospect(self):
|
||||
with patch("api.server.google_search", return_value=[{"name": "Acme", "website": "https://acme.co.za", "domain": "acme.co.za"}]):
|
||||
self.request("POST", "/api/discover", {"category": "plumbers", "keywords": "plumbing", "location": "South Africa"})
|
||||
_, run = self.request("POST", "/api/discover", {"category": "plumbers", "keywords": "plumbing", "location": "South Africa"})
|
||||
self.wait_for_run(run["id"])
|
||||
status, item = self.request("PATCH", "/api/prospects/1/review", {"status": "approved", "notes": "Looks relevant"})
|
||||
self.assertEqual(status, 200); self.assertEqual(item["review_status"], "approved")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user