Ejemplo n.º 1
0
        public async Task GetGuidInfo_ExpiredGuidFromCache()
        {
            // use guid created in the past
            var cachedEntity = new GuidInfoEntity()
            {
                Guid   = System.Guid.NewGuid(),
                User   = "******",
                Expire = _now.AddDays(-10)
            };

            var mockRepo    = new Mock <IRepository <GuidInfoEntity> >();
            var mockContext = new Mock <IGuidRepositoryContext>();

            // return entity from cache
            var mockCache = new Mock <IEntityCache <GuidInfoEntity> >();

            mockCache.Setup(r => r.GetEntityAsync(It.IsAny <string>(), cachedEntity.Guid.ToString()))
            .ReturnsAsync(cachedEntity)
            .Verifiable();

            var controller = new GuidInfosController(mockContext.Object, mockCache.Object, _mockClock.Object);
            var info       = await controller.GetGuidInfoAsync(cachedEntity.Guid);

            Assert.IsType <ActionResult <GuidInfo> >(info);
            var result = Assert.IsType <ObjectResult>(info.Result);

            Assert.Equal(result.StatusCode, (int)HttpStatusCode.Gone);
            var value = Assert.IsType <GuidApiError>(result.Value);

            Assert.Equal((int)value.Code, (int)GuidErrorCode.GuidExpired);

            mockCache.Verify();
        }
Ejemplo n.º 2
0
        public async Task GetGuidInfo_FromDatabase()
        {
            var dbEntity = new GuidInfoEntity()
            {
                Guid   = System.Guid.NewGuid(),
                User   = "******",
                Expire = _now.AddDays(10)
            };

            // return entity from database
            var mockRepo = new Mock <IRepository <GuidInfoEntity> >();

            mockRepo.Setup(r => r.GetAsync(It.IsAny <Expression <Func <GuidInfoEntity, bool> > >()))
            .ReturnsAsync(new List <GuidInfoEntity>()
            {
                dbEntity
            })
            .Verifiable();

            var mockContext = new Mock <IGuidRepositoryContext>();

            mockContext.Setup(r => r.GuidInfos)
            .Returns(mockRepo.Object);

            // return no hit from cache
            var mockCache = new Mock <IEntityCache <GuidInfoEntity> >();

            mockCache.Setup(r => r.GetEntityAsync(It.IsAny <string>(), dbEntity.Guid.ToString()))
            .ReturnsAsync((GuidInfoEntity)null)
            .Verifiable();

            // make sure we cache found database entry
            mockCache.Setup(r => r.SetEntityAsync(It.IsAny <string>(), dbEntity.Guid.ToString(), dbEntity))
            .Returns(Task.CompletedTask)
            .Verifiable();

            var controller = new GuidInfosController(mockContext.Object, mockCache.Object, _mockClock.Object);
            var info       = await controller.GetGuidInfoAsync(dbEntity.Guid);

            Assert.IsType <ActionResult <GuidInfo> >(info);
            var value = Assert.IsType <GuidInfo>(info.Value);

            Assert.Equal(value.Guid, dbEntity.Guid.ToString("N").ToUpper());
            Assert.Equal(value.User, dbEntity.User);
            Assert.Equal(value.Expire, dbEntity.Expire);

            // verify we read cache once (which returned null)
            mockCache.Verify(r => r.GetEntityAsync(It.IsAny <string>(), dbEntity.Guid.ToString()), Times.Once);

            // and accessed database once
            mockRepo.Verify(r => r.GetAsync(It.IsAny <Expression <Func <GuidInfoEntity, bool> > >()), Times.Once);

            // and stored in cache once
            mockCache.Verify(r => r.SetEntityAsync(It.IsAny <string>(), dbEntity.Guid.ToString(), dbEntity), Times.Once);
        }
Ejemplo n.º 3
0
        public async Task GetGuidInfo_ExpiredGuidFromDatabase()
        {
            // use guid created in the past
            var dbEntity = new GuidInfoEntity()
            {
                Guid   = System.Guid.NewGuid(),
                User   = "******",
                Expire = _now.AddDays(-10)
            };

            // retrieve entity from database
            var mockRepo = new Mock <IRepository <GuidInfoEntity> >();

            mockRepo.Setup(r => r.GetAsync(It.IsAny <Expression <Func <GuidInfoEntity, bool> > >()))
            .ReturnsAsync(new List <GuidInfoEntity>()
            {
                dbEntity
            })
            .Verifiable();

            var mockContext = new Mock <IGuidRepositoryContext>();

            mockContext.Setup(r => r.GuidInfos)
            .Returns(mockRepo.Object);

            // make sure we get no cache hits
            var mockCache = new Mock <IEntityCache <GuidInfoEntity> >();

            mockCache.Setup(r => r.GetEntityAsync(It.IsAny <string>(), dbEntity.Guid.ToString()))
            .ReturnsAsync((GuidInfoEntity)null)
            .Verifiable();

            var controller = new GuidInfosController(mockContext.Object, mockCache.Object, _mockClock.Object);
            var info       = await controller.GetGuidInfoAsync(dbEntity.Guid);

            Assert.IsType <ActionResult <GuidInfo> >(info);
            var result = Assert.IsType <ObjectResult>(info.Result);

            Assert.Equal(result.StatusCode, (int)HttpStatusCode.Gone);
            var value = Assert.IsType <GuidApiError>(result.Value);

            Assert.Equal((int)value.Code, (int)GuidErrorCode.GuidExpired);

            mockRepo.Verify();
            mockCache.Verify();
        }
Ejemplo n.º 4
0
        public async Task GetGuidInfo_FromCache()
        {
            // return no hits from database
            var mockRepo = new Mock <IRepository <GuidInfoEntity> >();

            mockRepo.Setup(r => r.GetAsync(It.IsAny <Expression <Func <GuidInfoEntity, bool> > >()))
            .ReturnsAsync(new List <GuidInfoEntity>())
            .Verifiable();

            var mockContext = new Mock <IGuidRepositoryContext>();

            mockContext.Setup(r => r.GuidInfos)
            .Returns(mockRepo.Object);

            var cachedEntity = new GuidInfoEntity()
            {
                Guid   = System.Guid.NewGuid(),
                User   = "******",
                Expire = _now.AddDays(10)
            };

            // return entity from cache
            var mockCache = new Mock <IEntityCache <GuidInfoEntity> >();

            mockCache.Setup(r => r.GetEntityAsync(It.IsAny <string>(), cachedEntity.Guid.ToString()))
            .ReturnsAsync(cachedEntity)
            .Verifiable();

            var controller = new GuidInfosController(mockContext.Object, mockCache.Object, _mockClock.Object);
            var info       = await controller.GetGuidInfoAsync(cachedEntity.Guid);

            Assert.IsType <ActionResult <GuidInfo> >(info);
            var value = Assert.IsType <GuidInfo>(info.Value);

            Assert.Equal(value.Guid, cachedEntity.Guid.ToString("N").ToUpper());
            Assert.Equal(value.User, cachedEntity.User);
            Assert.Equal(value.Expire, cachedEntity.Expire);

            // verify we accessed cache
            mockCache.Verify(r => r.GetEntityAsync(It.IsAny <string>(), cachedEntity.Guid.ToString()), Times.Once);

            // but not database
            mockRepo.Verify(r => r.GetAsync(It.IsAny <Expression <Func <GuidInfoEntity, bool> > >()), Times.Never);
        }
Ejemplo n.º 5
0
        public async Task GetGuidInfo_NotFound()
        {
            // return no hits from database query
            var mockRepo = new Mock <IRepository <GuidInfoEntity> >();

            mockRepo.Setup(r => r.GetAsync(It.IsAny <Expression <Func <GuidInfoEntity, bool> > >()))
            .ReturnsAsync(new List <GuidInfoEntity>())
            .Verifiable();

            var mockContext = new Mock <IGuidRepositoryContext>();

            mockContext.Setup(r => r.GuidInfos)
            .Returns(mockRepo.Object)
            .Verifiable();

            // return no hits from cache
            var guid      = System.Guid.NewGuid();
            var mockCache = new Mock <IEntityCache <GuidInfoEntity> >();

            mockCache.Setup(r => r.GetEntityAsync(It.IsAny <string>(), guid.ToString()))
            .ReturnsAsync((GuidInfoEntity)null)
            .Verifiable();

            var controller = new GuidInfosController(mockContext.Object, mockCache.Object, _mockClock.Object);
            var info       = await controller.GetGuidInfoAsync(guid);

            Assert.IsType <ActionResult <GuidInfo> >(info);
            var result = Assert.IsType <NotFoundObjectResult>(info.Result);
            var value  = Assert.IsType <GuidApiError>(result.Value);

            Assert.Equal((int)value.Code, (int)GuidErrorCode.GuidNotFound);

            mockRepo.Verify();
            mockContext.Verify();
            mockCache.Verify();
        }