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