예제 #1
0
파일: Program.cs 프로젝트: quan-ma/SOAP
        static void Main(string[] args)
        {
            var client = new PizzaClient();

            System.Console.WriteLine(client.Prepare().Message);
            System.Console.ReadLine();
        }
예제 #2
0
        public void OrderMustBeValidBeforeItCanBeSent_with_mock_example()
        {
            var repository   = Substitute.For <IOrderRepository>();
            var exampleOrder = new Order();
            var fakeOrderId  = new OrderId();

            repository.Add(Arg.Any <Order>()).Returns(fakeOrderId);
            repository.Get(fakeOrderId).Returns(exampleOrder);

            var client = new PizzaClient(new TestFactory(), repository);

            var menu = client.GetMenu();

            var orderId = client.StartOrder();

            client.AddToOrder("Arek", orderId, new ClientOrderPosition(menu.Position(1), 2));
            client.AddToOrder("Marek", orderId, new ClientOrderPosition(menu.Position(2), 4));

            Assert.False(client.Validate(orderId));
            client.AddToOrder("Jarek", orderId, new ClientOrderPosition(menu.Position(1), 2));
            Assert.True(client.Validate(orderId));
            client.Send(orderId);

            // gdzie dotarło zamówienie?
            // czy się zapisało?

            repository.Received(1).Add(Arg.Is <Order>(x => x.Positions.Count() == 0));
        }
예제 #3
0
        public async Task OnGet([FromServices] PizzaClient client)
        {
            Pizzas = await client.GetPizzasAsync();

            if (Pizzas.Count() == 0)
            {
                ErrorMessage = "We must be sold out. Try again tomorrow.";
            }
            else
            {
                ErrorMessage = string.Empty;
            }
        }
예제 #4
0
        public void OrderMustBeValidBeforeItCanBeSent_with_in_memmory_example()
        {
            var exampleMenu = new TestFactory();
            var repository  = new InMemmoryOrderRepository();

            var client = new PizzaClient(exampleMenu, repository);

            var menu = client.GetMenu();

            var orderId = client.StartOrder();

            client.AddToOrder("Arek", orderId, new ClientOrderPosition(menu.Position(1), 2));
            client.AddToOrder("Marek", orderId, new ClientOrderPosition(menu.Position(2), 4));

            Assert.False(client.Validate(orderId));
            client.AddToOrder("Jarek", orderId, new ClientOrderPosition(menu.Position(1), 2));
            Assert.True(client.Validate(orderId));
            client.Send(orderId);

            // gdzie dotarło zamówienie?
            // czy się zapisało?
        }
예제 #5
0
        static void Main(string[] args)
        {
            var client = new PizzaClient();
            var tc     = Transaction.Current;

            using (var t = new TransactionScope(tc))
            {
                try
                {
                    client.Prepare();
                    //client.Bake();
                    //client.Deliver();
                    t.Complete();
                }
                catch (Exception)
                {
                    t.Dispose();
                }
            }

            System.Console.WriteLine(client.Prepare().Message);
            System.Console.ReadLine();
        }
예제 #6
0
 public PizzaController(PizzaClient pizzaClient)
 {
     this.pizzaClient = pizzaClient;
 }
        //[Serializable]
        //public class PizzaOrder
        //{
        //    public List<string> Pizza;

        //    public static IForm<PizzaOrder> BuildForm()
        //    {
        //        OnCompletionAsyncDelegate<PizzaOrder> processOrder = async (context, state) =>
        //        {
        //            foreach (var pizza in state.Pizza)
        //            {
        //                //var orderLine = new FoodOrderLine(contex);
        //            }
        //            await context.PostAsync("We are ordered your pizza.");
        //        };

        //        return new FormBuilder<PizzaOrder>()
        //                    .Message("Welcome to the pizza order bot!")
        //                    .Field(new FieldReflector<PizzaOrder>(nameof(Pizza))
        //                    .SetType(null)
        //                    .SetActive((state) => true)
        //                    .SetDefine( (state, field) =>
        //                        {
        //                            var values = Andys.GetPizzas().ToArray();
        //                            foreach (var pizzaType in values)
        //                            {
        //                                field.AddDescription(pizzaType, pizzaType.Name +" "+ pizzaType.Price+" MDL");
        //                            }
        //                            return Task.FromResult(true);
        //                        }
        //                        )
        //                    )
        //                    .Confirm("{Pizza} ???")
        //                    .AddRemainingFields()
        //                    .Message("Thanks for ordering a pizza!")
        //                    .OnCompletion(processOrder)
        //                    .Build();
        //    }
        //};

        //internal static IDialog<PizzaOrder> MakeRootDialog()
        //{
        //    return Chain.From(() => FormDialog.FromForm(PizzaOrder.BuildForm));
        //}

        /// <summary>
        /// POST: api/Messages
        /// Receive a message from a user and reply to it
        /// </summary>
        public async Task <HttpResponseMessage> Post([FromBody] Activity activity)
        {
            if (activity.Type == ActivityTypes.Message)
            {
                //await Conversation.SendAsync(activity, MakeRootDialog);

                ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));
                // calculate something for us to return
                PizzaLuisModel pizzaLuis = await PizzaClient.ParseInputText(activity.Text);

                Pizza        pizza    = null;
                List <Pizza> allPizza = new List <Pizza>();

                string strResponse = string.Empty;

                switch (pizzaLuis.topScoringIntent.intent)
                {
                case "GetPizza":
                    pizza = Andys.GetByName(pizzaLuis.entities.First().entity);
                    if (pizza != null)
                    {
                        strResponse = $"To order pizza '{pizza.Name}', type 'order {pizza.Name}'";
                    }
                    break;

                case "GetListOfPizza":
                    allPizza = Andys.GetPizzas().ToList();
                    if (allPizza.Any())
                    {
                        strResponse = "Type 'order {pizzaName}', ex. 'order rancho'";
                    }
                    break;

                case "OrderPizza":
                    pizza = Andys.GetByName(pizzaLuis.entities.First().entity);
                    AddOrder(activity, pizza);
                    if (pizza != null)
                    {
                        strResponse = $"Your pizza '{pizza.Name}' is added to cart. Thank you!";
                    }
                    break;

                case "ExecuteOrder":
                    var foodOrderRepo = new FoodOrderRepository();
                    var foodOrder     = foodOrderRepo.FindPendingOrder();
                    if (foodOrder == null)
                    {
                        strResponse = "Your cart is empty, add some pizza";
                        break;
                    }

                    var cartItems     = ConvertToAndysFormat.Convert(foodOrder);
                    var requestHelper = new RequestHelper();
                    var orderOwner    = ConvertToAndysFormat.GetOrderOwner(foodOrder);
                    requestHelper.Order(orderOwner, cartItems);
                    foodOrder.OrderStatus = OrderStatus.Closed;
                    foodOrderRepo.SaveOrUpdate(foodOrder);
                    strResponse = "Your order is placed. Wait for a call!";
                    break;

                default:
                    strResponse = "Please specify another pizza name";
                    break;
                }


                var stringResponse = string.Join("\n\n", allPizza
                                                 .Select((x, index) => index + 1 + ") " + " {" + x.ExternalId + "} " + x.Name + " " + x.Price + " MDL"));

                if (pizza != null)
                {
                    stringResponse = pizza.ExternalId + " " + pizza.Name + " " + pizza.Price + " MDL";
                }
                stringResponse += "\n\n" + strResponse;

                // return our reply to the user
                Activity reply = activity.CreateReply(stringResponse);
                await connector.Conversations.ReplyToActivityAsync(reply);
            }
            else
            {
                ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));
                var             message   = HandleSystemMessage(activity);
                await connector.Conversations.ReplyToActivityAsync(message);
            }
            var response = Request.CreateResponse(HttpStatusCode.OK);

            return(response);
        }