@@ -9,12 +9,13 @@ class SessionMapperTest extends \Test\TestCase {
99
1010 private SessionMapper $ sessionMapper ;
1111 private StepMapper $ stepMapper ;
12+ private DocumentMapper $ documentMapper ;
1213
1314 public function setUp (): void {
1415 parent ::setUp ();
1516 $ this ->sessionMapper = \OCP \Server::get (SessionMapper::class);
1617 $ this ->stepMapper = \OCP \Server::get (StepMapper::class);
17-
18+ $ this -> documentMapper = \ OCP \Server:: get (DocumentMapper::class);
1819 }
1920
2021 public function testDeleteInactiveWithoutSteps () {
@@ -135,4 +136,66 @@ public function testDeleteOldSessions() {
135136 self ::assertCount (1 , $ remainingSessions );
136137 self ::assertEquals ($ recentSession ->getId (), $ remainingSessions [0 ]->getId ());
137138 }
139+
140+ public function testDeleteOrphanedSteps () {
141+ $ this ->documentMapper ->clearAll ();
142+ $ this ->sessionMapper ->clearAll ();
143+ $ this ->stepMapper ->clearAll ();
144+
145+ $ eightDaysAgo = time () - (8 * 24 * 60 * 60 );
146+
147+ // Create document
148+ $ document = $ this ->documentMapper ->insert (Document::fromParams ([
149+ 'id ' => 1 ,
150+ 'currentVersion ' => 0 ,
151+ 'lastSavedVersion ' => 100 ,
152+ 'lastSavedVersionTime ' => time ()
153+ ]));
154+
155+ // Create Orphaned step without document (delete)
156+ $ this ->stepMapper ->insert (Step::fromParams ([
157+ 'sessionId ' => 99999 ,
158+ 'documentId ' => 99999 ,
159+ 'data ' => 'ORPHANED_NO_DOC ' ,
160+ 'version ' => 1
161+ ]));
162+
163+ // Orphaned "old" step with document and old version (delete)
164+ $ this ->stepMapper ->insert (Step::fromParams ([
165+ 'id ' => 1 ,
166+ 'sessionId ' => 99999 ,
167+ 'documentId ' => $ document ->getId (),
168+ 'data ' => 'ORPHANED_OLD_VERSION ' ,
169+ 'timestamp ' => $ eightDaysAgo ,
170+ 'version ' => 1
171+ ]));
172+
173+ // Orphaned "new" step with document and current version (keep)
174+ $ this ->stepMapper ->insert (Step::fromParams ([
175+ 'id ' => 100 ,
176+ 'sessionId ' => 99999 ,
177+ 'documentId ' => $ document ->getId (),
178+ 'data ' => 'ORPHANED_CURRENT_VERSION ' ,
179+ 'version ' => 2
180+ ]));
181+
182+ // Orphaned step with document and new version (keep)
183+ $ this ->stepMapper ->insert (Step::fromParams ([
184+ 'id ' => 101 ,
185+ 'sessionId ' => 99999 ,
186+ 'documentId ' => $ document ->getId (),
187+ 'data ' => 'ORPHANED_NEW_VERSION ' ,
188+ 'timestamp ' => $ eightDaysAgo ,
189+ 'version ' => 3
190+ ]));
191+
192+ // Verify steps for document 1 and 99999
193+ self ::assertCount (3 , $ this ->stepMapper ->find (1 , 0 ));
194+ self ::assertCount (1 , $ this ->stepMapper ->find (99999 , 0 ));
195+
196+ // Delete orphaned steps older than 7 days
197+ $ sevenDays = 7 * 24 * 60 * 60 ;
198+ $ deletedCount = $ this ->sessionMapper ->deleteOrphanedSteps ($ sevenDays );
199+ self ::assertEquals (2 , $ deletedCount );
200+ }
138201}
0 commit comments