/// <summary>
 /// Initializes a new instance of the <see cref="FileController"/> class.
 /// </summary>
 /// <param name="logger">The logger<see cref="ILogger{FileController}"/>.</param>
 /// <param name="loadBalancerFactory">Load-Balancer factory<see cref="ILoadBalancerFactory"/>.</param>
 public FileController(
     ILogger <FileController> logger,
     ILoadBalancerFactory loadBalancerFactory,
     IFileHttpClient fileHttpClient)
 {
     _logger = logger;
     _loadBalancerFactory = loadBalancerFactory;
     _fileHttpClient      = fileHttpClient;
 }
        public async Task Get_EmptyUri_BadRequest()
        {
            ILogger <FileController> _loggerStub    = Substitute.For <ILogger <FileController> >();
            ILoadBalancerFactory     factoryStub    = Substitute.For <ILoadBalancerFactory>();
            IFileHttpClient          fileClientStub = Substitute.For <IFileHttpClient>();

            var controller = new FileController(_loggerStub, factoryStub, fileClientStub);
            var result     = await controller.Get("");

            Assert.IsTrue(result is BadRequestResult);
        }
        public async Task Get_InternalError_StatusCode500()
        {
            ILogger <FileController> _loggerStub = Substitute.For <ILogger <FileController> >();
            ILoadBalancerFactory     factoryStub = Substitute.For <ILoadBalancerFactory>();

            factoryStub.GetInstance().Throws(new Exception("Something wrong"));
            IFileHttpClient fileClientStub = Substitute.For <IFileHttpClient>();

            var controller = new FileController(_loggerStub, factoryStub, fileClientStub);
            var result     = await controller.Get("/something/error");

            Assert.IsTrue(result is StatusCodeResult);
            StatusCodeResult resultWithCode = result as StatusCodeResult;

            Assert.AreEqual(500, resultWithCode.StatusCode);
        }
        public async Task Get_CorrectUri_FileResult()
        {
            ILogger <FileController> _loggerStub = Substitute.For <ILogger <FileController> >();
            ILoadBalancerFactory     factoryStub = Substitute.For <ILoadBalancerFactory>();

            factoryStub.GetInstance().Returns(new InstanceTarget {
                Ip = "localhost", Port = 1000
            });
            IFileHttpClient fileClientStub = Substitute.For <IFileHttpClient>();

            fileClientStub.GetAsync(Arg.Any <string>(), Arg.Any <string>()).Returns(Task.FromResult(
                                                                                        new DownloadFile {
                Content = Encoding.UTF8.GetBytes("Test"), FileName = "Test.bin"
            }));

            var controller = new FileController(_loggerStub, factoryStub, fileClientStub);
            var result     = await controller.Get("/src/comicbook");

            Assert.IsTrue(result is FileResult);
        }