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

1import json 

2from math import sqrt 

3 

4import pytest 

5from google.protobuf import empty_pb2 

6 

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) 

19 

20 

21@pytest.fixture(autouse=True) 

22def _(testconfig): 

23 pass 

24 

25 

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() 

32 

33 # these are hardcoded in test_fixtures 

34 test_user_coordinates = [-73.9740, 40.7108] 

35 

36 with session_scope() as session: 

37 queue_job(session, "update_randomized_locations", empty_pb2.Empty()) 

38 

39 process_jobs() 

40 

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 } 

71 

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