コード例 #1
0
        public void Returns_callback_gets_request_data()
        {
            var doc     = new XDoc("doc").Elem("foo", StringUtil.CreateAlphaNumericKey(6));
            var success = new XDoc("yay");
            var uri     = new XUri("http://mock/foo/").With("foo", "baz");

            MockPlug.Setup(new XUri("http://mock/foo")).Returns(invocation => {
                if (invocation.Verb != "POST")
                {
                    return(DreamMessage.BadRequest("wrong verb: " + invocation.Verb));
                }
                if (invocation.Uri != uri)
                {
                    return(DreamMessage.BadRequest("wrong uri: " + invocation.Uri));
                }
                if (invocation.Request.Headers["header"] != "value")
                {
                    return(DreamMessage.BadRequest("wrong header value"));
                }
                if (invocation.Request.ToDocument() != doc)
                {
                    return(DreamMessage.BadRequest("wrong body"));
                }
                return(DreamMessage.Ok(success));
            });
            var msg = Plug.New(uri).WithHeader("header", "value").Post(doc, new Result <DreamMessage>()).Wait();

            Assert.IsTrue(msg.IsSuccessful, msg.ToDocument().ToPrettyString());
            Assert.AreEqual(success, msg.ToDocument());
        }
コード例 #2
0
        public void Can_verify_call()
        {
            var mock = MockPlug.Setup(new XUri("http://mock/foo")).ExpectCalls(Times.AtLeastOnce());

            Assert.IsTrue(Plug.New("http://mock/foo").Get(new Result <DreamMessage>()).Wait().IsSuccessful);
            mock.Verify();
        }
コード例 #3
0
        public void Can_add_headers_to_the_response_before_specifying_message()
        {
            MockPlug.Setup(new XUri("http://mock/foo")).WithResponseHeader("foo", "bar").Returns(DreamMessage.NotModified());
            var msg = Plug.New("http://mock/foo").Get(new Result <DreamMessage>()).Wait();

            Assert.AreEqual(DreamStatus.NotModified, msg.Status);
            Assert.AreEqual("bar", msg.Headers["foo"]);
        }
コード例 #4
0
        public void Can_add_headers_to_the_response()
        {
            MockPlug.Setup(new XUri("http://mock/foo")).WithResponseHeader("foo", "bar");
            var msg = Plug.New("http://mock/foo").Get(new Result <DreamMessage>()).Wait();

            Assert.IsTrue(msg.IsSuccessful);
            Assert.AreEqual("bar", msg.Headers["foo"]);
        }
コード例 #5
0
        public void Can_return_XDoc()
        {
            var doc = new XDoc("doc").Elem("foo", StringUtil.CreateAlphaNumericKey(6));

            MockPlug.Setup(new XUri("http://mock/foo")).Returns(doc);
            var msg = Plug.New("http://mock/foo").Get(new Result <DreamMessage>()).Wait();

            Assert.IsTrue(msg.IsSuccessful);
            Assert.AreEqual(doc, msg.ToDocument());
        }
コード例 #6
0
        public void Can_provide_callback_for_custom_body_check_and_pick_mockplug_based_on_its_return()
        {
            var a = MockPlug.Setup(new XUri("http://mock/foo")).WithMessage(msg => false);
            var b = MockPlug.Setup(new XUri("http://mock/foo")).WithMessage(msg => true);
            var c = MockPlug.Setup(new XUri("http://mock/foo")).WithMessage(msg => false);

            Assert.IsTrue(Plug.New("http://mock/foo/").Post(new XDoc("doc"), new Result <DreamMessage>()).Wait().IsSuccessful);
            a.Verify(2.Seconds(), Times.Never());
            c.Verify(0.Seconds(), Times.Never());
            b.Verify(Times.Once());
        }
コード例 #7
0
        public void Can_pick_appropriate_MockPlug_based_on_body()
        {
            var a = MockPlug.Setup(new XUri("http://mock/foo")).WithBody(new XDoc("doc").Elem("x", "a"));
            var b = MockPlug.Setup(new XUri("http://mock/foo")).WithBody(new XDoc("doc").Elem("x", "b"));
            var c = MockPlug.Setup(new XUri("http://mock/foo")).WithBody(new XDoc("doc").Elem("x", "c"));

            Assert.IsTrue(Plug.New("http://mock/foo/").Post(new XDoc("doc").Elem("x", "b"), new Result <DreamMessage>()).Wait().IsSuccessful);
            a.Verify(2.Seconds(), Times.Never());
            c.Verify(0.Seconds(), Times.Never());
            b.Verify(Times.Once());
        }
コード例 #8
0
        public void Can_pick_appropriate_MockPlug_based_on_most_less_specific_header_with_value_match()
        {
            var a = MockPlug.Setup(new XUri("http://mock/foo")).WithHeader("bar", "a");
            var b = MockPlug.Setup(new XUri("http://mock/foo")).WithHeader("bar", "a").WithHeader("x", "1");
            var c = MockPlug.Setup(new XUri("http://mock/foo")).WithHeader("bar", "a").WithHeader("x", "2").WithHeader("y", "2");

            Assert.IsTrue(Plug.New("http://mock/foo/").WithHeader("bar", "a").WithHeader("x", "1").Get(new Result <DreamMessage>()).Wait().IsSuccessful);
            a.Verify(2.Seconds(), Times.Never());
            c.Verify(0.Seconds(), Times.Never());
            b.Verify(Times.Once());
        }
コード例 #9
0
        public void Can_pick_appropriate_MockPlug_based_on_header_values_via_callback()
        {
            var a = MockPlug.Setup(new XUri("http://mock/foo")).WithHeader("bar", x => x == "a");
            var b = MockPlug.Setup(new XUri("http://mock/foo")).WithHeader("bar", x => x == "b");
            var c = MockPlug.Setup(new XUri("http://mock/foo")).WithHeader("bar", x => x == "c");

            Assert.IsTrue(Plug.New("http://mock/foo/").WithHeader("bar", "b").Get(new Result <DreamMessage>()).Wait().IsSuccessful);
            a.Verify(2.Seconds(), Times.Never());
            c.Verify(0.Seconds(), Times.Never());
            b.Verify(Times.Once());
        }
コード例 #10
0
        public void Can_pick_appropriate_MockPlug_based_on_headers()
        {
            var bar = MockPlug.Setup(new XUri("http://mock/foo")).WithHeader("bar", "a");
            var eek = MockPlug.Setup(new XUri("http://mock/foo")).WithHeader("eek", "b");
            var baz = MockPlug.Setup(new XUri("http://mock/foo")).WithHeader("baz", "c");

            Assert.IsTrue(Plug.New("http://mock/foo/").WithHeader("eek", "b").Get(new Result <DreamMessage>()).Wait().IsSuccessful);
            bar.Verify(2.Seconds(), Times.Never());
            baz.Verify(0.Seconds(), Times.Never());
            eek.Verify(Times.Once());
        }
コード例 #11
0
        public void Can_pick_appropriate_MockPlug_based_on_subpath()
        {
            var a = MockPlug.Setup(new XUri("http://mock/foo")).At("bar");
            var b = MockPlug.Setup(new XUri("http://mock/foo")).At("eek");
            var c = MockPlug.Setup(new XUri("http://mock/foo")).At("baz");

            Assert.IsTrue(Plug.New("http://mock/foo/eek").Get(new Result <DreamMessage>()).Wait().IsSuccessful);
            a.Verify(2.Seconds(), Times.Never());
            c.Verify(0.Seconds(), Times.Never());
            b.Verify(Times.Once());
        }
コード例 #12
0
        public void Specific_verb_gets_picked_over_wildcard2()
        {
            var a = MockPlug.Setup(new XUri("http://mock/foo")).Verb("DELETE");
            var b = MockPlug.Setup(new XUri("http://mock/foo")).Verb("GET");
            var c = MockPlug.Setup(new XUri("http://mock/foo"));

            Assert.IsTrue(Plug.New("http://mock/foo").Get(new Result <DreamMessage>()).Wait().IsSuccessful);
            a.Verify(2.Seconds(), Times.Never());
            c.Verify(0.Seconds(), Times.Never());
            b.Verify(Times.Once());
        }
コード例 #13
0
        public void Extraneous_headers_are_not_considered_in_matching()
        {
            var a = MockPlug.Setup(new XUri("http://mock/foo")).WithHeader("bar", "a");
            var b = MockPlug.Setup(new XUri("http://mock/foo")).WithHeader("bar", "a").WithHeader("x", "1");
            var c = MockPlug.Setup(new XUri("http://mock/foo")).WithHeader("bar", "a").WithHeader("x", "2").WithHeader("y", "2");

            Assert.IsTrue(Plug.New("http://mock/foo/").WithHeader("bar", "a").WithHeader("x", "1").WithHeader("y", "2").Get(new Result <DreamMessage>()).Wait().IsSuccessful);
            a.Verify(2.Seconds(), Times.Never());
            c.Verify(0.Seconds(), Times.Never());
            b.Verify(Times.Once());
        }
コード例 #14
0
        public void Can_add_headers_to_the_response_before_specifying_document()
        {
            var doc = new XDoc("doc").Elem("foo", StringUtil.CreateAlphaNumericKey(6));

            MockPlug.Setup(new XUri("http://mock/foo")).WithResponseHeader("foo", "bar").Returns(doc);
            var msg = Plug.New("http://mock/foo").Get(new Result <DreamMessage>()).Wait();

            Assert.IsTrue(msg.IsSuccessful);
            Assert.AreEqual("bar", msg.Headers["foo"]);
            Assert.AreEqual(doc, msg.ToDocument());
        }
コード例 #15
0
        public void Returns_callback_gets_response_headers_if_added_after_callback()
        {
            var success = new XDoc("yay");

            MockPlug.Setup(new XUri("http://mock/foo"))
            .Returns(invocation => {
                return(invocation.ResponseHeaders["foo"] != "bar" ? DreamMessage.BadRequest("wrong response header") : DreamMessage.Ok(success));
            })
            .WithResponseHeader("foo", "bar");
            var msg = Plug.New("http://mock/foo/").Get(new Result <DreamMessage>()).Wait();

            Assert.IsTrue(msg.IsSuccessful, msg.ToDocument().ToPrettyString());
            Assert.AreEqual(success, msg.ToDocument());
        }
コード例 #16
0
        public void Can_differentiate_multiple_plugs_and_their_call_counts()
        {
            var bar = MockPlug.Setup(new XUri("http://mock/foo")).At("bar").ExpectAtLeastOneCall();
            var eek = MockPlug.Setup(new XUri("http://mock/foo")).At("eek").With("a", "b").ExpectCalls(Times.Exactly(3));
            var baz = MockPlug.Setup(new XUri("http://mock/foo")).At("eek").With("b", "c").ExpectAtLeastOneCall();

            Assert.IsTrue(Plug.New("http://mock/foo/bar").Get(new Result <DreamMessage>()).Wait().IsSuccessful);
            Assert.IsTrue(Plug.New("http://mock/foo/bar").Get(new Result <DreamMessage>()).Wait().IsSuccessful);
            Assert.IsTrue(Plug.New("http://mock/foo/eek").With("a", "b").Get(new Result <DreamMessage>()).Wait().IsSuccessful);
            Assert.IsTrue(Plug.New("http://mock/foo/eek").With("a", "b").Get(new Result <DreamMessage>()).Wait().IsSuccessful);
            Assert.IsTrue(Plug.New("http://mock/foo/eek").With("a", "b").Get(new Result <DreamMessage>()).Wait().IsSuccessful);
            Assert.IsTrue(Plug.New("http://mock/foo/eek").With("b", "c").Get(new Result <DreamMessage>()).Wait().IsSuccessful);
            bar.Verify();
            baz.Verify();
            eek.Verify();
        }
コード例 #17
0
        public void Can_mock_a_request_with_a_stream_body()
        {
            var tmp     = Path.GetTempFileName();
            var payload = "blahblah";

            File.WriteAllText(tmp, payload);
            var message = DreamMessage.FromFile(tmp);
            var uri     = new XUri("http://mock/post/stream");

            MockPlug.Setup(uri).Verb("POST")
            .WithMessage(m => m.ToText() == payload)
            .ExpectAtLeastOneCall();
            var response = Plug.New(uri).Post(message, new Result <DreamMessage>()).Wait();

            response.AssertSuccess();
            MockPlug.VerifyAll(1.Seconds());
        }
コード例 #18
0
        public void MockPlug_without_call_expectation_does_not_throw_on_Verify()
        {
            var mock = MockPlug.Setup(new XUri("http://mock/foo"));

            mock.Verify(TimeSpan.FromSeconds(3));
        }
コード例 #19
0
        public void Can_verify_lack_of_call()
        {
            var mock = MockPlug.Setup(new XUri("http://mock/foo")).ExpectCalls(Times.Never());

            mock.Verify(TimeSpan.FromSeconds(3));
        }