public void ForwardsTheCallToTheDecoratee()
        {
            // Arrange
            var decoratee = new SpyCommandService <object>();

            AuditingCommandServiceDecorator <object> sut =
                CreateAuditingDecorator(decoratee: decoratee);

            // Act
            sut.Execute(command: new object());

            // Assert
            Assert.True(decoratee.ExecutedOnce);
        }
        public void AppendsAuditEntryWithExpectedTimeOfExecution()
        {
            // Arrange
            var context      = new SpyCommerceContext();
            var timeProvider = new StubTimeProvider {
                Now = DateTime.Parse("2018-12-17")
            };

            AuditingCommandServiceDecorator <object> sut =
                CreateAuditingDecorator <object>(timeProvider: timeProvider, context: context);

            // Act
            sut.Execute(command: new object());

            // Assert
            Assert.Equal(
                expected: timeProvider.Now,
                actual: GetAppendedAuditEntry(context).TimeOfExecution);
        }
        public void AppendsAuditEntryWithExpectedUserId()
        {
            // Arrange
            var context     = new SpyCommerceContext();
            var userContext = new StubUserContext {
                CurrentUserId = Guid.NewGuid()
            };

            AuditingCommandServiceDecorator <object> sut =
                CreateAuditingDecorator <object>(userContext: userContext, context: context);

            // Act
            sut.Execute(command: new object());

            // Assert
            Assert.Equal(
                expected: userContext.CurrentUserId,
                actual: GetAppendedAuditEntry(context).UserId);
        }