Example #1
0
        public void When_StockHas2Elem_Then_ShouldReturnTotalPrice()
        {
            //Arrange
            List <StockElement> listStockElem = new List <StockElement> {
                new StockElement
                {
                    Name         = "Mere",
                    Currency     = "RON",
                    Quantity     = 10,
                    PricePerUnit = 2
                },
                new StockElement
                {
                    Name         = "Pere",
                    Currency     = "RON",
                    Quantity     = 1,
                    PricePerUnit = 5
                }
            };

            var stockProv = new Mock <IStockProvider>();

            stockProv.Setup(s => s.GetStock()).Returns(listStockElem);
            var expectedStockPrice = 25;

            StockManager.StockManager stockManager = new StockManager.StockManager(stockProv.Object, null);

            //Act

            var actualStock = stockManager.CalculateStock();

            //Assert
            actualStock.ShouldBe(expectedStockPrice);
        }
Example #2
0
        static void Main(string[] args)
        {
            StockManager stockManager = new StockManager();
            var          factory      = new ConnectionFactory()
            {
                HostName = "localhost"
            };

            using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    channel.QueueDeclare(queue: "stock_queue", durable: false,
                                         exclusive: false, autoDelete: false, arguments: null);
                    channel.BasicQos(0, 1, false);
                    var consumer = new EventingBasicConsumer(channel);
                    channel.BasicConsume(queue: "stock_queue",
                                         autoAck: false, consumer: consumer);
                    Console.WriteLine(" [x] Awaiting RPC requests");

                    consumer.Received += (model, ea) =>
                    {
                        object response = null;

                        var body       = ea.Body;
                        var props      = ea.BasicProperties;
                        var replyProps = channel.CreateBasicProperties();
                        replyProps.CorrelationId = props.CorrelationId;

                        try
                        {
                            var message = Encoding.UTF8.GetString(body.ToArray());
                            response = stockManager.HandleRequest(message);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(" [.] " + e.Message);
                        }
                        finally
                        {
                            var responseBytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(response));
                            channel.BasicPublish(exchange: "", routingKey: props.ReplyTo,
                                                 basicProperties: replyProps, body: responseBytes);
                            channel.BasicAck(deliveryTag: ea.DeliveryTag,
                                             multiple: false);
                        }
                    };

                    Console.WriteLine(" Press [enter] to exit.");
                    Console.ReadLine();
                }
        }
Example #3
0
        public void When_StockHas2ElemWithDiffCurrency_Then_ShouldConvertTotalPrice()
        {
            //Arrange
            List <StockManager.StockElement> listStockElem = new List <StockElement> {
                new StockElement
                {
                    Name         = "Mere",
                    Currency     = "EUR",
                    Quantity     = 10,
                    PricePerUnit = 2
                },
                new StockElement
                {
                    Name         = "Pere",
                    Currency     = "RON",
                    Quantity     = 1,
                    PricePerUnit = 5
                }
            };

            var stockProv = new Mock <IStockProvider>();

            stockProv.Setup(s => s.GetStock()).Returns(listStockElem);

            var currencyProv = new Mock <ICurrencyConverter>();

            currencyProv.Setup(x => x.Convert(It.Is <double>(y => y == 2), "EUR")).Returns(9.5);


            var expectedStockPrice = 100;

            StockManager.StockManager stockManager = new StockManager.StockManager(stockProv.Object, currencyProv.Object);
            //Act

            var actualStock = stockManager.CalculateStock();

            //Assert
            actualStock.ShouldBe(expectedStockPrice);
            currencyProv.Verify(x => x.Convert(It.Is <double>(y => y == 2), "EUR"), Times.Once);
        }
 static void Main(string[] args)
 {
     var stockManager = new StockManager();
 }
Example #5
0
        static void Main(string[] args)
        {
            StockManager Stock   = new StockManager();
            var          factory = new ConnectionFactory()
            {
                HostName = "localhost"
            };

            using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    channel.QueueDeclare(queue: "stock_queue", durable: false, exclusive: false, autoDelete: false, arguments: null);
                    channel.BasicQos(0, 1, false);
                    var consumer = new EventingBasicConsumer(channel);
                    channel.BasicConsume(queue: "stock_queue", autoAck: false, consumer: consumer);
                    Console.WriteLine(" [x] Awaiting RPC requests");


                    consumer.Received += (model, ea) =>
                    {
                        string response = null;

                        var body       = ea.Body;
                        var props      = ea.BasicProperties;
                        var replyProps = channel.CreateBasicProperties();
                        replyProps.CorrelationId = props.CorrelationId;

                        try
                        {
                            var      message      = Encoding.UTF8.GetString(body.ToArray());
                            string[] messageSplit = message.Split(":");
                            string   type         = messageSplit[0];
                            if (type == "1")
                            {
                                string nomProduit = messageSplit[1];
                                response = Stock.ReleaseItem(nomProduit);
                            }
                            else
                            {
                                string nomProduit = messageSplit[1];
                                int    quantite   = Int32.Parse(messageSplit[2]);
                                response = Stock.ReserveItem(quantite, nomProduit);
                            }
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(" [.] " + e.Message);
                            response = "";
                        }
                        finally
                        {
                            var responseBytes = Encoding.UTF8.GetBytes(response);
                            channel.BasicPublish(exchange: "", routingKey: props.ReplyTo, basicProperties: replyProps, body: responseBytes);
                            channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
                        }
                    };

                    Console.WriteLine(" Press [enter] to exit.");
                    Console.ReadLine();
                }
        }