Skip to content

Commit

Permalink
Add missing transaction manager configuration for media storage
Browse files Browse the repository at this point in the history
  • Loading branch information
manuelprinz committed Feb 13, 2025
1 parent 14264c3 commit f7c8ef1
Show file tree
Hide file tree
Showing 9 changed files with 47 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ object Assets {

fun responseJson(name: String): String = fileContents("responses/$name.json").decodeToString()

fun png(name: String): ByteArray = fileContents("images/$name.png")

private fun fileContents(name: String): ByteArray =
ClassPathResource(URI.create("classpath:/assets/$name").path).inputStream.use { it.readBytes() }
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ testing {
implementation("org.springframework:spring-test")
implementation(testFixtures(project(":media-storage:media-storage-ports-output")))
implementation(testFixtures(project(":testing:spring")))
implementation("org.springframework.boot:spring-boot-test")
implementation("org.springframework:spring-orm")
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import org.springframework.context.annotation.Configuration
import org.springframework.data.jpa.repository.config.EnableJpaRepositories

@Configuration
@EnableJpaRepositories("org.orkg.mediastorage.adapter.output.jpa.internal")
@EnableJpaRepositories("org.orkg.mediastorage.adapter.output.jpa.internal", transactionManagerRef = "jpaTransactionManager")
@EntityScan("org.orkg.mediastorage.adapter.output.jpa.internal")
@ComponentScan(basePackages = ["org.orkg.mediastorage.adapter.output.jpa"])
class MediaStorageJpaConfiguration
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package org.orkg.mediastorage.adapter.output.jpa.configuration

import org.springframework.boot.test.context.TestConfiguration
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.ComponentScan
import org.springframework.orm.jpa.JpaTransactionManager

@TestConfiguration
@ComponentScan("org.orkg.mediastorage.adapter.output.jpa")
class MediaStorageJpaTestConfiguration {
@Bean
fun jpaTransactionManager(): JpaTransactionManager = JpaTransactionManager()
}
3 changes: 2 additions & 1 deletion media-storage/media-storage-core-services/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ plugins {

dependencies {
api("org.springframework:spring-context")
api(project(":common:spring-data"))
api(project(":media-storage:media-storage-core-model"))
api(project(":media-storage:media-storage-ports-input"))
api(project(":media-storage:media-storage-ports-output"))
implementation(project(":common:identifiers"))
implementation("org.springframework:spring-core")
implementation(project(":common:identifiers"))
}

testing {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@ import java.time.OffsetDateTime
import org.orkg.mediastorage.input.CreateImageUseCase
import org.orkg.mediastorage.input.ImageUseCases
import org.orkg.mediastorage.output.ImageRepository
import org.orkg.spring.data.annotations.TransactionalOnJPA
import org.springframework.stereotype.Service

@Service
@TransactionalOnJPA
class ImageService(
private val repository: ImageRepository,
private val clock: Clock = Clock.systemDefaultZone(),
Expand Down
2 changes: 2 additions & 0 deletions rest-api-server/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ testing {
implementation("org.keycloak:keycloak-client-common-synced")
runtimeOnly("org.springframework.boot:spring-boot")
runtimeOnly(project(":keycloak"))
implementation("org.springframework:spring-core")
implementation(project(":media-storage:media-storage-ports-input"))
}
targets {
all {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.orkg.common.testing.fixtures.Assets.png
import org.orkg.community.domain.OrganizationType
import org.orkg.community.input.ContributorUseCases
import org.orkg.community.input.ObservatoryUseCases
Expand All @@ -15,6 +16,9 @@ import org.orkg.createOrganization
import org.orkg.createResource
import org.orkg.graph.input.ClassUseCases
import org.orkg.graph.input.ResourceUseCases
import org.orkg.mediastorage.domain.ImageData
import org.orkg.mediastorage.input.CreateImageUseCase
import org.orkg.mediastorage.input.ImageUseCases
import org.orkg.testing.annotations.Neo4jContainerIntegrationTest
import org.orkg.testing.spring.MockMvcBaseTest
import org.springframework.beans.factory.annotation.Autowired
Expand All @@ -25,6 +29,7 @@ import org.springframework.restdocs.payload.ResponseFieldsSnippet
import org.springframework.restdocs.request.RequestDocumentation.parameterWithName
import org.springframework.restdocs.request.RequestDocumentation.pathParameters
import org.springframework.test.web.servlet.result.MockMvcResultMatchers.status
import org.springframework.util.MimeType

@Neo4jContainerIntegrationTest
internal class OrganizationControllerIntegrationTest : MockMvcBaseTest("organizations") {
Expand All @@ -43,6 +48,9 @@ internal class OrganizationControllerIntegrationTest : MockMvcBaseTest("organiza
@Autowired
private lateinit var classService: ClassUseCases

@Autowired
private lateinit var imageService: ImageUseCases

@BeforeEach
fun setup() {
assertThat(service.listOrganizations()).hasSize(0)
Expand Down Expand Up @@ -97,6 +105,21 @@ internal class OrganizationControllerIntegrationTest : MockMvcBaseTest("organiza
.andDo(generateDefaultDocSnippets())
}

@Test
fun fetchLogo() {
val contributorId = contributorService.createContributor()
val imageId = imageService.create(CreateImageUseCase.CreateCommand(
data = ImageData(png("white_pixel")),
mimeType = MimeType.valueOf("image/png"),
createdBy = contributorId,
))
val organizationId = service.createOrganization(createdBy = contributorId, logoId = imageId)

get("/api/organizations/{id}/logo", organizationId)
.perform()
.andExpect(status().isOk)
}

@Test
fun lookUpObservatoriesByOrganization() {
val contributorId = contributorService.createContributor()
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit f7c8ef1

Please sign in to comment.