Coverage for src/tests/test_public.py: 100%
35 statements
« prev ^ index » next coverage.py v7.6.10, created at 2025-06-02 01:08 +0000
« prev ^ index » next coverage.py v7.6.10, created at 2025-06-02 01:08 +0000
1import json
2from math import sqrt
4import pytest
5from google.protobuf import empty_pb2
7from couchers.db import session_scope
8from couchers.jobs.enqueue import queue_job
9from couchers.models import (
10 ProfilePublicVisibility,
11)
12from tests.test_fixtures import ( # noqa
13 db,
14 generate_user,
15 process_jobs,
16 public_session,
17 testconfig,
18)
21@pytest.fixture(autouse=True)
22def _(testconfig):
23 pass
26def test_GetPublicMapLayer(db):
27 user1, _ = generate_user()
28 user2, _ = generate_user(username="user2", public_visibility=ProfilePublicVisibility.nothing)
29 user3, _ = generate_user()
30 user4, _ = generate_user(username="user4", public_visibility=ProfilePublicVisibility.limited)
31 user5, _ = generate_user()
33 # these are hardcoded in test_fixtures
34 test_user_coordinates = [-73.9740, 40.7108]
36 with session_scope() as session:
37 queue_job(session, "update_randomized_locations", empty_pb2.Empty())
39 process_jobs()
41 with public_session() as public:
42 http_body = public.GetPublicUsers(empty_pb2.Empty())
43 assert http_body.content_type == "application/json"
44 data = json.loads(http_body.data)
45 print(data)
46 assert data == {
47 "type": "FeatureCollection",
48 "features": [
49 {
50 "type": "Feature",
51 "geometry": {"type": "Point", "coordinates": [-73.974, 40.7108]},
52 "properties": {"username": "user4"},
53 },
54 {
55 "type": "Feature",
56 "geometry": {"type": "Point", "coordinates": [-73.928380198, 40.729706144]},
57 "properties": {"username": None},
58 },
59 {
60 "type": "Feature",
61 "geometry": {"type": "Point", "coordinates": [-74.042643848, 40.706241098]},
62 "properties": {"username": None},
63 },
64 {
65 "type": "Feature",
66 "geometry": {"type": "Point", "coordinates": [-73.955417734, 40.691831306]},
67 "properties": {"username": None},
68 },
69 ],
70 }
72 for user in data["features"]:
73 coords = user["geometry"]["coordinates"]
74 if user["properties"]["username"]:
75 assert coords == test_user_coordinates
76 else:
77 xdiff = coords[0] - test_user_coordinates[0]
78 ydiff = coords[1] - test_user_coordinates[1]
79 dist = sqrt(xdiff**2 + ydiff**2)
80 assert dist > 0.02 and dist < 0.1