public async Task Should_Process_Query()
        {
            const string expectedResult = "value";
            var          query          = new StubQuery <string>();
            var          handler        = Substitute.For <IQueryHandler <StubQuery <string>, string> >();

            handler
            .HandleAsync(Arg.Any <StubQuery <string> >(), Arg.Any <CancellationToken>())
            .Returns(expectedResult);

            using (var container = new Container())
            {
                container.Register(() => handler);
                container.Verify();

                IProcessor processor    = new SimpleInjectorProcessor(container);
                var        actualResult = await processor.ProcessAsync(query);

                await handler
                .Received()
                .HandleAsync(Arg.Any <StubQuery <string> >(), Arg.Any <CancellationToken>());

                Assert.Equal(expectedResult, actualResult);
            }
        }
        public async Task WhenRequestIsGetThenParametersAreAddedToUrl()
        {
            var settings    = TestConfiguration.GetSettings();
            var credentials = TestConfiguration.GetCredentials();

            var query = new StubQuery
            {
                Item1 = "Value"
            };

            using (var testHttpListener = new TestHttpListener(settings.URL, HttpStatusCode.OK, null))
            {
                bool containsItemInUrl = false;
                testHttpListener.MessageReceived += (sender, requestEventArgs) =>
                {
                    var request = requestEventArgs.Request;
                    containsItemInUrl = request.Url.Query.Contains("Item1") &&
                                        request.Url.Query.Contains("Value");
                };

                OauthRequestSender oauthSender = new OauthRequestSender(credentials, settings.URL);
                var apiRequest = new Request <bool>
                {
                    Uri        = "/fake/api",
                    HTTPMethod = HttpMethod.Get,
                    Query      = query
                };
                var user = await oauthSender.SendRequestAsync(apiRequest);

                Assert.IsTrue(containsItemInUrl);
            }
        }
예제 #3
0
        public void OneItemPerContentItemShouldBeCreated()
        {
            var query = new StubQuery(new[] {
                new ContentItem(),
                new ContentItem(),
            });

            var builder = new ContainerBuilder();

            builder.RegisterType <FeedController>();
            builder.RegisterType <RssFeedBuilder>().As <IFeedBuilderProvider>();
            builder.RegisterInstance(new StubItemBuilder()).As <IFeedItemBuilder>();
            builder.RegisterInstance(query).As <IFeedQueryProvider>();
            var container = builder.Build();

            var controller = container.Resolve <FeedController>();

            controller.ValueProvider = Values.From(new { });

            var result = controller.Index("rss");

            Assert.That(result, Is.Not.Null);
            Assert.That(result, Is.InstanceOf <RssResult>());

            var doc   = ((RssResult)result).Document;
            var items = doc.Elements("rss").Elements("channel").Elements("item");

            Assert.That(items.Count(), Is.EqualTo(2));
        }
예제 #4
0
        public void RssFeedShouldBeStructuredAppropriately()
        {
            var query = new StubQuery(Enumerable.Empty <ContentItem>());

            var builder = new ContainerBuilder();

            builder.RegisterType <FeedController>();
            builder.RegisterType <RssFeedBuilder>().As <IFeedBuilderProvider>();
            builder.RegisterInstance(query).As <IFeedQueryProvider>();
            builder.RegisterInstance(new StubItemBuilder()).As <IFeedItemBuilder>();
            var container = builder.Build();

            var controller = container.Resolve <FeedController>();

            controller.ValueProvider = Values.From(new { });

            var result = controller.Index("rss");

            Assert.That(result, Is.Not.Null);
            Assert.That(result, Is.InstanceOf <RssResult>());

            var doc = ((RssResult)result).Document;

            Assert.That(doc.Root.Name, Is.EqualTo(XName.Get("rss")));
            Assert.That(doc.Root.Elements().Single().Name, Is.EqualTo(XName.Get("channel")));
        }
예제 #5
0
        public void CorePartValuesAreExtracted()
        {
            var clock = new StubClock();
            var hello = new ContentItemBuilder(new ContentTypeDefinitionBuilder().Named("hello").Build())
                        .Weld <CommonPart>()
                        .Weld <TitlePart>()
                        .Weld <BodyPart>()
                        .Weld <InfosetPart>()
                        .Build();

            hello.As <CommonPart>().Record = new CommonPartRecord();
            hello.As <TitlePart>().Record  = new TitlePartRecord();
            hello.As <BodyPart>().Record   = new BodyPartRecord();

            hello.As <CommonPart>().PublishedUtc = clock.UtcNow;
            hello.As <TitlePart>().Title         = "alpha";
            // hello.As<RoutePart>().Slug = "beta";
            hello.As <BodyPart>().Text = "gamma";

            var query = new StubQuery(new[] {
                hello,
            });

            var mockContentManager = new Mock <IContentManager>();

            mockContentManager.Setup(x => x.GetItemMetadata(It.IsAny <IContent>()))
            .Returns(new ContentItemMetadata()
            {
                DisplayText = "foo"
            });

            var builder = new ContainerBuilder();

            //builder.RegisterModule(new ImplicitCollectionSupportModule());
            builder.RegisterType <FeedController>();
            builder.RegisterInstance(new RouteCollection());
            builder.RegisterInstance(mockContentManager.Object).As <IContentManager>();
            builder.RegisterType <RssFeedBuilder>().As <IFeedBuilderProvider>();
            builder.RegisterType <CorePartsFeedItemBuilder>().As <IFeedItemBuilder>();
            builder.RegisterInstance(query).As <IFeedQueryProvider>();
            var container = builder.Build();

            var controller = container.Resolve <FeedController>();

            controller.ValueProvider = Values.From(new { });

            var result = controller.Index("rss");

            Assert.That(result, Is.Not.Null);
            Assert.That(result, Is.InstanceOf <RssResult>());

            var doc  = ((RssResult)result).Document;
            var item = doc.Elements("rss").Elements("channel").Elements("item").Single();

            Assert.That(item.Element("title").Value, Is.EqualTo("foo"));
            Assert.That(item.Element("description").Value, Is.EqualTo("gamma"));
        }
 public ApiRequestSenderTest()
 {
     _oAuthServiceMock = new Mock <IOAuthService>();
     _httpSenderMock   = new Mock <IHttpRequestSender>();
     _query            = new StubQuery
     {
         Item1 = _queryValue
     };
     _expectedResponseBody = new List <string> {
         "foo", "bar"
     };
 }
 public ApiRequestSenderTest()
 {
     _oAuthServiceMock = new Mock <IOAuthService>();
     _bynderClientMock = new Mock <IBynderClient>();
     _bynderClientMock
     .Setup(bynderClient => bynderClient.GetOAuthService())
     .Returns(_oAuthServiceMock.Object);
     _httpSenderMock = new Mock <IHttpRequestSender>();
     _query          = new StubQuery
     {
         Item1 = _queryValue
     };
     _expectedResponseBody = new List <string> {
         "foo", "bar"
     };
 }
예제 #8
0
        public async Task WhenCredentialInvalidTwoRequestsSent()
        {
            var httpSenderMock = new Mock <IHttpRequestSender>();

            var query = new StubQuery
            {
                Item1 = "Value"
            };
            var accessToken = "access_token";

            using (ApiRequestSender apiRequestSender = new ApiRequestSender(
                       new Configuration {
                BaseUrl = new Uri("https://example.bynder.com"),
            },
                       GetCredentials(false, accessToken),
                       httpSenderMock.Object
                       ))
            {
                var apiRequest = new ApiRequest <bool>()
                {
                    Path       = "/fake/api",
                    HTTPMethod = HttpMethod.Get,
                    Query      = query
                };

                await apiRequestSender.SendRequestAsync(apiRequest);

                httpSenderMock.Verify(sender => sender.SendHttpRequest(
                                          It.Is <HttpRequestMessage>(
                                              req => req.RequestUri.PathAndQuery.Contains("/oauth2/token") &&
                                              req.Method == HttpMethod.Post
                                              )));

                httpSenderMock.Verify(sender => sender.SendHttpRequest(
                                          It.Is <HttpRequestMessage>(
                                              req => req.RequestUri.PathAndQuery.Contains("/fake/api") &&
                                              req.Method == HttpMethod.Get &&
                                              req.Headers.Authorization.ToString() == $"Bearer {accessToken}" &&
                                              req.RequestUri.Query.Contains("Item1=Value")
                                              )));

                httpSenderMock.Verify(sender => sender.SendHttpRequest(
                                          It.IsAny <HttpRequestMessage>()
                                          ), Times.Exactly(2));
            }
        }
        public async Task Should_Not_Wrap_Exception_When_QueryHandler_Throws_Exception()
        {
            var query   = new StubQuery <object>();
            var handler = Substitute.For <IQueryHandler <StubQuery <object>, object> >();

            handler
            .HandleAsync(Arg.Any <StubQuery <object> >(), Arg.Any <CancellationToken>())
            .Throws(new ArgumentException());

            using (var container = new Container())
            {
                container.Register(() => handler);
                container.Verify();

                IProcessor processor = new SimpleInjectorProcessor(container);
                await Assert.ThrowsAsync <ArgumentException>(async() => await processor.ProcessAsync(query));
            }
        }
예제 #10
0
        public async Task WhenRequestIsPostThenParametersAreAddedToContent()
        {
            var httpSenderMock = new Mock <IHttpRequestSender>();
            var query          = new StubQuery
            {
                Item1 = "Value"
            };
            var accessToken = "access_token";

            using (ApiRequestSender apiRequestSender = new ApiRequestSender(
                       new Configuration {
                BaseUrl = new Uri("https://example.bynder.com"),
            },
                       GetCredentials(true, accessToken),
                       httpSenderMock.Object
                       ))
            {
                var apiRequest = new ApiRequest <bool>()
                {
                    Path       = "/fake/api",
                    HTTPMethod = HttpMethod.Post,
                    Query      = query
                };

                await apiRequestSender.SendRequestAsync(apiRequest);

                httpSenderMock.Verify(sender => sender.SendHttpRequest(
                                          It.Is <HttpRequestMessage>(
                                              req => req.RequestUri.PathAndQuery.Contains("/fake/api") &&
                                              req.Method == HttpMethod.Post &&
                                              req.Headers.Authorization.ToString() == $"Bearer {accessToken}" &&
                                              req.Content.ReadAsStringAsync().Result.Contains("Item1=Value")
                                              )));

                httpSenderMock.Verify(sender => sender.SendHttpRequest(
                                          It.IsAny <HttpRequestMessage>()
                                          ), Times.Once);
            }
        }
예제 #11
0
        public void RssFeedShouldBeStructuredAppropriately() {
            var query = new StubQuery(Enumerable.Empty<ContentItem>());

            var builder = new ContainerBuilder();
            builder.RegisterType<FeedController>();
            builder.RegisterType<RssFeedBuilder>().As<IFeedBuilderProvider>();
            builder.RegisterInstance(query).As<IFeedQueryProvider>();
            builder.RegisterInstance(new StubItemBuilder()).As<IFeedItemBuilder>();
            var container = builder.Build();

            var controller = container.Resolve<FeedController>();
            controller.ValueProvider = Values.From(new { });

            var result = controller.Index("rss");
            Assert.That(result, Is.Not.Null);
            Assert.That(result, Is.InstanceOf<RssResult>());

            var doc = ((RssResult)result).Document;
            Assert.That(doc.Root.Name, Is.EqualTo(XName.Get("rss")));
            Assert.That(doc.Root.Elements().Single().Name, Is.EqualTo(XName.Get("channel")));
        }
예제 #12
0
        public void CorePartValuesAreExtracted() {
            var clock = new StubClock();
            var hello = new ContentItemBuilder(new ContentTypeDefinitionBuilder().Named("hello").Build())
                .Weld<CommonPart>()
                .Weld<TitlePart>()
                .Weld<BodyPart>()
                .Weld<InfosetPart>()
                .Build();
            hello.As<CommonPart>().Record = new CommonPartRecord();
            hello.As<TitlePart>().Record = new TitlePartRecord();
            hello.As<BodyPart>().Record = new BodyPartRecord();

            hello.As<CommonPart>().PublishedUtc = clock.UtcNow;
            hello.As<TitlePart>().Title = "alpha";
            // hello.As<RoutePart>().Slug = "beta";
            hello.As<BodyPart>().Text = "gamma";

            var query = new StubQuery(new[] {
                hello,
            });

            var mockContentManager = new Mock<IContentManager>();
            mockContentManager.Setup(x => x.GetItemMetadata(It.IsAny<IContent>()))
                .Returns(new ContentItemMetadata() { DisplayText = "foo" });

            var builder = new ContainerBuilder();
            //builder.RegisterModule(new ImplicitCollectionSupportModule());
            builder.RegisterType<FeedController>();
            builder.RegisterInstance(new RouteCollection());
            builder.RegisterInstance(mockContentManager.Object).As<IContentManager>();
            builder.RegisterType<RssFeedBuilder>().As<IFeedBuilderProvider>();
            builder.RegisterType<CorePartsFeedItemBuilder>().As<IFeedItemBuilder>();
            builder.RegisterInstance(query).As<IFeedQueryProvider>();
            var container = builder.Build();

            var controller = container.Resolve<FeedController>();
            controller.ValueProvider = Values.From(new { });

            var result = controller.Index("rss");
            Assert.That(result, Is.Not.Null);
            Assert.That(result, Is.InstanceOf<RssResult>());

            var doc = ((RssResult)result).Document;
            var item = doc.Elements("rss").Elements("channel").Elements("item").Single();
            Assert.That(item.Element("title").Value, Is.EqualTo("foo"));
            Assert.That(item.Element("description").Value, Is.EqualTo("gamma"));

        }
예제 #13
0
        public void OneItemPerContentItemShouldBeCreated() {
            var query = new StubQuery(new[] {
                new ContentItem(),
                new ContentItem(),
            });

            var builder = new ContainerBuilder();
            builder.RegisterType<FeedController>();
            builder.RegisterType<RssFeedBuilder>().As<IFeedBuilderProvider>();
            builder.RegisterInstance(new StubItemBuilder()).As<IFeedItemBuilder>();
            builder.RegisterInstance(query).As<IFeedQueryProvider>();
            var container = builder.Build();

            var controller = container.Resolve<FeedController>();
            controller.ValueProvider = Values.From(new { });

            var result = controller.Index("rss");
            Assert.That(result, Is.Not.Null);
            Assert.That(result, Is.InstanceOf<RssResult>());

            var doc = ((RssResult)result).Document;
            var items = doc.Elements("rss").Elements("channel").Elements("item");
            Assert.That(items.Count(), Is.EqualTo(2));
        }