private static IEnumerable<Link> GetLinks(Order order, string baseAddress)
        {
            var baseUri = new UriSegment(baseAddress);
              var linker = new ResourceLinker(baseAddress);

              var get = new Link(linker.BuildUriString(OrderResourceHandler.Path,
                                               OrderResourceHandler.SlashOrderId,
                                               new {orderId = order.Id}),
                         baseUri + "docs/order-get.htm",
                         MediaTypes.Default);

              var update = new Link(linker.BuildUriString(OrderResourceHandler.Path,
                                                  OrderResourceHandler.SlashOrderId,
                                                  new {orderId = order.Id}),
                            baseUri + "docs/order-update.htm",
                            MediaTypes.Default);

              var cancel = new Link(linker.BuildUriString(OrderResourceHandler.Path,
                                                  OrderResourceHandler.SlashOrderId,
                                                  new {orderId = order.Id}),
                            baseUri + "docs/order-cancel.htm",
                            MediaTypes.Default);

              var pay = new Link(linker.BuildUriString(OrderResourceHandler.Path,
                                               OrderResourceHandler.PaymentPath,
                                               new {orderId = order.Id}),
                         baseUri + "docs/order-pay.htm",
                         MediaTypes.Default);

              var receipt = new Link(linker.BuildUriString(OrderResourceHandler.Path,
                                                   OrderResourceHandler.ReceiptPath,
                                                   new {orderId = order.Id}),
                             baseUri + "docs/receipt-coffee.htm",
                             MediaTypes.Default);

              switch (order.Status)
              {
            case OrderStatus.Unpaid:
              yield return get;
              yield return update;
              yield return cancel;
              yield return pay;
              break;
            case OrderStatus.Paid:
            case OrderStatus.Delivered:
              yield return get;
              break;
            case OrderStatus.Ready:
              yield return receipt;
              break;
            case OrderStatus.Canceled:
              yield break;
            default:
              yield break;
              }
        }
        private static IEnumerable <Link> GetLinks(Order order, ResourceLinker linker, NancyContext context)
        {
            var get = new Link(
                linker.BuildUriString(context, "ReadOrder", new { orderId = order.Id }),
                context.Request.BaseUri() + "/docs/order-get.htm",
                MediaTypes.Default);

            var update = new Link(
                linker.BuildUriString(context, "UpdateOrder", new { orderId = order.Id }),
                context.Request.BaseUri() + "/docs/order-update.htm",
                MediaTypes.Default);

            var cancel = new Link(
                linker.BuildUriString(context, "CancelOrder", new { orderId = order.Id }),
                context.Request.BaseUri() + "/docs/order-cancel.htm",
                MediaTypes.Default);

            var pay = new Link(linker.BuildUriString(context, "PayOrder", new { orderId = order.Id }),
                               context.Request.BaseUri() + "/docs/order-pay.htm",
                               MediaTypes.Default);

            switch (order.Status)
            {
            case OrderStatus.Unpaid:
                yield return(get);

                yield return(update);

                yield return(cancel);

                yield return(pay);

                break;

            case OrderStatus.Paid:
            case OrderStatus.Delivered:
                yield return(get);

                break;

            case OrderStatus.Ready:
                break;

            case OrderStatus.Canceled:
                yield break;

            default:
                yield break;
            }
        }
Esempio n. 3
0
        public void WhenOrderIsOk_ThenResponseHasStatus201AndLocation()
        {
            var orderRepository = new Mock <IRepository <Order> >();

            orderRepository
            .Setup(or => or.MakePersistent(It.IsAny <Order[]>()))
            .Callback <Order[]>(o => o.First().Id = 123);

            var expectedUriToTheNewOrder =
                resourceLinker.BuildUriString("/order/", OrderResourceHandler.SlashOrderId, new { orderId = "123" });

            var appProxy            = CreateAppProxy(orderRepository.Object);
            var orderRepresentation = new OrderRepresentation()
            {
                Items = { new OrderItemRepresentation()
                          {
                              Name = "latte", Quantity = 1
                          } }
            };
            // act
            var result = appProxy.Post("/orders/",
                                       with =>
            {
                with.Header("Content-Type", "application/xml");
                with.Body(orderRepresentation.ToXmlString());
            });


            result.StatusCode.Should().Be.EqualTo(HttpStatusCode.Created);
            result.Headers["Location"].Should().Be.EqualTo(expectedUriToTheNewOrder);
        }
Esempio n. 4
0
        public void Link_generated_is_correct_when_base_uri_has_trailing_slash()
        {
            var resourceLinker = new ResourceLinker("http://localhost/");

            var uriString = resourceLinker.BuildUriString("/foo", "", new {});

            Assert.That(uriString, Is.EqualTo("http://localhost/foo"));
        }
Esempio n. 5
0
        public void Link_generated_is_correct_with_bound_parameter()
        {
            var resourceLinker = new ResourceLinker("http://localhost");

            var uriString = resourceLinker.BuildUriString("/foo", "/bar/{id}", new { id = 123 });

            Assert.That(uriString, Is.EqualTo("http://localhost/foo/bar/123"));
        }
Esempio n. 6
0
        public void Link_generated_is_correct_with_simple_template()
        {
            var resourceLinker = new ResourceLinker("http://localhost");

            var uriString = resourceLinker.BuildUriString("/foo", "/bar", new {});

            Assert.That(uriString, Is.EqualTo("http://localhost/foo/bar"));
        }
Esempio n. 7
0
        public void Argument_exception_is_thrown_if_parameter_from_template_cannot_be_bound()
        {
            var resourceLinker = new ResourceLinker("http://localhost");

            var exception = Assert.Throws <ArgumentException>(() => resourceLinker.BuildUriString("/foo", "/bar/{id}", new {}));

            Assert.That(exception.Message,
                        Is.EqualTo(
                            "The path variable 'ID' in the UriTemplate must be bound to a non-empty string value.\r\nParameter name: parameters"));
        }
        private static IEnumerable<Link> GetLinks(Order order, ResourceLinker linker, NancyContext context)
        {
            var get = new Link(
            linker.BuildUriString(context, "ReadOrder", new {orderId = order.Id}),
            context.Request.BaseUri() + "/docs/order-get.htm",
            MediaTypes.Default);

              var update = new Link(
            linker.BuildUriString(context, "UpdateOrder", new { orderId = order.Id}),
            context.Request.BaseUri() + "/docs/order-update.htm",
            MediaTypes.Default);

              var cancel = new Link(
            linker.BuildUriString(context, "CancelOrder", new { orderId = order.Id}),
            context.Request.BaseUri() + "/docs/order-cancel.htm",
            MediaTypes.Default);

              var pay = new Link(linker.BuildUriString(context, "PayOrder", new {orderId = order.Id}),
            context.Request.BaseUri() + "/docs/order-pay.htm",
            MediaTypes.Default);

              switch (order.Status)
              {
            case OrderStatus.Unpaid:
              yield return get;
              yield return update;
              yield return cancel;
              yield return pay;
              break;
            case OrderStatus.Paid:
            case OrderStatus.Delivered:
              yield return get;
              break;
            case OrderStatus.Ready:
              break;
            case OrderStatus.Canceled:
              yield break;
            default:
              yield break;
              }
        }
        public Object GetHandler(int orderId)
        {
            var order = orderRepository.GetById(orderId);

            if (order == null)
            {
                return((Response)HttpStatusCode.NotFound);
            }

            if (order.Status == OrderStatus.Canceled)
            {
                return(Response.MovedTo(linker.BuildUriString(Context, "ReadCancelledOrder", new { orderId })));
            }

            if (Request.IsNotModified(order))
            {
                return(Response.NotModified());
            }

            return(Negotiate
                   .WithModel(OrderRepresentationMapper.Map(order, linker, Context))
                   .WithCacheHeaders(order));
        }
Esempio n. 10
0
        private static IEnumerable <Link> GetLinks(Order order, string baseAddress)
        {
            var baseUri = new UriSegment(baseAddress);
            var linker  = new ResourceLinker(baseAddress);

            var get = new Link(linker.BuildUriString(OrderResourceHandler.Path,
                                                     OrderResourceHandler.SlashOrderId,
                                                     new { orderId = order.Id }),
                               baseUri + "docs/order-get.htm",
                               MediaTypes.Default);

            var update = new Link(linker.BuildUriString(OrderResourceHandler.Path,
                                                        OrderResourceHandler.SlashOrderId,
                                                        new { orderId = order.Id }),
                                  baseUri + "docs/order-update.htm",
                                  MediaTypes.Default);

            var cancel = new Link(linker.BuildUriString(OrderResourceHandler.Path,
                                                        OrderResourceHandler.SlashOrderId,
                                                        new { orderId = order.Id }),
                                  baseUri + "docs/order-cancel.htm",
                                  MediaTypes.Default);

            var pay = new Link(linker.BuildUriString(OrderResourceHandler.Path,
                                                     OrderResourceHandler.PaymentPath,
                                                     new { orderId = order.Id }),
                               baseUri + "docs/order-pay.htm",
                               MediaTypes.Default);

            var receipt = new Link(linker.BuildUriString(OrderResourceHandler.Path,
                                                         OrderResourceHandler.ReceiptPath,
                                                         new { orderId = order.Id }),
                                   baseUri + "docs/receipt-coffee.htm",
                                   MediaTypes.Default);

            switch (order.Status)
            {
            case OrderStatus.Unpaid:
                yield return(get);

                yield return(update);

                yield return(cancel);

                yield return(pay);

                break;

            case OrderStatus.Paid:
            case OrderStatus.Delivered:
                yield return(get);

                break;

            case OrderStatus.Ready:
                yield return(receipt);

                break;

            case OrderStatus.Canceled:
                yield break;

            default:
                yield break;
            }
        }
Esempio n. 11
0
        private Response Created(Order order)
        {
            var uri = linker.BuildUriString(Context, "ReadOrder", new { orderId = order.Id });

            return(Response.Created(uri));
        }