RepositoryConfigTest.java

/*******************************************************************************
 * Copyright (c) 2023 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.repository.config;

import static org.assertj.core.api.Assertions.assertThat;
import static org.eclipse.rdf4j.model.util.Values.iri;
import static org.eclipse.rdf4j.model.util.Values.literal;

import org.eclipse.rdf4j.model.Model;
import org.eclipse.rdf4j.model.impl.DynamicModelFactory;
import org.eclipse.rdf4j.model.util.ModelBuilder;
import org.eclipse.rdf4j.model.vocabulary.CONFIG;
import org.junit.jupiter.api.Test;

public class RepositoryConfigTest {

	public static final String ID = "test";

	@Test
	public void testParse_newVocabulary() {

		var repoNode = iri("urn:repo1");
		Model m = new ModelBuilder()
				.subject(repoNode)
				.add(CONFIG.Rep.id, ID)
				.build();

		RepositoryConfig config = new RepositoryConfig(ID);

		config.parse(m, repoNode);

		assertThat(config.getID()).isEqualTo(ID);
	}

	@Test
	public void testParse_useLegacy_newVocabulary() {
		var repoNode = iri("urn:repo1");
		Model m = new ModelBuilder()
				.subject(repoNode)
				.add(CONFIG.Rep.id, ID)
				.build();

		RepositoryConfig config = new RepositoryConfig();

		System.setProperty("org.eclipse.rdf4j.model.vocabulary.useLegacyConfig", "true");
		config.parse(m, repoNode);
		System.setProperty("org.eclipse.rdf4j.model.vocabulary.useLegacyConfig", "");

		assertThat(config.getID()).isEqualTo(ID);
	}

	@Test
	public void testParse_oldVocabulary() {
		var repoNode = iri("urn:repo1");
		Model m = new ModelBuilder()
				.subject(repoNode)
				.add(RepositoryConfigSchema.REPOSITORYID, ID)
				.build();

		RepositoryConfig config = new RepositoryConfig();

		config.parse(m, repoNode);

		assertThat(config.getID()).isEqualTo(ID);
	}

	@Test
	public void testParse_mixedVocabulary() {
		var repoNode = iri("urn:repo1");

		var newId = "new_test";
		Model m = new ModelBuilder()
				.subject(repoNode)
				.add(RepositoryConfigSchema.REPOSITORYID, ID)
				.add(CONFIG.Rep.id, newId)
				.build();

		RepositoryConfig config = new RepositoryConfig();

		config.parse(m, repoNode);

		assertThat(config.getID()).isEqualTo(newId);
	}

	@Test
	public void testParse_useLegacy_mixedVocabulary() {
		var repoNode = iri("urn:repo1");
		var newId = "new_test";
		Model m = new ModelBuilder()
				.subject(repoNode)
				.add(RepositoryConfigSchema.REPOSITORYID, ID)
				.add(CONFIG.Rep.id, newId)
				.build();

		RepositoryConfig config = new RepositoryConfig();

		System.setProperty("org.eclipse.rdf4j.model.vocabulary.useLegacyConfig", "true");
		config.parse(m, repoNode);
		System.setProperty("org.eclipse.rdf4j.model.vocabulary.useLegacyConfig", "");

		assertThat(config.getID()).isEqualTo(ID);
	}

	@Test
	public void testExport() {
		var repoNode = iri("urn:repo1");
		var config = new RepositoryConfig(ID);
		var m = new DynamicModelFactory().createEmptyModel();
		config.export(m, repoNode);

		assertThat(m.filter(repoNode, CONFIG.Rep.id, null).objects()).containsExactly(literal(ID));
		assertThat(m.filter(repoNode, RepositoryConfigSchema.REPOSITORYID, null).objects()).isEmpty();
	}

	@Test
	public void testExport_useLegacy() {
		var repoNode = iri("urn:repo1");
		var config = new RepositoryConfig(ID);
		var m = new DynamicModelFactory().createEmptyModel();
		System.setProperty("org.eclipse.rdf4j.model.vocabulary.useLegacyConfig", "true");
		config.export(m, repoNode);
		System.setProperty("org.eclipse.rdf4j.model.vocabulary.useLegacyConfig", "");

		assertThat(m.filter(repoNode, RepositoryConfigSchema.REPOSITORYID, null).objects())
				.containsExactly(literal(ID));
		assertThat(m.filter(repoNode, CONFIG.Rep.id, null).objects()).isEmpty();
	}
}