public void NormalRequest_SetsFilter()
        {
            var attribute = new VariationReportingActionFilterAttribute();

            attribute.OnActionExecuted(actionExecutedMock.Object);
            responseMock.VerifySet(r => r.Filter, Times.Once());
        }
        public void CannotSetFilter_SetsFlag()
        {
            responseMock.SetupSet(r => r.Filter).Throws <HttpException>();

            var attribute = new VariationReportingActionFilterAttribute();

            Assert.DoesNotThrow(() => attribute.OnActionExecuted(actionExecutedMock.Object));
            Assert.IsFalse((bool)httpContext.Items[Constants.VariationReportedHttpContextItemsKey]);
        }
        public void CannotSetFilter_NotReportedManually_ThrowsException()
        {
            responseMock.SetupSet(r => r.Filter).Throws <HttpException>();

            var attribute = new VariationReportingActionFilterAttribute();

            attribute.OnActionExecuted(actionExecutedMock.Object);

            Assert.IsFalse((bool)httpContext.Items[Constants.VariationReportedHttpContextItemsKey]);
            Assert.Throws <NotSupportedException>(() => attribute.OnResultExecuted(resultExecutedMock.Object));
        }
        public void CannotSetFilter_ReportedManually_AllGood()
        {
            responseMock.SetupSet(r => r.Filter).Throws <HttpException>();

            var attribute = new VariationReportingActionFilterAttribute();

            attribute.OnActionExecuted(actionExecutedMock.Object);
            HtmlHelperExtensions.RenderAbTestingScriptTags(htmlHelper);

            Assert.IsTrue((bool)httpContext.Items[Constants.VariationReportedHttpContextItemsKey]);
            Assert.DoesNotThrow(() => attribute.OnResultExecuted(resultExecutedMock.Object));
        }
        public void NormalRequest_AutomaticallyReported_ReportedOnce()
        {
            var attribute = new VariationReportingActionFilterAttribute();

            attribute.OnActionExecuted(actionExecutedMock.Object);
            ExecuteFilter(responseMock.Object.Filter);
            attribute.OnResultExecuted(resultExecutedMock.Object);

            //accessed id means it was used for reporting
            publishedContentVariationMock.Verify(e => e.GoogleExperimentId, Times.Once);
            publishedContentVariationMock.Verify(e => e.GoogleVariationId, Times.Once);
        }
        public void NormalRequest_ReportedManually_ReportedOnce()
        {
            var attribute = new VariationReportingActionFilterAttribute();

            attribute.OnActionExecuted(actionExecutedMock.Object);
            HtmlHelperExtensions.RenderAbTestingScriptTags(htmlHelper);
            attribute.OnResultExecuted(resultExecutedMock.Object);

            responseMock.VerifySet(r => r.Filter, Times.Once());

            ExecuteFilter(responseMock.Object.Filter);

            //accessed id means it was used for reporting
            publishedContentVariationMock.Verify(e => e.GoogleExperimentId, Times.Once);
            publishedContentVariationMock.Verify(e => e.GoogleVariationId, Times.Once);
        }