@@ -283,4 +283,35 @@ test.group('Database store', (group) => {
283283 const sessions = await store . tagged ( 'user-1' )
284284 assert . deepEqual ( sessions , [ ] )
285285 } ) . disableTimeout ( )
286+
287+ /**
288+ * Simulate what happens during login lifecycle:
289+ * - Session is new (doesnt exist in DB yet)
290+ * - User calls session.tag => create session in database
291+ * - Then commit() calls write() => update data and preserves the rest
292+ */
293+ test ( 'tag before write creates session and preserves tag' , async ( { assert } ) => {
294+ const store = new DatabaseStore ( db . connection ( ) , '2 hours' )
295+
296+ await store . tag ( 'new-session' , 'user-123' )
297+ await store . write ( 'new-session' , { message : 'hello' } )
298+
299+ const row = await db . from ( 'sessions' ) . where ( 'id' , 'new-session' ) . first ( )
300+ assert . equal ( row . user_id , 'user-123' )
301+
302+ const data = await store . read ( 'new-session' )
303+ assert . deepEqual ( data , { message : 'hello' } )
304+ } )
305+
306+ test ( 'tag is preserved after write updates session data' , async ( { assert } ) => {
307+ const store = new DatabaseStore ( db . connection ( ) , '2 hours' )
308+
309+ await store . write ( 'session-1' , { message : 'hello' } )
310+ await store . tag ( 'session-1' , 'user-123' )
311+
312+ await store . write ( 'session-1' , { message : 'updated' } )
313+
314+ const row = await db . from ( 'sessions' ) . where ( 'id' , 'session-1' ) . first ( )
315+ assert . equal ( row . user_id , 'user-123' )
316+ } )
286317} )
0 commit comments