private void RecordAction(Func <AuditRecorder, Func <IAuditEventArguments, Task> > recordMethodFactory, bool isSuccess) { DateTime expectedWhen = new DateTime(2018, 3, 5, 10, 23, 11, DateTimeKind.Utc); var expectedSubject = new UserResourceActor(fixture.Create <string>()); string expectedAction = fixture.Create <string>(); string expectedDescription = fixture.Create <string>(); var expectedResource = new AuditableResource(fixture.Create <string>()); IAuditEventArguments auditEventContext = AuditContextMockingHelper.CreateAuditEventContext(expectedSubject, expectedAction, expectedResource, expectedDescription); now = () => expectedWhen; var sut = CreateSut(); recordMethodFactory(sut)(auditEventContext).Wait(); auditEntities.Verify(ae => ae.Add(new AuditEntity() { Source = expectedSource, SubjectIdentifier = expectedSubject.Identifier, SubjectType = expectedSubject.Type, Subject = "", Description = expectedDescription, Resource = expectedResource.Name, ResourceType = expectedResource.Type, ResourceIdentifier = expectedResource.Identifier, Succeeded = isSuccess, Action = expectedAction, When = expectedWhen }), Times.Once); unitOfWork.Verify(uow => uow.Commit(), Times.Once); }
public void AndSubject_WhenCalled_ShouldAddToCriteria() { ResourceActor subject = new UserResourceActor("andy"); var sut = CreateSut(); sut.AndSubject(subject); criteriaBuilder.Verify(cb => cb.AndStringMatch(Matches.Exactly, nameof(AuditEntity.SubjectIdentifier), subject.Identifier), Times.Once); criteriaBuilder.Verify(cb => cb.AndStringMatch(Matches.Exactly, nameof(AuditEntity.SubjectType), subject.Type), Times.Once); }
public void RecordFailure_WhenCalled_ShouldLocalizeActionContext() { var expectedSubject = new UserResourceActor("fred"); var expectedResource = new AuditableResource("identityServer"); string action = "login"; localizer.Setup(sl => sl[action]).Returns(new LocalizedString("login", "la login", true)); var sut = CreateSut(); IAuditEventArguments auditEventContext = AuditContextMockingHelper.CreateAuditEventContext(expectedSubject, action, expectedResource, ""); sut.RecordSuccess(auditEventContext).Wait(); recordAuditableActions.Verify(raa => raa.RecordSuccess(It.IsAny <LocalizedAuditEventArguments>()), Times.Once); }
public void RecordFailure_WhenCalled_ShouldLocalizeActionAndForward() { var expectedSubject = new UserResourceActor("fred"); var expectedResource = new AuditableResource("identityServer"); string actionKey = "login"; string expectedTranslationText = "la Login"; LocalizedString expectedTranslation = new LocalizedString(actionKey, expectedTranslationText, false); localizer.Setup(sl => sl[actionKey]).Returns(expectedTranslation); var sut = CreateSut(); IAuditEventArguments auditEventContext = AuditContextMockingHelper.CreateAuditEventContext(expectedSubject, actionKey, expectedResource, ""); sut.RecordFailure(auditEventContext).Wait(); recordAuditableActions.Verify( raa => raa.RecordFailure(It.Is <IAuditEventArguments>(aec => aec.Action == expectedTranslationText)), Times.Once); }
public void GivenIHaveAnAuditSource_WhenAnAttemptIsMadeToRecordFailure_ThenShouldWriteNewAuditEntryInDatabase() { var expectedSubject = new UserResourceActor("andy"); const string expectedtedAction = "Login"; var expectedResource = new AuditableResource("Client", "3232-4343-342-34123", "AdminUI"); const string expectedDescription = "Logging in"; var sut = CreateSut(); sut.RecordFailure(AuditContextMockingHelper.CreateAuditEventContext(expectedSubject, expectedtedAction, expectedResource, expectedDescription)).Wait(); var auditEntries = databaseContext.AuditEntries.Where(ae => !ae.Succeeded && ae.SubjectIdentifier == expectedSubject.Identifier && ae.SubjectType == expectedSubject.Type && ae.Action == expectedtedAction && ae.Resource == expectedResource.Name && ae.ResourceType == expectedResource.Type && ae.ResourceIdentifier == expectedResource.Identifier && ae.Description == expectedDescription).ToList(); Assert.Single(auditEntries); }