using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Xunit;
using System.Threading.Tasks;
using Moq;
using MediatR;

namespace UnitTests
{
    public class OrderControllerTest
    {
        private readonly Mock<IMediator> _mock;

        public OrderControllerTest()
        {
            //config mock;
            _mock = new Mock<IMediator>();

            
        }

        [Fact]
        public async Task AddOrder_ReturnsBadRequestResult_WhenPersitenceOperationFails()
        {
            //Add order:
            var orderRequest = new object() as IAsyncRequest<bool>;
            _mock.Setup(mediator => mediator.SendAsync(orderRequest))
                .Returns(Task.FromResult(false));
            
            // Arrange
            var controller = new OrdersController(mockRepo.Object);
            controller.ModelState.AddModelError("SessionName", "Required");
            var newSession = new HomeController.NewSessionModel();

            // Act
            var result = await controller.Index(newSession);

            // Assert
            var badRequestResult = Assert.IsType<BadRequestObjectResult>(result);
            Assert.IsType<SerializableError>(badRequestResult.Value);
        }


        // Implement Fake method for mock. 
        private MediatorMockForAddOrder()
        {

        }
    }
}