public void ShouldProvideHttpStatusCodeUponRecievingResponse()
        {
            var httpResponseMessage = new HttpResponseMessage { StatusCode = HttpStatusCode.OK };

            dynamic resource = new RestfulieProxy(It.IsAny<IHttpClient>(), It.IsAny<IDynamicContentParserFactory>(), It.IsAny<IHttpMethodDiscoverer>())
            {
                LatestHttpResponseMessage = httpResponseMessage
            };

            Assert.AreEqual("200", resource.StatusCode);
        }
        public void ShouldDelegateToInternalDynamicObjectOnTryGetMemberReturningFalse()
        {
            var dynamicContentParserStub = new DynamicObjectStub { TryGetMemberDelegate = (GetMemberBinder getMemberBinder, out object result) => { result = null; return false; } };

            dynamic resource = new RestfulieProxy(It.IsAny<IHttpClient>(), It.IsAny<IDynamicContentParserFactory>(), It.IsAny<IHttpMethodDiscoverer>())
            {
                DynamicContentParser = dynamicContentParserStub
            };

            SharpShooting.Tests.TestHelpers.TryGetAndThrow(resource.AnyMember);
        }
        public void ShouldDelegateToInternalDynamicObjectOnTryGetMemberReturningTrue()
        {
            var dynamicContentParserStub = new DynamicObjectStub { TryGetMemberDelegate = (GetMemberBinder getMemberBinder, out object result) => { result = null; return true; } };

            dynamic resource = new RestfulieProxy(It.IsAny<IHttpClient>(), It.IsAny<IDynamicContentParserFactory>(), It.IsAny<IHttpMethodDiscoverer>())
            {
                DynamicContentParser = dynamicContentParserStub
            };

            Assert.IsNull(resource.AnyMember);
        }
        public void ShouldDoAGetHttpRequestToAtomLinkOnResourceAndShouldSetLatestHttpResponseMessage()
        {
            const string orderXml = "<?xml version='1.0' encoding='UTF-8'?>\r\n<order><id>1</id><atom:link rel='refresh' href='http://localhost/orders/1' xmlns:atom='http://www.w3.org/2005/Atom'/></order>";

            _httpClientMock.SetupHttpClientMock(new HttpResponseMessage());

            _httpMethodDiscoveryMock.Setup(it => it.MethodFor(It.IsAny<string>())).Returns(HttpMethod.GET);

            dynamic order = new RestfulieProxy(_httpClientMock.Object, _dynamicContentParserFactoryMock.Object, _httpMethodDiscoveryMock.Object)
            {
                DynamicContentParser = new DynamicXmlContentParser(orderXml),
            };

            order.refresh();

            _httpClientMock.Verify(it => it.Send(HttpMethod.GET, new Uri("http://localhost/orders/1"), It.IsAny<RequestHeaders>(), It.IsAny<HttpContent>()), Times.Once());
        }
        public void ShouldDoMakeHttpRequestWithHttpMethodDiscovery()
        {
            SetupHttpClientMock(new HttpResponseMessage());

            dynamic resource = new RestfulieProxy(_httpClientMock.Object, _dynamicContentParserFactoryMock.Object, _httpMethodDiscoveryMock.Object)
            {
                DynamicContentParser = new DynamicObjectStub()
            };

            resource.AnyMethod();

            _httpMethodDiscoveryMock.Verify(it => it.MethodFor(It.IsAny<string>()));
        }
        public void ShouldSetLatestHttpResponseMessageWhenFollowingAtomLink()
        {
            const string orderXml = "<?xml version='1.0' encoding='UTF-8'?>\r\n<order><id>1</id><atom:link rel='refresh' href='http://localhost/orders/1' xmlns:atom='http://www.w3.org/2005/Atom'/></order>";

            var firstHttpResponseMesage = new HttpResponseMessage();
            var secondHttpResponseMesage = new HttpResponseMessage();

            SetupHttpClientMock(secondHttpResponseMesage);

            dynamic order = new RestfulieProxy(_httpClientMock.Object, _dynamicContentParserFactoryMock.Object, _httpMethodDiscoveryMock.Object)
            {
                DynamicContentParser = new DynamicXmlContentParser(orderXml),
                LatestHttpResponseMessage = firstHttpResponseMesage
            };

            dynamic orderAfterRefresh = order.refresh();

            Assert.AreSame((order as RestfulieProxy).LatestHttpResponseMessage, firstHttpResponseMesage);
            Assert.AreSame((orderAfterRefresh as RestfulieProxy).LatestHttpResponseMessage, secondHttpResponseMesage);
        }