public async void PostImage_FullPayload_201_WithLocation()
        {
            using (var context = new AmazonRDSContext(contextOptions))
            {
                var _uploadService = new UploadAppService(context, _awsServiceMock.Object);

                var imageModel = new ImageModel
                {
                    Description = "Test description",
                    ImageFile   = CreateFakeFormFile(100, "image.jpg")
                };

                var controller = Util.ConfigController(_uploadService, context, _awsServiceMock.Object, _elasticsearchServiceMock.Object);

                var key = Guid.NewGuid().ToString();
                _awsServiceMock.Setup(x => x.UploadFileAsync(It.IsAny <Stream>()))
                .Returns(Task.FromResult(key));

                var result = await controller.UploadImage(imageModel);

                var imageEntity = GetCreatedObject <ImageEntity>(result);

                Assert.True(imageEntity.Id > 0);
                Assert.True(((CreatedResult)result).StatusCode.Value == (int)HttpStatusCode.Created);
                Assert.True(((CreatedResult)result).Location == locationUri);
            }
        }
        public async void SearchImagesOnElasticSearch_AllQueryParams_204()
        {
            using (var context = new AmazonRDSContext(contextOptions))
            {
                var _elasticsearchAppService = new ElasticsearchAppService(_elasticsearchClientMock.Object, context);
                var _uploadService           = new UploadAppService(context, _awsServiceMock.Object);

                var controller = Util.ConfigController(_uploadService, context, _awsServiceMock.Object, _elasticsearchAppService);

                var hitsDetails = new List <Hit>();

                var elasticsearchQueryResult = new ElasticsearchQueryResult
                {
                    hits = new Hits {
                        hits = hitsDetails
                    }
                };

                _elasticsearchClientMock.Setup(x => x.QueryImagesOnElasticsearch(It.IsAny <string>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <string>()))
                .Returns(Task.FromResult(elasticsearchQueryResult));

                var result = await controller.SearchImagesOnElasticSearch("test", "jpeg", "120", "0");

                Assert.True(((NoContentResult)result).StatusCode == (int)HttpStatusCode.NoContent);
            }
        }
        public async void SearchImagesOnElasticSearch_NullQueryParams_200()
        {
            using (var context = new AmazonRDSContext(contextOptions))
            {
                var _elasticsearchAppService = new ElasticsearchAppService(_elasticsearchClientMock.Object, context);
                var _uploadService           = new UploadAppService(context, _awsServiceMock.Object);

                var controller = Util.ConfigController(_uploadService, context, _awsServiceMock.Object, _elasticsearchAppService);

                var hitsDetails = new List <Hit> {
                    new Hit {
                        _source = new ImageDetail {
                            Description = "test", FileSizeKb = "120", FileType = "image/jpeg"
                        }
                    }
                };

                var elasticsearchQueryResult = new ElasticsearchQueryResult {
                    hits = new Hits {
                        hits = hitsDetails
                    }
                };

                _elasticsearchClientMock.Setup(x => x.QueryImagesOnElasticsearch(It.IsAny <string>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <string>()))
                .Returns(Task.FromResult(elasticsearchQueryResult));

                var result = await controller.SearchImagesOnElasticSearch(null, null, null, null);

                Assert.True(((List <ImageDetail>)((OkObjectResult)result).Value).Count > 0);
                Assert.True(((OkObjectResult)result).StatusCode == (int)HttpStatusCode.OK);
            }
        }
        public async void MigrateRdsToElasticsearch_200()
        {
            using (var context = new AmazonRDSContext(contextOptions))
            {
                var _elasticsearchAppService = new ElasticsearchAppService(_elasticsearchClientMock.Object, context);
                var _uploadService           = new UploadAppService(context, _awsServiceMock.Object);

                var imageEntity = new ImageEntity
                {
                    Description = "Test description",
                    FileSizeKb  = 200,
                    FileType    = "image/png",
                    ImageKey    = "Test",
                    createdDate = DateTime.Now
                };
                context.Images.Add(imageEntity);
                context.SaveChanges();

                _elasticsearchClientMock.Setup(x => x.InsertDataOnElasticsearch(It.IsAny <long>(), It.IsAny <ImageDetail>()))
                .Returns(Task.FromResult(new ElasticsearchPutResponse()));

                var controller = Util.ConfigController(_uploadService, context, _awsServiceMock.Object, _elasticsearchAppService);

                var result = await controller.MigrateRdsToElasticsearch();

                var okResult = GetOkObject(result);

                Assert.True(okResult.StatusCode == (int)HttpStatusCode.OK);
            }
        }
        private void Seed()
        {
            using (var _apiContext = new AmazonRDSContext(contextOptions))
            {
                _apiContext.Database.EnsureDeleted();
                _apiContext.Database.EnsureCreated();

                _apiContext.Images.SingleOrDefault();
            }
        }
        public static ImageController ConfigController(IUploadService uploadService, AmazonRDSContext amazonRDSContext, IAwsS3Service awsS3service, IElasticsearchService elasticsearchService)
        {
            var service = new UploadAppService(amazonRDSContext, awsS3service);

            var controllerContext = new ControllerContext()
            {
                HttpContext = ConfigRequest("dummy data"),
            };

            var controller = new ImageController(uploadService, elasticsearchService)
            {
                ControllerContext = controllerContext
            };

            return(controller);
        }
Esempio n. 7
0
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, AmazonRDSContext dbContext)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            dbContext.Database.EnsureCreated();

            app.UseHttpsRedirection();

            app.UseRouting();
            app.UseCors("AllowAll");

            app.UseAuthorization();
            app.UseMiddleware(typeof(ExceptionHandlingMiddleware));

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
        public void PostImage_WithoutDescription_400()
        {
            using (var context = new AmazonRDSContext(contextOptions))
            {
                var _uploadService = new UploadAppService(context, _awsServiceMock.Object);

                var imageModel = new ImageModel
                {
                    Description = "",
                    ImageFile   = CreateFakeFormFile(100, "image.png")
                };

                var controller = Util.ConfigController(_uploadService, context, _awsServiceMock.Object, _elasticsearchServiceMock.Object);

                var key = Guid.NewGuid().ToString();
                _awsServiceMock.Setup(x => x.UploadFileAsync(It.IsAny <Stream>()))
                .Returns(Task.FromResult(key));

                Func <Task> action = async() => await controller.UploadImage(imageModel);

                action.Should().Throw <BadRequestException>();
            }
        }
        public void PostImage_ImageBiggerThan500kb_400()
        {
            using (var context = new AmazonRDSContext(contextOptions))
            {
                var _uploadService = new UploadAppService(context, _awsServiceMock.Object);

                var imageModel = new ImageModel
                {
                    Description = "Test",
                    ImageFile   = new FormFile(new MemoryStream(Encoding.UTF8.GetBytes("dummy image")), 0, 550000, "Data", "image.png")
                };

                var controller = Util.ConfigController(_uploadService, context, _awsServiceMock.Object, _elasticsearchServiceMock.Object);

                var key = Guid.NewGuid().ToString();
                _awsServiceMock.Setup(x => x.UploadFileAsync(It.IsAny <Stream>()))
                .Returns(Task.FromResult(key));

                Func <Task> action = async() => await controller.UploadImage(imageModel);

                action.Should().Throw <BadRequestException>();
            }
        }
 public ElasticsearchAppService(IElasticsearchClient elasticsearchClient, AmazonRDSContext amazonRDS)
 {
     _elasticsearchClient = elasticsearchClient;
     _amazonRDS           = amazonRDS;
 }
 public UploadAppService(AmazonRDSContext amazonRDS, IAwsS3Service awsS3service)
 {
     _amazonRDS    = amazonRDS;
     _awsS3service = awsS3service;
 }