public async Task Update_ShouldUpdateOrderCorrectly()
        {
            mapper.Execute();

            int testId = 1;
            var order  = new Order()
            {
                Status    = DeliveryStatus.Unpaid,
                Id        = testId,
                UserЕmail = "testEmail"
            };

            var ordersMock = new Mock <IOrdersService>();

            ordersMock.Setup(v => v.GetById(testId)).Returns(order);
            ordersMock.Setup(v => v.Save());

            var emailsMock = new Mock <IEmailsService>();

            OrderRequestUpdateStatusModel request = new OrderRequestUpdateStatusModel()
            {
                Id = 1, Status = DeliveryStatus.Done
            };

            var controller = new ManageOrdersController(ordersMock.Object, emailsMock.Object, null);

            var result = await controller.Update(request);

            Assert.IsInstanceOfType(result, typeof(OkNegotiatedContentResult <OrderResponseModelWIthUserInfo>));
            var responseContent = ((OkNegotiatedContentResult <OrderResponseModelWIthUserInfo>)result).Content;

            Assert.AreEqual(responseContent.Id, testId);
            ordersMock.VerifyAll();
        }
        public void Update_ShouldReturnInternalServerErrorAndLogError_WhenOrdersServiceIsNull()
        {
            var usersMock = new Mock <IUsersService>();
            OrderRequestUpdateStatusModel request = new OrderRequestUpdateStatusModel();
            var controller = new ManageOrdersController(null, null, mockedLogger.Object);

            var result = controller.Update(request);

            Assert.IsInstanceOfType(result, typeof(InternalServerErrorResult));
            mockedLogger.Verify(x => x.LogError(It.IsAny <Exception>(), "", controllerName, "Update"));
        }
        public async Task Update_ShouldSendEmailToTheRegisteredUser()
        {
            mapper.Execute();

            int testId   = 1;
            var testUser = new User {
                Email = "testEmail"
            };
            var order = new Order()
            {
                Status = DeliveryStatus.Unpaid,
                Id     = testId,
                User   = testUser
            };

            var ordersMock = new Mock <IOrdersService>();

            ordersMock.Setup(v => v.GetById(testId)).Returns(order);

            var emailsMock = new Mock <IEmailsService>();

            emailsMock.Setup(x => x.SendEmail(
                                 testUser.Email, string.Format(GlobalConstants.OrderUpdated, order.Id),
                                 It.Is <string>(y => y.Contains("Нов статус на поръчка") && y.Contains(testId.ToString()) && y.Contains("Завършена")),
                                 GlobalConstants.SMTPServer,
                                 GlobalConstants.EmailPrimary, GlobalConstants.EmailPrimaryPassword));

            OrderRequestUpdateStatusModel request = new OrderRequestUpdateStatusModel()
            {
                Id = testId, Status = DeliveryStatus.Done
            };

            var controller = new ManageOrdersController(ordersMock.Object, emailsMock.Object, null);

            var result = await controller.Update(request);

            Assert.IsInstanceOfType(result, typeof(OkNegotiatedContentResult <OrderResponseModelWIthUserInfo>));
            var responseContent = ((OkNegotiatedContentResult <OrderResponseModelWIthUserInfo>)result).Content;

            Assert.AreEqual(responseContent.Id, testId);
            emailsMock.VerifyAll();
        }