public async Task PostMultiple()
        {
            var random = new Random();
            var count  = random.Next(2, 5);
            var files  = new List <string>(count);

            var preProcessor = Substitute.For <IPreprocessor>();

            var content = new MultipartContent();

            var dir   = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
            var f     = dir.Substring(6, dir.Length - 6) + @"\icon.png";
            var bytes = File.ReadAllBytes(f);

            for (var i = 0; i < count; i++)
            {
                var fileName    = Guid.NewGuid().ToString();
                var fileContent = new ByteArrayContent(bytes);
                fileContent.Headers.ContentType        = new MediaTypeHeaderValue("image/jpeg");
                fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                {
                    FileName = fileName
                };
                preProcessor.Process(bytes, "image/jpeg", fileName);

                content.Add(fileContent);
                files.Add(fileName);
            }

            var store = Substitute.For <IDataStore>();

            var api = new ImageApi(preProcessor, store)
            {
                Request = new HttpRequestMessage(),
            };

            api.Request.Content = content;

            var response = await api.Post();

            Assert.IsNotNull(response);
            Assert.AreEqual(HttpStatusCode.Created, response.StatusCode);
            Assert.IsNotNull(response.Content);

            foreach (var file in files)
            {
                preProcessor.Received().Process(bytes, "image/jpeg", file);
            }
        }
        public async Task PostEmpty()
        {
            var preProcessor = Substitute.For <IPreprocessor>();
            var imaging      = Substitute.For <IImaging>();
            var store        = Substitute.For <IDataStore>();

            var api = new ImageApi(preProcessor, store)
            {
                Request = new HttpRequestMessage(),
            };

            api.Request.Content = new MultipartContent();

            var response = await api.Post();

            Assert.IsNotNull(response);
            Assert.AreEqual(HttpStatusCode.Created, response.StatusCode);
        }
        public async Task PostInvalid()
        {
            var random = new Random();
            var bytes  = new byte[128];

            random.NextBytes(bytes);

            var preProcessor = Substitute.For <IPreprocessor>();
            var store        = Substitute.For <IDataStore>();

            var api = new ImageApi(preProcessor, store)
            {
                Request = new HttpRequestMessage(),
            };

            api.Request.Content = new ByteArrayContent(bytes);

            var response = await api.Post();

            Assert.IsNotNull(response);
            Assert.AreEqual(HttpStatusCode.UnsupportedMediaType, response.StatusCode);
        }
        public async Task Post()
        {
            var dir         = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
            var file        = dir.Substring(6, dir.Length - 6) + @"\icon.png";
            var bytes       = File.ReadAllBytes(file);
            var fileContent = new ByteArrayContent(bytes);

            fileContent.Headers.ContentType        = new MediaTypeHeaderValue("image/jpeg");
            fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
            {
                FileName = "myFilename.jpg"
            };

            var preProcessor = Substitute.For <IPreprocessor>();

            preProcessor.Process(bytes, "image/jpeg", "myFilename.jpg");

            var store = Substitute.For <IDataStore>();

            var api = new ImageApi(preProcessor, store)
            {
                Request = new HttpRequestMessage(),
            };
            var content = new MultipartContent();

            content.Add(fileContent);
            api.Request.Content = content;

            var response = await api.Post();

            Assert.IsNotNull(response);
            Assert.AreEqual(HttpStatusCode.Created, response.StatusCode);
            Assert.IsNotNull(response.Content);

            preProcessor.Received().Process(bytes, "image/jpeg", "myFilename.jpg");
        }
        public async Task Post()
        {
            var bytes = File.ReadAllBytes(Environment.CurrentDirectory + @"\icon.png");
            var fileContent = new ByteArrayContent(bytes);

            fileContent.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
            fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
            {
                FileName = "myFilename.jpg"
            };

            var preProcessor = Substitute.For<IPreprocessor>();
            preProcessor.Process(bytes, "image/jpeg", "myFilename.jpg");

            var store = Substitute.For<IDataStore>();

            var api = new ImageApi(preProcessor, store)
            {
                Request = new HttpRequestMessage(),
            };
            var content = new MultipartContent();
            content.Add(fileContent);
            api.Request.Content = content;

            var response = await api.Post();

            Assert.IsNotNull(response);
            Assert.AreEqual(HttpStatusCode.Created, response.StatusCode);
            Assert.IsNotNull(response.Content);

            preProcessor.Received().Process(bytes, "image/jpeg", "myFilename.jpg");
        }
        public async Task PostEmpty()
        {
            var preProcessor = Substitute.For<IPreprocessor>();
            var imaging = Substitute.For<IImaging>();
            var store = Substitute.For<IDataStore>();

            var api = new ImageApi(preProcessor, store)
            {
                Request = new HttpRequestMessage(),
            };
            api.Request.Content = new MultipartContent();

            var response = await api.Post();

            Assert.IsNotNull(response);
            Assert.AreEqual(HttpStatusCode.Created, response.StatusCode);
        }
        public async Task PostInvalid()
        {
            var random = new Random();
            var bytes = new byte[128];
            random.NextBytes(bytes);

            var preProcessor = Substitute.For<IPreprocessor>();
            var store = Substitute.For<IDataStore>();

            var api = new ImageApi(preProcessor, store)
            {
                Request = new HttpRequestMessage(),
            };
            api.Request.Content = new ByteArrayContent(bytes);

            var response = await api.Post();

            Assert.IsNotNull(response);
            Assert.AreEqual(HttpStatusCode.UnsupportedMediaType, response.StatusCode);
        }
        public async Task PostMultiple()
        {
            var random = new Random();
            var count = random.Next(2, 5);
            var files = new List<string>(count);

            var preProcessor = Substitute.For<IPreprocessor>();

            var content = new MultipartContent();

            var bytes = File.ReadAllBytes(Environment.CurrentDirectory + @"\icon.png");
            for (var i = 0; i < count; i++)
            {
                var fileName = Guid.NewGuid().ToString();
                var fileContent = new ByteArrayContent(bytes);
                fileContent.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
                fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                {
                    FileName = fileName
                };
                preProcessor.Process(bytes, "image/jpeg", fileName);

                content.Add(fileContent);
                files.Add(fileName);
            }

            var store = Substitute.For<IDataStore>();

            var api = new ImageApi(preProcessor, store)
            {
                Request = new HttpRequestMessage(),
            };
            api.Request.Content = content;

            var response = await api.Post();

            Assert.IsNotNull(response);
            Assert.AreEqual(HttpStatusCode.Created, response.StatusCode);
            Assert.IsNotNull(response.Content);

            foreach (var file in files)
            {
                preProcessor.Received().Process(bytes, "image/jpeg", file);
            }
        }