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; } }
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); }
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")); }
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")); }
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")); }
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)); }
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 Response Created(Order order) { var uri = linker.BuildUriString(Context, "ReadOrder", new { orderId = order.Id }); return(Response.Created(uri)); }