1111
1212namespace Piwik \Plugins \BotTracking \tests \System ;
1313
14+ use Piwik \Container \StaticContainer ;
1415use Piwik \DataAccess \RawLogDao ;
1516use Piwik \Date ;
1617use Piwik \Db ;
1718use Piwik \LogDeleter ;
1819use Piwik \Plugin \Dimension \DimensionMetadataProvider ;
1920use Piwik \Plugins \BotTracking \Dao \BotRequestsDao ;
2021use Piwik \Plugins \PrivacyManager \LogDataPurger ;
22+ use Piwik \Plugins \PrivacyManager \Model \DataSubjects ;
23+ use Piwik \Plugins \SitesManager \API as SitesManagerAPI ;
2124use Piwik \Tests \Framework \Fixture ;
2225use Piwik \Tests \Framework \Mock \Plugin \LogTablesProvider ;
2326use Piwik \Tests \Framework \TestCase \SystemTestCase ;
@@ -34,10 +37,7 @@ public function setUp(): void
3437
3538 Fixture::createSuperUser ();
3639 Fixture::createWebsite ('2014-02-04 ' );
37- }
3840
39- public function testLogDataPurgingRemovesBotRequests (): void
40- {
4141 // track some bot requests
4242 $ t = Fixture::getTracker (1 , '2025-02-02 12:00:00 ' );
4343 $ t ->setUserAgent ('Mozilla/5.0 (compatible; ChatGPT-User/1.0) ' );
@@ -56,7 +56,10 @@ public function testLogDataPurgingRemovesBotRequests(): void
5656 $ t ->setUrl ('https://matomo.org/faq/576 ' );
5757 $ t ->setCustomTrackingParameter ('recMode ' , '1 ' );
5858 Fixture::checkResponse ($ t ->doTrackPageView ('' ));
59+ }
5960
61+ public function testLogDataPurgingRemovesBotRequests (): void
62+ {
6063 // check that all requests were tracked
6164 $ tableName = BotRequestsDao::getPrefixedTableName ();
6265 $ sql = "SELECT COUNT(*) FROM ` {$ tableName }` " ;
@@ -69,10 +72,53 @@ public function testLogDataPurgingRemovesBotRequests(): void
6972 $ purger ->purgeData ($ days , true );
7073
7174 // ensure that two bot requests were removed
72- $ tableName = BotRequestsDao::getPrefixedTableName ();
7375 $ sql = "SELECT * FROM ` {$ tableName }` " ;
7476 $ bots = Db::fetchAll ($ sql );
7577 self ::assertCount (1 , $ bots );
7678 self ::assertEquals ('MistralAI-User ' , $ bots [0 ]['bot_name ' ]);
7779 }
80+
81+ public function testDeleteDataSubjectsForDeletedSitesRemovesBotRequests (): void
82+ {
83+ // track a normal visit that gets removed, otherwise bot requests won't be removed
84+ $ t = Fixture::getTracker (1 , '2025-02-02 12:00:00 ' );
85+ $ t ->setUrl ('https://matomo.org/faq/123 ' );
86+ Fixture::checkResponse ($ t ->doTrackPageView ('' ));
87+
88+ // track request for another site
89+ Fixture::createWebsite ('2014-02-04 ' );
90+
91+ // track some bot requests
92+ $ t = Fixture::getTracker (2 , '2025-02-02 12:00:00 ' );
93+ $ t ->setUserAgent ('Mozilla/5.0 (compatible; ChatGPT-User/1.0) ' );
94+ $ t ->setUrl ('https://matomo.org/faq/123 ' );
95+ $ t ->setCustomTrackingParameter ('recMode ' , '1 ' );
96+ Fixture::checkResponse ($ t ->doTrackPageView ('' ));
97+
98+ // remove site 1
99+ SitesManagerAPI::getInstance ()->deleteSite (1 );
100+
101+ // check that all requests still exist
102+ $ tableName = BotRequestsDao::getPrefixedTableName ();
103+ $ sql = "SELECT COUNT(*) FROM ` {$ tableName }` " ;
104+ self ::assertEquals (4 , Db::fetchOne ($ sql ));
105+
106+ $ logTablesProvider = StaticContainer::get ('Piwik\Plugin\LogTablesProvider ' );
107+ $ dataSubjects = new DataSubjects ($ logTablesProvider );
108+ $ result = $ dataSubjects ->deleteDataSubjectsForDeletedSites ([2 ]); // idsite 2 still exists
109+ $ this ->assertEquals ([
110+ 'log_visit ' => 1 ,
111+ 'log_link_visit_action ' => 1 ,
112+ 'log_conversion_item ' => 0 ,
113+ 'log_conversion ' => 0 ,
114+ 'log_bot_request ' => 3 ,
115+ ], $ result );
116+
117+ // check that requests were correctly removed
118+ $ sql = "SELECT COUNT(*) FROM ` {$ tableName }` WHERE `idsite` = 1 " ;
119+ self ::assertEquals (0 , Db::fetchOne ($ sql ));
120+
121+ $ sql = "SELECT COUNT(*) FROM ` {$ tableName }` WHERE `idsite` = 2 " ;
122+ self ::assertEquals (1 , Db::fetchOne ($ sql ));
123+ }
78124}
0 commit comments