Files
MarketingTool/apps/api/tests/test_api.py
T

56 lines
2.5 KiB
Python

import json
import threading
import unittest
from http.client import HTTPConnection
from tempfile import TemporaryDirectory
from app.main import create_server
class ApiSmokeTests(unittest.TestCase):
def setUp(self):
self.tmp = TemporaryDirectory()
self.server = create_server("127.0.0.1", 0, self.tmp.name + "/test.db")
self.thread = threading.Thread(target=self.server.serve_forever, daemon=True)
self.thread.start()
self.conn = HTTPConnection("127.0.0.1", self.server.server_port, timeout=3)
def tearDown(self):
self.server.shutdown()
self.server.server_close()
self.thread.join(timeout=2)
self.tmp.cleanup()
def request(self, method, path, payload=None):
body = json.dumps(payload).encode() if payload is not None else None
self.conn.request(method, path, body, {"Content-Type": "application/json"} if body else {})
response = self.conn.getresponse()
return response.status, json.loads(response.read())
def test_health_create_get_summary_and_import_preview(self):
self.assertEqual(self.request("GET", "/api/v1/health/live")[0], 200)
status, created = self.request("POST", "/api/v1/businesses", {"name": "Acme", "website": "https://acme.co.za", "email": "a@acme.co.za"})
self.assertEqual(status, 201)
self.assertEqual(created["organization_id"], "demo-tenant")
status, fetched = self.request("GET", "/api/v1/businesses/" + str(created["id"]))
self.assertEqual(status, 200)
self.assertEqual(fetched["name"], "Acme")
status, summary = self.request("GET", "/api/v1/dashboard/summary")
self.assertEqual(status, 200)
self.assertEqual(summary["businesses"], 1)
status, preview = self.request("POST", "/api/v1/imports/preview", {"rows": [{"name": "Acme", "website": "https://acme.co.za"}, {"name": "New Co"}]})
self.assertEqual(status, 200)
self.assertEqual(preview["accepted"], 1)
self.assertEqual(preview["duplicates"], 1)
def test_suppression_blocks_new_business(self):
status, _ = self.request("POST", "/api/v1/suppressions", {"kind": "domain", "value": "blocked.co.za"})
self.assertEqual(status, 201)
status, response = self.request("POST", "/api/v1/businesses", {"name": "Blocked", "website": "https://blocked.co.za"})
self.assertEqual(status, 409)
self.assertEqual(response["error"], "suppressed")
if __name__ == "__main__":
unittest.main()