protected override void When() { _auditRecordDto = new AuditRecordDto { ReportId = CreatedReport.Id, ReportingData = "Trump Dossier", UpdatedBy = "Sergey & Oleg", UpdatedUtc = RepositoryTestHelper.TrimDateTime(DateTime.UtcNow) }; SUT.SaveAuditRecord(_auditRecordDto); }
public void SaveAuditRecord(AuditRecordDto auditRecordDto) { using (var connection = new SqlConnection(_connectionString)) { connection.Execute(@" INSERT INTO [dbo].[AuditHistory] ([UpdatedUtc] ,[ReportingData] ,[UpdatedBy] ,[ReportId]) VALUES (@UpdatedUtc ,@ReportingData ,@UpdatedBy ,@ReportId)", new { auditRecordDto.UpdatedUtc, auditRecordDto.ReportingData, auditRecordDto.UpdatedBy, auditRecordDto.ReportId }); } }
protected override void HandleCore(UpdateReportRequest request) { var oldVersion = _reportRepository.Get(request.Report.Id); if (oldVersion == null) { throw new Exception("Failed to get old version of report"); } request.Report.UpdatePercentages(); var reportDto = _mapper.Map <ReportDto>(request.Report); reportDto.UpdatedUtc = DateTime.UtcNow; reportDto.UpdatedBy = JsonConvert.SerializeObject(new User { Id = request.User.Id, Name = request.User.Name }); if (!reportDto.AuditWindowStartUtc.HasValue) { reportDto.AuditWindowStartUtc = reportDto.UpdatedUtc; } if (RequiresAuditRecord(oldVersion, reportDto, request.AuditWindowSize)) { var auditRecord = new AuditRecordDto { ReportId = reportDto.Id, ReportingData = oldVersion.ReportingData, UpdatedBy = oldVersion.UpdatedBy, UpdatedUtc = oldVersion.UpdatedUtc.Value }; _reportRepository.SaveAuditRecord(auditRecord); reportDto.AuditWindowStartUtc = reportDto.UpdatedUtc.Value; } _reportRepository.Update(reportDto); }
public void When_Report_Is_Updated_More_Than_Audit_Window_Size_Ago_Then_Audit_Record_Is_Created() { // arrange var longAgo = DateTime.UtcNow.AddMinutes(-6); ReportDto actualReportDto = null; AuditRecordDto actualAuditRecordDto = null; var reportId = Guid.NewGuid(); var updateUser = new User { Id = Guid.NewGuid(), Name = "Homer" }; var oldVersion = new ReportDto { Id = reportId, AuditWindowStartUtc = longAgo, UpdatedUtc = longAgo, UpdatedBy = $"{{ Id: '{updateUser.Id}', Name: '{updateUser.Name}' }}", ReportingData = "old report" }; var newVersion = new ReportDto { Id = reportId, AuditWindowStartUtc = longAgo, UpdatedUtc = longAgo, UpdatedBy = $"{{ Id: '{updateUser.Id}', Name: '{updateUser.Name}' }}", ReportingData = "new report" }; _reportRepositoryMock.Setup(s => s.Get(reportId)).Returns(oldVersion).Verifiable(); _reportRepositoryMock.Setup(s => s.SaveAuditRecord(It.IsAny <AuditRecordDto>())) .Callback <AuditRecordDto>(d => actualAuditRecordDto = d).Verifiable(); _reportRepositoryMock.Setup(s => s.Update(It.IsAny <ReportDto>())) .Callback <ReportDto>(d => actualReportDto = d).Verifiable(); _mapperMock.Setup(s => s.Map <ReportDto>(It.IsAny <Report>())).Returns(newVersion); var updateReportRequest = new UpdateReportRequestBuilder() .WithUserName(updateUser.Name) .WithUserId(updateUser.Id) .WithAutoWindowSizeInMinutes(5) .WithReport( new Report { Id = reportId, AuditWindowStartUtc = longAgo, UpdatedUtc = longAgo, UpdatedBy = new User { Id = Guid.Empty, Name = "Homer" } }) .Build(); // act _updateReportHandler.Handle(updateReportRequest, default(CancellationToken)); // assert _reportRepositoryMock.VerifyAll(); Assert.IsNotNull(actualReportDto); Assert.AreNotEqual(longAgo, actualReportDto.AuditWindowStartUtc); Assert.AreNotEqual(longAgo, actualReportDto.UpdatedUtc); Assert.IsNotNull(actualReportDto.UpdatedBy); Assert.IsTrue(actualReportDto.UpdatedBy.Contains(updateUser.Name)); Assert.AreEqual(newVersion.ReportingData, actualReportDto.ReportingData); Assert.IsNotNull(actualAuditRecordDto); Assert.AreEqual(reportId, actualAuditRecordDto.ReportId); Assert.AreEqual(longAgo, actualAuditRecordDto.UpdatedUtc); Assert.IsTrue(actualAuditRecordDto.UpdatedBy.Contains(updateUser.Name)); Assert.AreEqual(oldVersion.ReportingData, actualAuditRecordDto.ReportingData); }