public async Task ItShouldUpdateIfUncommittedEntryAlreadyExists() { await this.DatabaseTestAsync(async testDatabase => { this.target = new PersistCommittedAndUncommittedRecordsDbStatement(testDatabase); await this.target.ExecuteAsync( SubscriberId, CreatorId, LedgerRecords.Select(v => new AppendOnlyLedgerRecord( Guid.NewGuid(), v.AccountOwnerId, v.CounterpartyId, Now.AddDays(-1), v.Amount, v.AccountType, v.TransactionType, Guid.NewGuid(), Guid.NewGuid(), null, null, null)).ToList(), new UncommittedSubscriptionPayment( UncommittedRecord.SubscriberId, UncommittedRecord.CreatorId, UncommittedRecord.StartTimestampInclusive.AddDays(-1), UncommittedRecord.EndTimestampExclusive.AddDays(-1), UncommittedRecord.Amount, Guid.NewGuid())); await testDatabase.TakeSnapshotAsync(); await this.target.ExecuteAsync(SubscriberId, CreatorId, LedgerRecords, UncommittedRecord); var sideEffects = new List <IIdentityEquatable>(); sideEffects.AddRange(LedgerRecords); sideEffects.Add(UncommittedRecord); return(new ExpectedSideEffects { Inserts = LedgerRecords, Update = UncommittedRecord }); }); }
public async Task ItShouldNotAllowDuplicateLedgerEntries() { await this.DatabaseTestAsync(async testDatabase => { this.target = new PersistCommittedAndUncommittedRecordsDbStatement(testDatabase); await this.target.ExecuteAsync( SubscriberId, CreatorId, LedgerRecords.Select(v => new AppendOnlyLedgerRecord( Guid.NewGuid(), v.AccountOwnerId, v.CounterpartyId, v.Timestamp, v.Amount, v.AccountType, v.TransactionType, Guid.NewGuid(), Guid.NewGuid(), null, null, null)).ToList(), UncommittedRecord); await testDatabase.TakeSnapshotAsync(); Exception expectedException = null; try { await this.target.ExecuteAsync(SubscriberId, CreatorId, LedgerRecords, UncommittedRecord); } catch (SqlException t) { if (t.Number == 2601) { expectedException = t; } } Assert.IsNotNull(expectedException); return(ExpectedSideEffects.TransactionAborted); }); }
public async Task ItShouldInsertIfEntriesDoNotExist() { await this.DatabaseTestAsync(async testDatabase => { this.target = new PersistCommittedAndUncommittedRecordsDbStatement(testDatabase); await testDatabase.TakeSnapshotAsync(); await this.target.ExecuteAsync(SubscriberId, CreatorId, LedgerRecords, UncommittedRecord); var sideEffects = new List <IIdentityEquatable>(); sideEffects.AddRange(LedgerRecords); sideEffects.Add(UncommittedRecord); return(new ExpectedSideEffects { Inserts = sideEffects }); }); }
public async Task ItShouldDeleteExistingUncommittedEntryIfUncommittedEntryNotSupplied() { await this.DatabaseTestAsync(async testDatabase => { this.target = new PersistCommittedAndUncommittedRecordsDbStatement(testDatabase); await this.target.ExecuteAsync( SubscriberId, CreatorId, LedgerRecords.Select(v => new AppendOnlyLedgerRecord( Guid.NewGuid(), v.AccountOwnerId, v.CounterpartyId, Now.AddDays(-1), v.Amount, v.AccountType, v.TransactionType, Guid.NewGuid(), Guid.NewGuid(), null, null, null)).ToList(), UncommittedRecord); await testDatabase.TakeSnapshotAsync(); await this.target.ExecuteAsync(SubscriberId, CreatorId, LedgerRecords, null); var sideEffects = new List <IIdentityEquatable>(); sideEffects.AddRange(LedgerRecords); sideEffects.Add(UncommittedRecord); return(new ExpectedSideEffects { Inserts = LedgerRecords, Delete = UncommittedRecord }); }); }
public void Initialize() { this.target = new PersistCommittedAndUncommittedRecordsDbStatement(new Mock <IFifthweekDbConnectionFactory>(MockBehavior.Strict).Object); }