2121// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
2222// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2323
24+ using System ;
2425using System . Collections . Generic ;
2526using System . Linq ;
27+ using System . Threading ;
2628using System . Threading . Tasks ;
2729using EventFlow . TestHelpers . Aggregates ;
2830using EventFlow . TestHelpers . Aggregates . Commands ;
@@ -141,13 +143,40 @@ public async Task PurgeRemovesReadModels()
141143 await PublishPingCommandAsync ( id ) . ConfigureAwait ( false ) ;
142144
143145 // Act
144- await PurgeTestAggregateReadModelAsync ( ) . ConfigureAwait ( false ) ;
146+ await ReadModelPopulator . PurgeAsync ( ReadModelType , CancellationToken . None ) . ConfigureAwait ( false ) ;
145147 var readModel = await QueryProcessor . ProcessAsync ( new ThingyGetQuery ( id ) ) . ConfigureAwait ( false ) ;
146148
147149 // Assert
148150 readModel . Should ( ) . BeNull ( ) ;
149151 }
150152
153+ [ Test ]
154+ public async Task DeleteRemovesSpecificReadModel ( )
155+ {
156+ // Arrange
157+ var id1 = ThingyId . New ;
158+ var id2 = ThingyId . New ;
159+ await PublishPingCommandAsync ( id1 ) . ConfigureAwait ( false ) ;
160+ await PublishPingCommandAsync ( id2 ) . ConfigureAwait ( false ) ;
161+ var readModel1 = await QueryProcessor . ProcessAsync ( new ThingyGetQuery ( id1 ) ) . ConfigureAwait ( false ) ;
162+ var readModel2 = await QueryProcessor . ProcessAsync ( new ThingyGetQuery ( id2 ) ) . ConfigureAwait ( false ) ;
163+ readModel1 . Should ( ) . NotBeNull ( ) ;
164+ readModel2 . Should ( ) . NotBeNull ( ) ;
165+
166+ // Act
167+ await ReadModelPopulator . DeleteAsync (
168+ id1 . Value ,
169+ ReadModelType ,
170+ CancellationToken . None )
171+ . ConfigureAwait ( false ) ;
172+
173+ // Assert
174+ readModel1 = await QueryProcessor . ProcessAsync ( new ThingyGetQuery ( id1 ) ) . ConfigureAwait ( false ) ;
175+ readModel2 = await QueryProcessor . ProcessAsync ( new ThingyGetQuery ( id2 ) ) . ConfigureAwait ( false ) ;
176+ readModel1 . Should ( ) . BeNull ( ) ;
177+ readModel2 . Should ( ) . NotBeNull ( ) ;
178+ }
179+
151180 [ Test ]
152181 public async Task RePopulateHandlesManyAggregates ( )
153182 {
@@ -158,8 +187,8 @@ public async Task RePopulateHandlesManyAggregates()
158187 await PublishPingCommandsAsync ( id2 , 5 ) . ConfigureAwait ( false ) ;
159188
160189 // Act
161- await PurgeTestAggregateReadModelAsync ( ) . ConfigureAwait ( false ) ;
162- await PopulateTestAggregateReadModelAsync ( ) . ConfigureAwait ( false ) ;
190+ await ReadModelPopulator . PurgeAsync ( ReadModelType , CancellationToken . None ) . ConfigureAwait ( false ) ;
191+ await ReadModelPopulator . PopulateAsync ( ReadModelType , CancellationToken . None ) . ConfigureAwait ( false ) ;
163192
164193 // Assert
165194 var readModel1 = await QueryProcessor . ProcessAsync ( new ThingyGetQuery ( id1 ) ) . ConfigureAwait ( false ) ;
@@ -175,10 +204,10 @@ public async Task PopulateCreatesReadModels()
175204 // Arrange
176205 var id = ThingyId . New ;
177206 await PublishPingCommandsAsync ( id , 2 ) . ConfigureAwait ( false ) ;
178- await PurgeTestAggregateReadModelAsync ( ) . ConfigureAwait ( false ) ;
207+ await ReadModelPopulator . PurgeAsync ( ReadModelType , CancellationToken . None ) . ConfigureAwait ( false ) ;
179208
180209 // Act
181- await PopulateTestAggregateReadModelAsync ( ) . ConfigureAwait ( false ) ;
210+ await ReadModelPopulator . PopulateAsync ( ReadModelType , CancellationToken . None ) . ConfigureAwait ( false ) ;
182211 var readModel = await QueryProcessor . ProcessAsync ( new ThingyGetQuery ( id ) ) . ConfigureAwait ( false ) ;
183212
184213 // Assert
@@ -193,8 +222,6 @@ private async Task<IReadOnlyCollection<ThingyMessage>> CreateAndPublishThingyMes
193222 return thingyMessages ;
194223 }
195224
196- protected abstract Task PurgeTestAggregateReadModelAsync ( ) ;
197-
198- protected abstract Task PopulateTestAggregateReadModelAsync ( ) ;
225+ protected abstract Type ReadModelType { get ; }
199226 }
200227}
0 commit comments