@@ -87,6 +87,7 @@ async def fake_fetch_user_stats(*, start, end, hashtag, tags, limit, offset):
8787 "poi_modify" : 1 ,
8888 "map_changes" : 58 ,
8989 "rank" : 1 ,
90+ "hashtags" : ["#mapathon" , "#roads" ],
9091 "tag_stats" : {"building" : {"yes" : {"c" : 3 , "m" : 0 }}},
9192 }
9293 ]
@@ -130,6 +131,7 @@ async def fake_fetch_user_stats(*, start, end, hashtag, tags, limit, offset):
130131 "poi_modify" : 1 ,
131132 "map_changes" : 58 ,
132133 "rank" : 1 ,
134+ "hashtags" : ["#mapathon" , "#roads" ],
133135 "tag_stats" : {"building" : {"yes" : {"c" : 3 , "m" : 0 , "len" : None }}},
134136 }
135137 ],
@@ -171,6 +173,7 @@ async def fake_fetch_user_stats(*, tags, **_kwargs):
171173 "poi_modify" : 0 ,
172174 "map_changes" : 0 ,
173175 "rank" : 1 ,
176+ "hashtags" : [],
174177 "tag_stats" : None ,
175178 }
176179 ]
@@ -192,6 +195,7 @@ def test_user_stats_sql_omits_tag_ctes_when_tags_false():
192195 assert "tag_per_user" in sql_with
193196 assert "tag_per_user" not in sql_without
194197 assert "NULL::jsonb AS tag_stats" in sql_without
198+ assert "user_hashtags" in sql_without
195199
196200
197201def _seed_pg_via_to_psql (fresh_db , populated_db_factory , dsn ):
@@ -268,6 +272,8 @@ def test_live_api_stats_default_returns_dicts_not_strings(live_api_client):
268272 assert body ["count" ] == 2
269273 by_name = {u ["name" ]: u for u in body ["users" ]}
270274 assert isinstance (by_name ["alice" ]["tag_stats" ], dict )
275+ assert by_name ["alice" ]["hashtags" ] == ["#mapathon" ]
276+ assert by_name ["bob" ]["hashtags" ] == []
271277 assert by_name ["alice" ]["tag_stats" ]["building" ]["yes" ]["c" ] == 5
272278 assert by_name ["alice" ]["tag_stats" ]["building" ]["yes" ]["m" ] == 1
273279 assert by_name ["alice" ]["tag_stats" ]["highway" ]["residential" ]["len" ] == 245.7
@@ -318,6 +324,7 @@ def test_live_api_stats_hashtag_filters_to_matching_changesets(live_api_client):
318324 assert body ["hashtag" ] == ["#mapathon" ]
319325 names = {u ["name" ] for u in body ["users" ]}
320326 assert names == {"alice" }
327+ assert body ["users" ][0 ]["hashtags" ] == ["#mapathon" ]
321328
322329
323330@pytest .mark .network
@@ -448,6 +455,7 @@ def test_user_stats_sql_no_filter_skips_changesets_join():
448455 assert "filtered_changesets" not in sql
449456 assert "JOIN filtered_changesets" not in sql
450457 assert "stats_scope AS (SELECT * FROM changeset_stats)" in sql
458+ assert "LEFT JOIN user_hashtags" in sql
451459
452460
453461def test_user_stats_sql_filtered_uses_changesets_join ():
0 commit comments