Add testing for file uploading and correct minors bugs in service
This commit is contained in:
parent
571d27c230
commit
924faca13f
@ -1,5 +1,6 @@
|
|||||||
package ovh.herisson.Clyde.Repositories;
|
package ovh.herisson.Clyde.Repositories;
|
||||||
|
|
||||||
|
import org.springframework.data.jpa.repository.Query;
|
||||||
import org.springframework.data.repository.CrudRepository;
|
import org.springframework.data.repository.CrudRepository;
|
||||||
|
|
||||||
import ovh.herisson.Clyde.Tables.StorageFile;
|
import ovh.herisson.Clyde.Tables.StorageFile;
|
||||||
@ -9,4 +10,7 @@ import java.util.ArrayList;
|
|||||||
|
|
||||||
public interface FileRepository extends CrudRepository<StorageFile,Long> {
|
public interface FileRepository extends CrudRepository<StorageFile,Long> {
|
||||||
public StorageFile getStorageFileByName(String name);
|
public StorageFile getStorageFileByName(String name);
|
||||||
|
|
||||||
|
@Query("select s from StorageFile s")
|
||||||
|
public ArrayList<StorageFile> findAll();
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,7 @@ public class StorageService {
|
|||||||
String url = this.rootLocation.resolve(Paths.get(Objects.requireNonNull(stringUuid)))
|
String url = this.rootLocation.resolve(Paths.get(Objects.requireNonNull(stringUuid)))
|
||||||
.normalize().toString();
|
.normalize().toString();
|
||||||
|
|
||||||
return fileRepo.save(new StorageFile(file.getName(),url, fileType));
|
return fileRepo.save(new StorageFile(file.getOriginalFilename(),url, fileType));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void delete(StorageFile file) throws SecurityException {
|
public void delete(StorageFile file) throws SecurityException {
|
||||||
|
@ -0,0 +1,103 @@
|
|||||||
|
package ovh.herisson.Clyde.Endpoints;
|
||||||
|
|
||||||
|
import com.github.dockerjava.api.model.ExposedPort;
|
||||||
|
import com.github.dockerjava.api.model.HostConfig;
|
||||||
|
import com.github.dockerjava.api.model.PortBinding;
|
||||||
|
import com.github.dockerjava.api.model.Ports;
|
||||||
|
import io.restassured.RestAssured;
|
||||||
|
import io.restassured.http.ContentType;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.jupiter.api.*;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
import org.springframework.boot.test.web.server.LocalServerPort;
|
||||||
|
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.mock.web.MockMultipartFile;
|
||||||
|
import org.testcontainers.containers.PostgreSQLContainer;
|
||||||
|
import org.testcontainers.junit.jupiter.Container;
|
||||||
|
import org.testcontainers.junit.jupiter.Testcontainers;
|
||||||
|
import ovh.herisson.Clyde.ClydeApplication;
|
||||||
|
import ovh.herisson.Clyde.EndPoints.StorageController;
|
||||||
|
import ovh.herisson.Clyde.Repositories.FileRepository;
|
||||||
|
import ovh.herisson.Clyde.Services.StorageService;
|
||||||
|
import ovh.herisson.Clyde.Tables.FileType;
|
||||||
|
import ovh.herisson.Clyde.Tables.StorageFile;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import static io.restassured.RestAssured.with;
|
||||||
|
|
||||||
|
@Testcontainers
|
||||||
|
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||||||
|
public class StorageControllerTest {
|
||||||
|
@LocalServerPort
|
||||||
|
private Integer port;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ClydeApplication controller;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private StorageController storageController;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private StorageService storageService;
|
||||||
|
@Autowired
|
||||||
|
private FileRepository fileRepository;
|
||||||
|
@Container
|
||||||
|
@ServiceConnection
|
||||||
|
static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:alpine")
|
||||||
|
.withDatabaseName("clyde")
|
||||||
|
.withUsername("devel")
|
||||||
|
.withPassword("devel")
|
||||||
|
.withCreateContainerCmdModifier(cmd -> cmd.withHostConfig(new HostConfig().withPortBindings(new PortBinding(Ports.Binding.bindPort(5432), new ExposedPort(5432)))));
|
||||||
|
|
||||||
|
@BeforeAll
|
||||||
|
static void beforeAll(){
|
||||||
|
postgres.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterAll
|
||||||
|
static void afterAll(){
|
||||||
|
postgres.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void setup(){
|
||||||
|
RestAssured.baseURI = "http://localhost:" + port;
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterEach
|
||||||
|
void afterEach(){
|
||||||
|
fileRepository.deleteAll();
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
public void uploadFileTest() throws IOException {
|
||||||
|
File mmf = new File("test.txt");
|
||||||
|
mmf.createNewFile();
|
||||||
|
|
||||||
|
FileWriter fw = new FileWriter(mmf);
|
||||||
|
fw.write("Ceci est un test");
|
||||||
|
fw.close();
|
||||||
|
|
||||||
|
with().multiPart("file", mmf).pathParam("fileType", FileType.ProfilePicture).when().request("POST", "/upload/{fileType}").then().statusCode(200);
|
||||||
|
|
||||||
|
StorageFile sf = fileRepository.getStorageFileByName("test.txt");
|
||||||
|
|
||||||
|
//On vérifie que le fichier a bien été stocké dans la db
|
||||||
|
Assert.assertFalse(sf == null);
|
||||||
|
|
||||||
|
//On vérifie que le fichier a bel et bien été stocké dans le dossier cdn
|
||||||
|
File extFile = new File(sf.getUrl());
|
||||||
|
Assert.assertTrue(extFile.exists());
|
||||||
|
|
||||||
|
Assert.assertEquals("cdn", extFile.getParent());
|
||||||
|
|
||||||
|
//On delete tranquillement les fichiers (la méthode delete a déja été testée dans StorageServiceTest)
|
||||||
|
storageService.delete(sf);
|
||||||
|
mmf.delete();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user