Ejemplo n.º 1
0
        public async Task CalculateExecutionTimeOfDecoratedQuery()
        {
            var      performanceRepositoryMock = new Mock <IEfRepository <PerformanceEntry> >();
            TimeSpan executionTime             = default(TimeSpan);

            performanceRepositoryMock.Setup(x => x.Add(It.IsAny <PerformanceEntry>()))
            .Callback <PerformanceEntry>(entry => executionTime = entry.Duration);

            var contextSaveChangesStub = new Mock <MusicZoneDbContext>(
                new[] { "Fake Connection string" });

            var timeProviderStub = new Mock <IDateTimeProvider>();

            QueryServiceStub decorateeStub = new QueryServiceStub();

            // Arrange
            PerformanceQueryServiceDecorator <QueryStub, object> sut = new PerformanceQueryServiceDecorator <QueryStub, object>(
                performanceRepository: performanceRepositoryMock.Object,
                contextSaveChanges: contextSaveChangesStub.Object,
                timeProvider: timeProviderStub.Object,
                decoratee: decorateeStub);

            // Act
            await sut.ExecuteAsync(new QueryStub());

            // Assert
            Assert.That(executionTime > TimeSpan.MinValue);
        }
Ejemplo n.º 2
0
        public void SavePassedContextSaveChangesWhenIsNotNull()
        {
            var performanceRepositoryStub = new Mock <IEfRepository <PerformanceEntry> >();

            var contextSaveChangesStub = new Mock <MusicZoneDbContext>(
                new[] { "Fake Connection string" });

            var timeProviderStub = new Mock <IDateTimeProvider>();

            QueryServiceStub decorateeStub = new QueryServiceStub();

            // Arrange && Act
            PerformanceQueryServiceDecorator <QueryStub, object> sut = new PerformanceQueryServiceDecorator <QueryStub, object>(
                performanceRepository: performanceRepositoryStub.Object,
                contextSaveChanges: contextSaveChangesStub.Object,
                timeProvider: timeProviderStub.Object,
                decoratee: decorateeStub);

            // Assert
            var actualContextSaveChanges = sut.GetType()
                                           .GetFields(BindingFlags.Instance | BindingFlags.NonPublic)
                                           .First(fi => fi.FieldType == typeof(IEfDbContextSaveChanges))
                                           .GetValue(sut);

            Assert.AreSame(contextSaveChangesStub.Object, actualContextSaveChanges);
        }
Ejemplo n.º 3
0
        public async Task ReturnQueryResultFromCacheIfExistsInTheCache()
        {
            string expectedResult = "Returned from cache";

            var queryServiceStub = new QueryServiceStub();

            var cacheManagerStub = new Mock <ICacheManager>();

            cacheManagerStub.Setup(cm => cm.Exists(It.IsAny <string>()))
            .Returns(true);

            cacheManagerStub.Setup(cm => cm.Get <object>(It.IsAny <string>()))
            .Returns(expectedResult);

            var optionsStub     = new CacheOptions(false, int.MaxValue);
            var userContextStub = new Mock <IUserContext>();

            // Arrange
            CacheQueryServiceProxy <QueryStub, object> sut =
                new CacheQueryServiceProxy <QueryStub, object>(
                    queryService: queryServiceStub,
                    cacheManager: cacheManagerStub.Object,
                    options: optionsStub,
                    userContext: userContextStub.Object);

            // Act
            string actualResult = (string)await sut.ExecuteAsync(new QueryStub());

            // Assert
            Assert.AreEqual(expectedResult, actualResult);
        }
Ejemplo n.º 4
0
        public async Task CacheTheQueryResultIfIsNotInTheCache()
        {
            var queryServiceStub = new QueryServiceStub();

            var cacheManagerStub = new Mock <ICacheManager>();

            cacheManagerStub.Setup(cm => cm.Exists(It.IsAny <string>()))
            .Returns(false);

            var optionsStub     = new CacheOptions(false, int.MaxValue);
            var userContextStub = new Mock <IUserContext>();

            // Arrange
            CacheQueryServiceProxy <QueryStub, object> sut =
                new CacheQueryServiceProxy <QueryStub, object>(
                    queryService: queryServiceStub,
                    cacheManager: cacheManagerStub.Object,
                    options: optionsStub,
                    userContext: userContextStub.Object);

            // Act
            await sut.ExecuteAsync(new QueryStub());

            // Assert
            cacheManagerStub.Verify(cm => cm.Add(
                                        It.IsAny <string>(), It.IsAny <object>(), It.IsAny <int>()), Times.Once);
        }
Ejemplo n.º 5
0
        public void ThrowsArgumentNullExceptionWhenPassedUserContextIsNull()
        {
            var queryServiceStub = new QueryServiceStub();
            var cacheManagerStub = new Mock <ICacheManager>();
            var optionsStub      = new CacheOptions(false, int.MaxValue);

            // Arrange && Act && Assert
            Assert.Throws <ArgumentNullException>(
                () => new CacheQueryServiceProxy <QueryStub, object>(
                    queryService: queryServiceStub,
                    cacheManager: cacheManagerStub.Object,
                    options: optionsStub,
                    userContext: null));
        }
Ejemplo n.º 6
0
        public void ThrowsArgumentNullExceptionWhenPassedOptionsIsNull()
        {
            var queryServiceStub = new QueryServiceStub();
            var cacheManagerStub = new Mock <ICacheManager>();
            var userContextStub  = new Mock <IUserContext>();

            // Arrange && Act && Assert
            Assert.Throws <ArgumentNullException>(
                () => new CacheQueryServiceProxy <QueryStub, object>(
                    queryService: queryServiceStub,
                    cacheManager: cacheManagerStub.Object,
                    options: null,
                    userContext: userContextStub.Object));
        }
Ejemplo n.º 7
0
        public void ThrowsArgumentNullExceptionWhenPassedPerformanceRepositoryIsNull()
        {
            var contextSaveChangesStub = new Mock <MusicZoneDbContext>(
                new[] { "Fake Connection string" });
            var timeProviderStub = new Mock <IDateTimeProvider>();
            var decorateeStub    = new QueryServiceStub();

            // Arrange && Act && Assert
            Assert.Throws <ArgumentNullException>(
                () => new PerformanceQueryServiceDecorator <QueryStub, object>(
                    performanceRepository: null,
                    contextSaveChanges: contextSaveChangesStub.Object,
                    timeProvider: timeProviderStub.Object,
                    decoratee: decorateeStub));
        }
Ejemplo n.º 8
0
        public void ThrowsArgumentNullExceptionWhenPassedContextSaveChangesIsNull()
        {
            var performanceRepositoryStub = new Mock <IEfRepository <PerformanceEntry> >();

            var timeProviderStub = new Mock <IDateTimeProvider>();

            var decorateeStub = new QueryServiceStub();

            // Arrange && Act && Assert
            Assert.Throws <ArgumentNullException>(
                () => new PerformanceQueryServiceDecorator <QueryStub, object>(
                    performanceRepository: performanceRepositoryStub.Object,
                    contextSaveChanges: null,
                    timeProvider: timeProviderStub.Object,
                    decoratee: decorateeStub));
        }
Ejemplo n.º 9
0
        public void SavePassedDecorateeWhenIsNotNull()
        {
            var userPermissionCheckerStub = new Mock <IUserPermissionChecker>();
            var permissionCheckerStub     = new ServicePermissionCheckerStub(
                permissionChecker: userPermissionCheckerStub.Object);

            QueryServiceStub decoratee = new QueryServiceStub();

            // Arrange && Act
            PermissionQueryServiceDecorator <QueryStub, object> sut = new PermissionQueryServiceDecorator <QueryStub, object>(
                permissionChecker: permissionCheckerStub,
                decoratee: decoratee);

            // Assert
            var actualDecoratee = sut.GetType()
                                  .GetFields(BindingFlags.Instance | BindingFlags.NonPublic)
                                  .First(fi => fi.FieldType == typeof(IQueryService <QueryStub, object>))
                                  .GetValue(sut);

            Assert.AreSame(decoratee, actualDecoratee);
        }
Ejemplo n.º 10
0
        public async Task CheckPermissionsOfTheUserWhenInvoked()
        {
            var userPermissionCheckerMock = new Mock <IUserPermissionChecker>();
            var permissionCheckerStub     = new ServicePermissionCheckerStub(
                permissionChecker: userPermissionCheckerMock.Object);

            QueryServiceStub decorateeStub = new QueryServiceStub();

            // Arrange
            PermissionQueryServiceDecorator <QueryStub, object> sut =
                new PermissionQueryServiceDecorator <QueryStub, object>(
                    permissionChecker: permissionCheckerStub,
                    decoratee: decorateeStub);

            // Act
            await sut.ExecuteAsync(new QueryStub());

            // Assert
            userPermissionCheckerMock.Verify(
                x => x.CheckPermission(It.IsAny <string>()), Times.Once);
        }
Ejemplo n.º 11
0
        public void SavePassedCacheManagerWhenIsNotNull()
        {
            var cacheManagerStub = new Mock <ICacheManager>();
            var userContextStub  = new Mock <IUserContext>();
            var optionsStub      = new CacheOptions(false, int.MaxValue);
            var queryServiceStub = new QueryServiceStub();

            // Arrange
            CacheQueryServiceProxy <QueryStub, object> sut =
                new CacheQueryServiceProxy <QueryStub, object>(
                    queryService: queryServiceStub,
                    cacheManager: cacheManagerStub.Object,
                    options: optionsStub,
                    userContext: userContextStub.Object);

            // Assert
            var actualCacheManager = sut.GetType()
                                     .GetFields(BindingFlags.Instance | BindingFlags.NonPublic)
                                     .First(fi => fi.FieldType == typeof(ICacheManager))
                                     .GetValue(sut);

            Assert.AreSame(cacheManagerStub.Object, actualCacheManager);
        }