public void AddsHeadersToResponse()
        {
            IRepresentation representation = new HeadersOnlyRepresentation(new ETag("123"), ContentType.Atom);
            Output output = Output.For(representation);

            Assert.AreEqual("123", output.ETag);
            Assert.AreEqual("application/atom+xml", output.ContentType);
        }
        public void CallsInnerRepresentation()
        {
            IRepresentation innerRepresentation = new HeadersOnlyRepresentation(ContentType.Atom);
            IRepresentation representation = new HeadersOnlyRepresentation(innerRepresentation, new ETag("123"));
            Output output = Output.For(representation);

            Assert.AreEqual("123", output.ETag);
            Assert.AreEqual("application/atom+xml", output.ContentType);
        }
        public void ShouldAlwaysReturnOK()
        {
            IRepresentation representation = new HeadersOnlyRepresentation(new ETag("etag"));

            ICondition condition = NullCondition.Instance;
            IResponse response = condition.CreateResponse(representation);

            Output output = Output.For(response);

            Assert.AreEqual(200, output.StatusCode);
            Assert.AreEqual("OK", output.StatusDescription);
        }
        public void IfETagMatchesShouldReturnNotModified()
        {
            IRepresentation representation = new HeadersOnlyRepresentation(new ETag("etag"));

            IfNoneMatch condition = new IfNoneMatch(new ETag("etag"));
            IResponse response = condition.CreateResponse(representation);

            Output output = Output.For(response);

            Assert.AreEqual(304, output.StatusCode);
            Assert.AreEqual("Not Modified", output.StatusDescription);
            Assert.AreEqual("etag", output.ETag);
        }
        public void IfETagDoesNotMatchShouldReturnOK()
        {
            IRepresentation representation = new HeadersOnlyRepresentation(new ETag("different-etag"));

            IfNoneMatch condition = new IfNoneMatch(new ETag("etag"));
            IResponse response = condition.CreateResponse(representation);

            Output output = Output.For(response);

            Assert.AreEqual(200, output.StatusCode);
            Assert.AreEqual("OK", output.StatusDescription);
            Assert.AreEqual("different-etag", output.ETag);
        }
        public void IfETagIsNotEmptyShouldReturnIfNoneMatchCondition()
        {
            string eTagValue = "xyz";
            IRepresentation representation = new HeadersOnlyRepresentation(new ETag(eTagValue));

            using (WebServer webServer = new WebServer("http://localhost:9998/"))
            {
                webServer.ExecuteRequestAndInvokeAssertions(
                    () => SendRequest(RequestUri, eTagValue),
                    requestWrapper =>
                        {
                            Assert.IsNotNull(requestWrapper);
                            Assert.IsInstanceOf(typeof (IfNoneMatch), requestWrapper.Condition);

                            Output output = Output.For(requestWrapper.Condition.CreateResponse(representation));

                            Assert.AreEqual(304, output.StatusCode);
                            Assert.AreEqual("Not Modified", output.StatusDescription);
                        });
            }
        }