public void GetLinkForNoRouteDataThrows([Frozen]HttpRequestMessage request,
     UrlHelper sut)
 {
     request.RequestUri = new Uri(request.RequestUri, "api/foo/");
     Assert.Throws<InvalidOperationException>(() => sut.GetLink<FooController>(r => r.GetDefault()));
 }
        public void GetLinkWithCustomRouteAndDispatcherReturnsCorrectResult(
            [Frozen]HttpRequestMessage request,
            [Frozen(As = typeof(IRouteValuesQuery))]ScalarRouteValuesQuery dummyQuery,
            [Frozen]Mock<IRouteDispatcher> dispatcherStub,
            string routeName,
            [Greedy]RouteLinker forComparison,
            UrlHelper sut,
            int ploeh,
            string fnaah)
        {
            // Arrange
            request.AddDefaultRoute();
            request.AddRoute(
                name: routeName,
                routeTemplate: "foo/{ploeh}/{fnaah}",
                defaults: new { });

            var method = Reflect<FooController>
                .GetMethod(c => c.GetWithPloehAndFnaah(ploeh, fnaah));
            dispatcherStub
                .Setup(d =>
                    d.Dispatch(
                        It.Is<MethodCallExpression>(exp => method.Equals(exp.Method)),
                        It.IsAny<IDictionary<string, object>>()))
                .Returns((MethodCallExpression _, IDictionary<string, object> routeValues) =>
                    new Rouple(routeName, routeValues));

            var expected = forComparison.GetUri<FooController>(r =>
              r.GetWithPloehAndFnaah(ploeh, fnaah));

            // Act
            var actual = sut.GetLink<FooController>(r =>
                r.GetWithPloehAndFnaah(ploeh, fnaah), dispatcherStub.Object);

            //Assert
            Assert.Equal(expected, actual);
        }
        public void GetLinkDoesNotMutateExistingRouteData(
            [Frozen]HttpRequestMessage request,
            UrlHelper sut)
        {
            request.AddDefaultRoute();
            var expected = new HashSet<KeyValuePair<string, object>>(
                request.GetRouteData().Values);

            sut.GetLink<FooController>(r => r.GetDefault());

            var actual = request.GetRouteData().Values.ToList();
            Assert.True(expected.SetEquals(actual));
        }
 public void GetLinkThrowsExceptionForNullExpression(
     [Frozen]HttpRequestMessage request,
     RouteLinker forComparison,
     UrlHelper sut)
 {
     request.AddDefaultRoute();
     Assert.Throws(typeof(ArgumentNullException), () => sut.GetLink<FooController>(null));
 }
        public void GetLinkReturnsCorrectUriForExpressionOfFuncWithSingleParameter(
            [Frozen]HttpRequestMessage request,
            RouteLinker forComparison,
            UrlHelper sut, int id)
        {
            request.AddDefaultRoute();

            var expected = forComparison.GetUri<FooController>(a => a.GetById(id));
            var actual = sut.GetLink<FooController>(a => a.GetById(id));

            Assert.Equal(expected, actual);
        }
        public void GetLinkReturnsCorrectUriForExpressionOfFuncWithComplexParameter(
            [Frozen]HttpRequestMessage request,
            RouteLinker forComparison,
            UrlHelper sut, SomeModel someModel)
        {
            request.AddDefaultRoute();

            var expected = forComparison.GetUri<ModelController, object>(a => a.Get(someModel));
            var actual = sut.GetLink<ModelController, object>(a => a.Get(someModel));

            Assert.Equal(expected, actual);
        }
        public void GetLinkReturnsCorrectUriForExpressionOfActionWithMultipleParameters(
            [Frozen]HttpRequestMessage request,
            RouteLinker forComparison,
            UrlHelper sut, int id, int bar)
        {
            request.AddDefaultRoute();

            var expected = forComparison.GetUri<FooBarController>(a => a.GetBar(id, bar));
            var actual = sut.GetLink<FooBarController>(a => a.GetBar(id, bar));

            Assert.Equal(expected, actual);
        }
        public void GetLinkFromBaseActionMethodReturnsCorrectResponse(
            [Frozen]HttpRequestMessage request,
            RouteLinker forComparison,
            UrlHelper sut)
        {
            request.AddDefaultRoute();

            var expected = forComparison.GetUri<DerivedController>(c => c.BaseMethod());
            var actual = sut.GetLink<DerivedController>(c => c.BaseMethod());

            Assert.Equal(expected, actual);
        }