ReadonlyTests.java

/*******************************************************************************
 * Copyright (c) 2022 Eclipse RDF4J contributors.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Distribution License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 *******************************************************************************/

package org.eclipse.rdf4j.spring.readonly;

import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.util.Optional;

import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.spring.TestConfig;
import org.eclipse.rdf4j.spring.domain.dao.ArtistDao;
import org.eclipse.rdf4j.spring.domain.model.Artist;
import org.eclipse.rdf4j.spring.operationlog.OperationLogConfig;
import org.eclipse.rdf4j.spring.operationlog.log.jmx.OperationLogJmxConfig;
import org.eclipse.rdf4j.spring.pool.PoolConfig;
import org.eclipse.rdf4j.spring.repository.inmemory.InMemoryRepositoryConfig;
import org.eclipse.rdf4j.spring.repository.remote.RemoteRepositoryConfig;
import org.eclipse.rdf4j.spring.resultcache.ResultCacheConfig;
import org.eclipse.rdf4j.spring.tx.TxConfig;
import org.eclipse.rdf4j.spring.tx.exception.WriteDeniedException;
import org.eclipse.rdf4j.spring.uuidsource.noveltychecking.NoveltyCheckingUUIDSourceConfig;
import org.eclipse.rdf4j.spring.uuidsource.sequence.UUIDSequenceConfig;
import org.eclipse.rdf4j.spring.uuidsource.simple.SimpleRepositoryUUIDSourceConfig;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit.jupiter.SpringExtension;

@ExtendWith(SpringExtension.class)
@ContextConfiguration(
		classes = {
				TestConfig.class,
				InMemoryRepositoryConfig.class,
				RemoteRepositoryConfig.class,
				PoolConfig.class,
				ResultCacheConfig.class,
				TxConfig.class,
				OperationLogConfig.class,
				OperationLogJmxConfig.class,
				UUIDSequenceConfig.class,
				NoveltyCheckingUUIDSourceConfig.class,
				SimpleRepositoryUUIDSourceConfig.class,
				ReadonlyTests.Config.class
		})
@ComponentScan(
		value = {
				"at.researchstudio.sat.merkmalservice.readonly",
				"at.researchstudio.sat.merkmalservice.service"
		})
@TestPropertySource("classpath:application.properties")
@TestPropertySource(
		properties = {
				"rdf4j.spring.repository.inmemory.enabled=true",
				"rdf4j.spring.repository.inmemory.use-shacl-sail=true",
				"rdf4j.spring.tx.enabled=true"
		})
public class ReadonlyTests {

	@Configuration
	public static class Config {
		@Bean
		public TestHelperService getTestHelperService(@Autowired ArtistDao artistDao) {
			return new TestHelperService(artistDao);
		}
	}

	@Autowired
	TestHelperService testHelperService;

	private static IRI projectId = null;

	@Test
	@Order(1)
	public void testReadonlyTransactionBehaviour() {
		projectId = testHelperService.createArtist();
		assertNotNull(projectId);
	}

	@Test
	@Order(2)
	public void testReadonlyTransactionBehaviour2() {
		Optional<Artist> artist = testHelperService.loadProject(projectId);
		assertTrue(artist.isPresent());
	}

	@Test
	@Order(3)
	public void test3() {
		assertThrows(
				WriteDeniedException.class,
				() -> testHelperService.createProjectInReadonlyTransaction());
	}
}