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);
        }
Beispiel #4
0
        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);
        }