@@ -1537,4 +1537,55 @@ public async Task FlushlessUpsertIsNotStoredUntilFlushed(Task<IFunctionStore> st
15371537 storedEffect . EffectId . ShouldBe ( effectId ) ;
15381538 ( ( int ) DefaultSerializer . Instance . Deserialize ( storedEffect . Result ! , typeof ( int ) ) ) . ShouldBe ( 42 ) ;
15391539 }
1540+
1541+ public abstract Task FlushlessUpsertsAreNotStoredUntilFlushed ( ) ;
1542+ public async Task FlushlessUpsertsAreNotStoredUntilFlushed ( Task < IFunctionStore > storeTask )
1543+ {
1544+ var store = await storeTask ;
1545+ var storedId = TestStoredId . Create ( ) ;
1546+ var session = await store . CreateFunction (
1547+ storedId ,
1548+ "SomeInstance" ,
1549+ param : null ,
1550+ leaseExpiration : 0 ,
1551+ postponeUntil : null ,
1552+ timestamp : 0 ,
1553+ parent : null ,
1554+ owner : ReplicaId . NewId ( )
1555+ ) ;
1556+ var effectStore = store . EffectsStore ;
1557+ var effectResults = new EffectResults (
1558+ TestFlowId . Create ( ) ,
1559+ storedId ,
1560+ new List < StoredEffect > ( ) ,
1561+ effectStore ,
1562+ DefaultSerializer . Instance ,
1563+ session ,
1564+ clearChildren : true
1565+ ) ;
1566+
1567+ var effectId1 = new EffectId ( [ 1 ] ) ;
1568+ var effectId2 = new EffectId ( [ 2 ] ) ;
1569+ effectResults . FlushlessUpserts (
1570+ [
1571+ new EffectResult ( effectId1 , 42 , Alias : null ) ,
1572+ new EffectResult ( effectId2 , "hello" , Alias : null ) ,
1573+ ] ) ;
1574+
1575+ // before flush nothing should be stored
1576+ var fetchedResults = await effectStore . GetEffectResults ( storedId ) ;
1577+ fetchedResults . Count . ShouldBe ( 0 ) ;
1578+
1579+ // after flush the values should be persisted
1580+ await effectResults . Flush ( ) ;
1581+
1582+ fetchedResults = await effectStore . GetEffectResults ( storedId ) ;
1583+ fetchedResults . Count . ShouldBe ( 2 ) ;
1584+ ( ( int ) DefaultSerializer . Instance . Deserialize (
1585+ fetchedResults . Single ( r => r . EffectId == effectId1 ) . Result ! , typeof ( int )
1586+ ) ) . ShouldBe ( 42 ) ;
1587+ ( ( string ) DefaultSerializer . Instance . Deserialize (
1588+ fetchedResults . Single ( r => r . EffectId == effectId2 ) . Result ! , typeof ( string )
1589+ ) ) . ShouldBe ( "hello" ) ;
1590+ }
15401591}
0 commit comments