public void Then_The_Cookie_Data_Is_Retrieved(
            string testCookieName,
            string content)
        {
            //Arrange
            var mockDataProtector = new Mock <IDataProtector>();

            mockDataProtector.Setup(sut => sut.Unprotect(It.IsAny <byte[]>())).Returns(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(content)));
            var mockDataProtectionProvider = new Mock <IDataProtectionProvider>();

            mockDataProtectionProvider.Setup(s => s.CreateProtector(It.IsAny <string>())).Returns(mockDataProtector.Object);
            var featureMock          = new Mock <IRequestCookiesFeature>();
            var mockHeaderDictionary = new RequestCookieCollection(new Dictionary <string, string> {
                { testCookieName, Convert.ToBase64String(Encoding.UTF8.GetBytes(content)) }
            });

            featureMock.Setup(x => x.Cookies).Returns(mockHeaderDictionary);
            var responseMock = new FeatureCollection();

            responseMock.Set(featureMock.Object);
            var context = new DefaultHttpContext(responseMock);
            var mockHttpContextAccessor = new Mock <IHttpContextAccessor>();

            mockHttpContextAccessor.Setup(_ => _.HttpContext).Returns(context);
            var service = new CookieStorageService <string>(mockHttpContextAccessor.Object, mockDataProtectionProvider.Object);

            //Act
            var actual = service.Get(testCookieName);

            //Assert
            actual.Should().NotBeNull();
            actual.Should().Be(content);
        }
        public void Then_The_Cookie_Is_Deleted_If_Exists(
            string testCookieName,
            string content,
            Mock <IDataProtectionProvider> provider)
        {
            var featureMock            = new Mock <IRequestCookiesFeature>();
            var responseCookiesFeature = new Mock <IResponseCookiesFeature>();
            var cookieDictionary       = new RequestCookieCollection(new Dictionary <string, string> {
                { testCookieName, Convert.ToBase64String(Encoding.UTF8.GetBytes(content)) }
            });
            var mockHeaderDictionary         = new HeaderDictionary();
            var mockResponseHeaderDictionary = new ResponseCookies(mockHeaderDictionary, Mock.Of <ObjectPool <StringBuilder> >());

            featureMock.Setup(x => x.Cookies).Returns(cookieDictionary);
            responseCookiesFeature.Setup(x => x.Cookies).Returns(mockResponseHeaderDictionary);

            var responseMock = new FeatureCollection();

            responseMock.Set(featureMock.Object);
            responseMock.Set(responseCookiesFeature.Object);
            var context = new DefaultHttpContext(responseMock);
            var mockHttpContextAccessor = new Mock <IHttpContextAccessor>();

            mockHttpContextAccessor.Setup(_ => _.HttpContext).Returns(context);
            var service = new CookieStorageService <string>(mockHttpContextAccessor.Object, provider.Object);

            //Act
            service.Delete(testCookieName);

            //Assert
            var actual       = mockHeaderDictionary["set-cookie"].ToArray().First().Split(";");
            var actualExpiry = DateTime.Parse(actual.Skip(1).First().Split("=").Last());

            Assert.IsTrue(actualExpiry < DateTime.UtcNow);
        }
        public void Then_The_Data_Is_Stored_For_A_Day(
            string testString,
            string testCookieName,
            Mock <IDataProtectionProvider> provider)
        {
            //Arrange
            var featureMock          = new Mock <IHttpResponseFeature>();
            var mockHeaderDictionary = new HeaderDictionary();

            featureMock.Setup(x => x.Headers).Returns(mockHeaderDictionary);
            var responseMock = new FeatureCollection();

            responseMock.Set(featureMock.Object);
            var context = new DefaultHttpContext(responseMock);
            var mockHttpContextAccessor = new Mock <IHttpContextAccessor>();

            mockHttpContextAccessor.Setup(_ => _.HttpContext).Returns(context);
            var service = new CookieStorageService <string>(mockHttpContextAccessor.Object, provider.Object);

            //Act
            service.Create(testString, testCookieName, 1);

            //Assert
            var actual = mockHeaderDictionary["set-cookie"].ToArray().First().Split(";");

            actual.First().Should().Contain(testCookieName);
            var actualExpiry = DateTime.Parse(actual.Skip(1).First().Split("=").Last());

            Assert.IsTrue(actualExpiry > DateTime.UtcNow.AddHours(23).AddMinutes(59));
        }
        public void Arrange()
        {
            _cookieService = new Mock <ICookieService <TestStorageClass> >();

            _httpContextBase = new Mock <HttpContextBase>();

            _cookieStorageService = new CookieStorageService <TestStorageClass>(_cookieService.Object, _httpContextBase.Object);
        }