11 | 👋 ¡Bienvenid@ a mi API REST!
13 |Toda la web se ha realizado usando Kotlin con Ktor y tecnología de Jetbrains
14 |Más información en mi repositorio de GitHub joseluisgs. 15 |
16 | 17 | -------------------------------------------------------------------------------- /src/main/resources/web/ktor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ArisGuimera/tenistas-rest-ktor-2022-2023/702f23afb6f394988e5b8f816a022439a775508f/src/main/resources/web/ktor.png -------------------------------------------------------------------------------- /src/test/kotlin/joseluisgs/es/ApplicationTest.kt: -------------------------------------------------------------------------------- 1 | package joseluisgs.es 2 | 3 | import io.ktor.client.request.* 4 | import io.ktor.client.statement.* 5 | import io.ktor.http.* 6 | import io.ktor.server.config.* 7 | import io.ktor.server.testing.* 8 | import org.junit.jupiter.api.Assertions.assertEquals 9 | import org.junit.jupiter.api.Assertions.assertTrue 10 | import org.junit.jupiter.api.Test 11 | 12 | class ApplicationTest { 13 | // Cargamos la configuración del entorno 14 | // La configuración de entorno se encuentra en el fichero application.conf 15 | // del directorio resources (si hay una propia estará en test/resources) 16 | // Podemos sobreescribir la configuración de entorno en el test para hacerla más rápida 17 | private val config = ApplicationConfig("application.conf") 18 | 19 | 20 | @Test 21 | fun trueIsTrue() { 22 | assertTrue(true) 23 | } 24 | 25 | @Test 26 | fun testRoot() = testApplication { 27 | // Configuramos el entorno de test 28 | environment { config } 29 | 30 | // Lanzamos la consulta 31 | val response = client.get("/") 32 | 33 | // Comprobamos que la respuesta y el contenido es correcto 34 | assertEquals(HttpStatusCode.OK, response.status) 35 | assertEquals("Tenistas API REST Ktor. 2º DAM", response.bodyAsText()) 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/test/kotlin/joseluisgs/es/mappers/RepresentantesKtTest.kt: -------------------------------------------------------------------------------- 1 | package joseluisgs.es.mappers 2 | 3 | import joseluisgs.es.dto.RepresentanteDto 4 | import joseluisgs.es.models.Representante 5 | import org.junit.jupiter.api.Assertions.assertEquals 6 | import org.junit.jupiter.api.Test 7 | import org.junit.jupiter.api.assertAll 8 | import java.time.LocalDateTime 9 | import java.util.* 10 | 11 | 12 | class RepresentantesKtTest { 13 | 14 | val representante = Representante( 15 | id = UUID.fromString("a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11"), 16 | nombre = "Test", 17 | email = "test@example.com", 18 | createdAt = LocalDateTime.now(), 19 | updatedAt = LocalDateTime.now(), 20 | deleted = false 21 | ) 22 | 23 | val representanteDto = RepresentanteDto( 24 | id = UUID.fromString("a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11"), 25 | nombre = "Test", 26 | email = "test@example.com", 27 | metadata = RepresentanteDto.MetaData( 28 | createdAt = LocalDateTime.now(), 29 | updatedAt = LocalDateTime.now(), 30 | deleted = false 31 | ) 32 | ) 33 | 34 | @Test 35 | fun toDto() { 36 | val dto = representante.toDto() 37 | assertAll( 38 | { assertEquals(representanteDto.id, dto.id) }, 39 | { assertEquals(representanteDto.nombre, dto.nombre) }, 40 | { assertEquals(representanteDto.email, dto.email) } 41 | ) 42 | } 43 | 44 | @Test 45 | fun toModel() { 46 | val model = representanteDto.toModel() 47 | assertAll( 48 | { assertEquals(representante.nombre, model.nombre) }, 49 | { assertEquals(representante.email, model.email) }, 50 | ) 51 | } 52 | } -------------------------------------------------------------------------------- /src/test/kotlin/joseluisgs/es/repositories/raquetas/RaquetasCachedRepositoryImplKtTest.kt: -------------------------------------------------------------------------------- 1 | package joseluisgs.es.repositories.raquetas 2 | 3 | import io.mockk.MockKAnnotations 4 | import io.mockk.coEvery 5 | import io.mockk.coVerify 6 | import io.mockk.impl.annotations.InjectMockKs 7 | import io.mockk.impl.annotations.MockK 8 | import io.mockk.impl.annotations.SpyK 9 | import io.mockk.junit5.MockKExtension 10 | import joseluisgs.es.models.Raqueta 11 | import joseluisgs.es.services.cache.raquetas.RaquetasCacheImpl 12 | import kotlinx.coroutines.flow.flowOf 13 | import kotlinx.coroutines.flow.toList 14 | import kotlinx.coroutines.test.runTest 15 | import org.junit.jupiter.api.Assertions.* 16 | import org.junit.jupiter.api.Test 17 | import org.junit.jupiter.api.TestInstance 18 | import org.junit.jupiter.api.extension.ExtendWith 19 | import java.util.* 20 | 21 | @TestInstance(TestInstance.Lifecycle.PER_CLASS) 22 | @ExtendWith(MockKExtension::class) 23 | class RaquetasCachedRepositoryImplKtTest { 24 | 25 | val raqueta = Raqueta( 26 | id = UUID.fromString("044e6ec7-aa6c-46bb-9433-8094ef4ae8bc"), 27 | marca = "Test", 28 | precio = 199.9, 29 | representanteId = UUID.fromString("b39a2fd2-f7d7-405d-b73c-b68a8dedbcdf") 30 | ) 31 | 32 | @MockK 33 | lateinit var repo: RaquetasRepositoryImpl 34 | 35 | @SpyK 36 | var cache = RaquetasCacheImpl() 37 | 38 | @InjectMockKs 39 | lateinit var repository: RaquetasCachedRepositoryImpl 40 | 41 | init { 42 | MockKAnnotations.init(this) 43 | } 44 | 45 | 46 | @Test 47 | fun findAll() = runTest { 48 | // Usamos coEvery para poder usar corutinas 49 | coEvery { repo.findAll() } returns flowOf(raqueta) 50 | 51 | // Llamamos al método 52 | val result = repository.findAll().toList() 53 | 54 | assertAll( 55 | { assertEquals(1, result.size) }, 56 | { assertEquals(raqueta, result[0]) } 57 | ) 58 | 59 | coVerify(exactly = 1) { repo.findAll() } 60 | 61 | } 62 | 63 | @Test 64 | fun findAllPageable() = runTest { 65 | // Usamos coEvery para poder usar corutinas 66 | coEvery { repo.findAllPageable(0, 10) } returns flowOf(raqueta) 67 | 68 | // Llamamos al método 69 | val result = repository.findAllPageable(0, 10).toList() 70 | 71 | assertAll( 72 | { assertEquals(1, result.size) }, 73 | { assertEquals(raqueta, result[0]) } 74 | ) 75 | 76 | coVerify(exactly = 1) { repo.findAllPageable(0, 10) } 77 | } 78 | 79 | 80 | /* @Test 81 | fun findByNombre() = runTest { 82 | // Usamos coEvery para poder usar corutinas 83 | coEvery { repo.findByNombre(any()) } returns flowOf(representante) 84 | 85 | 86 | // Llamamos al método 87 | val result = repository.findByNombre("Test") 88 | val representantes = mutableListOf