@@ -1178,6 +1178,37 @@ def test_copytrack_fetch(self, runner, data_dir, httpx_mock):
11781178 assert data ["data" ]["trades_fetched" ] == 1
11791179 assert data ["data" ]["redeems_fetched" ] == 0
11801180
1181+ def test_copytrack_fetch_username_resolution (self , runner , data_dir , httpx_mock ):
1182+ """Cover username resolution path in copytrack_fetch (line 929)."""
1183+ _invoke (runner , ["init" ], data_dir )
1184+ httpx_mock .add_response (
1185+ url = "https://polymarket.com/@testuser" ,
1186+ text = '<script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"address":"0xresolved"}}}</script>' ,
1187+ )
1188+ httpx_mock .add_response (
1189+ url = "https://data-api.polymarket.com/activity?user=0xresolved&type=TRADE&limit=500&sortBy=TIMESTAMP&sortDirection=DESC" ,
1190+ json = [],
1191+ )
1192+ httpx_mock .add_response (
1193+ url = "https://data-api.polymarket.com/activity?user=0xresolved&type=REDEEM&limit=500&sortBy=TIMESTAMP&sortDirection=DESC" ,
1194+ json = [],
1195+ )
1196+ result = _invoke (runner , ["copytrack" , "fetch" , "@testuser" ], data_dir )
1197+ data = _parse (result )
1198+ assert data ["ok" ] is True
1199+ assert data ["data" ]["trades_fetched" ] == 0
1200+
1201+ def test_copytrack_fetch_error (self , runner , data_dir , httpx_mock ):
1202+ """Cover the SimError catch in copytrack_fetch (lines 937-939)."""
1203+ httpx_mock .add_response (
1204+ url = "https://polymarket.com/@baduser" ,
1205+ text = "<html>no data</html>" ,
1206+ )
1207+ result = _invoke (runner , ["copytrack" , "fetch" , "@baduser" ], data_dir )
1208+ data = _parse (result )
1209+ assert data ["ok" ] is False
1210+ assert result .exit_code == 1
1211+
11811212 def test_copytrack_replay (self , runner , data_dir ):
11821213 # Init account and add target
11831214 _invoke (runner , ["init" ], data_dir )
0 commit comments