public async Task ItShouldRequestSnapshotAfterUpdate() { await this.DatabaseTestAsync(async testDatabase => { var trackingDatabase = new TrackingConnectionFactory(testDatabase); this.target = new UpdateFreeAccessUsersDbStatement(trackingDatabase, this.requestSnapshot); await this.CreateDataAsync(testDatabase, true); await testDatabase.TakeSnapshotAsync(); this.requestSnapshot.VerifyConnectionDisposed(trackingDatabase); await this.target.ExecuteAsync(CreatorId, BlogId, null); this.requestSnapshot.VerifyCalledWith(CreatorId, SnapshotType.CreatorFreeAccessUsers); return(new ExpectedSideEffects { Deletes = new List <FreeAccessUser> { new FreeAccessUser { BlogId = BlogId.Value, Email = "*****@*****.**" }, new FreeAccessUser { BlogId = BlogId.Value, Email = "*****@*****.**" }, new FreeAccessUser { BlogId = BlogId.Value, Email = "*****@*****.**" }, }, }); }); }
public async Task ItShouldBeIdempotent() { await this.DatabaseTestAsync(async testDatabase => { this.target = new UpdateFreeAccessUsersDbStatement(testDatabase, this.requestSnapshot); await this.CreateDataAsync(testDatabase, true); await this.target.ExecuteAsync( CreatorId, BlogId, new List <ValidEmail> { ValidEmail.Parse("*****@*****.**"), ValidEmail.Parse("*****@*****.**"), ValidEmail.Parse("*****@*****.**") }); await testDatabase.TakeSnapshotAsync(); await this.target.ExecuteAsync( CreatorId, BlogId, new List <ValidEmail> { ValidEmail.Parse("*****@*****.**"), ValidEmail.Parse("*****@*****.**"), ValidEmail.Parse("*****@*****.**") }); return(ExpectedSideEffects.None); }); }
public async Task WhenNewEmailListIsNull_ItShouldDeleteAllEmailsForBlog() { await this.DatabaseTestAsync(async testDatabase => { this.target = new UpdateFreeAccessUsersDbStatement(testDatabase, this.requestSnapshot); await this.CreateDataAsync(testDatabase, true); await testDatabase.TakeSnapshotAsync(); await this.target.ExecuteAsync(CreatorId, BlogId, null); return(new ExpectedSideEffects { Deletes = new List <FreeAccessUser> { new FreeAccessUser { BlogId = BlogId.Value, Email = "*****@*****.**" }, new FreeAccessUser { BlogId = BlogId.Value, Email = "*****@*****.**" }, new FreeAccessUser { BlogId = BlogId.Value, Email = "*****@*****.**" }, }, }); }); }
public async Task WhenNewEmailList_AndEmailsForBlogIsEmpty_ItShouldModifyEmailsForBlog() { await this.DatabaseTestAsync(async testDatabase => { this.target = new UpdateFreeAccessUsersDbStatement(testDatabase, this.requestSnapshot); await this.CreateDataAsync(testDatabase, false); await testDatabase.TakeSnapshotAsync(); await this.target.ExecuteAsync( CreatorId, BlogId, new List <ValidEmail> { ValidEmail.Parse("*****@*****.**"), ValidEmail.Parse("*****@*****.**") }); return(new ExpectedSideEffects { Inserts = new List <FreeAccessUser> { new FreeAccessUser { BlogId = BlogId.Value, Email = "*****@*****.**" }, new FreeAccessUser { BlogId = BlogId.Value, Email = "*****@*****.**" }, }, }); }); }
public async Task WhenNewEmailListIsEmpty_AndEmailsForBlogIsEmpty_ItShouldNotAddEmailsForBlog() { await this.DatabaseTestAsync(async testDatabase => { this.target = new UpdateFreeAccessUsersDbStatement(testDatabase, this.requestSnapshot); await this.CreateDataAsync(testDatabase, false); await testDatabase.TakeSnapshotAsync(); await this.target.ExecuteAsync(CreatorId, BlogId, new List <ValidEmail>()); return(ExpectedSideEffects.None); }); }
public async Task ItShouldNotUpdateIfSnapshotFails() { await this.DatabaseTestAsync(async testDatabase => { this.target = new UpdateFreeAccessUsersDbStatement(testDatabase, this.requestSnapshot); await this.CreateDataAsync(testDatabase, true); await testDatabase.TakeSnapshotAsync(); this.requestSnapshot.ThrowException(); await ExpectedException.AssertExceptionAsync <SnapshotException>( () => this.target.ExecuteAsync(CreatorId, BlogId, null)); return(ExpectedSideEffects.TransactionAborted); }); }
public async Task WhenNewEmailListIsSame_AndOrderIsDifferent_ItShouldNotModifyEmailsForBlog() { await this.DatabaseTestAsync(async testDatabase => { this.target = new UpdateFreeAccessUsersDbStatement(testDatabase, this.requestSnapshot); await this.CreateDataAsync(testDatabase, true); await testDatabase.TakeSnapshotAsync(); await this.target.ExecuteAsync( CreatorId, BlogId, new List <ValidEmail> { ValidEmail.Parse("*****@*****.**"), ValidEmail.Parse("*****@*****.**"), ValidEmail.Parse("*****@*****.**"), }); return(ExpectedSideEffects.None); }); }
public void TestInitialize() { this.requestSnapshot = new MockRequestSnapshotService(); this.target = new UpdateFreeAccessUsersDbStatement(new Mock <IFifthweekDbConnectionFactory>(MockBehavior.Strict).Object, this.requestSnapshot); }