QueryWithPrefixesTest.java

/*******************************************************************************
 * Copyright (c) 2021 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.sparqlbuilder.core.query;

import static org.eclipse.rdf4j.sparqlbuilder.constraint.Expressions.datatype;
import static org.eclipse.rdf4j.sparqlbuilder.constraint.Expressions.lt;
import static org.eclipse.rdf4j.sparqlbuilder.constraint.Expressions.strlen;
import static org.eclipse.rdf4j.sparqlbuilder.core.SparqlBuilder.var;
import static org.eclipse.rdf4j.sparqlbuilder.rdf.Rdf.iri;
import static org.junit.jupiter.api.Assertions.assertEquals;

import org.eclipse.rdf4j.model.vocabulary.FOAF;
import org.eclipse.rdf4j.model.vocabulary.XSD;
import org.eclipse.rdf4j.sparqlbuilder.constraint.Expressions;
import org.eclipse.rdf4j.sparqlbuilder.core.Variable;
import org.eclipse.rdf4j.sparqlbuilder.examples.BaseExamples;
import org.junit.jupiter.api.Test;

public class QueryWithPrefixesTest extends BaseExamples {
	@Test
	public void testSelectQuery1Prefix() {
		Variable x = var("x"), name = var("name");
		query = Queries
				.SELECT(name)
				.prefix(FOAF.NS)
				.where(x.has(FOAF.NAME, name));
		assertEquals(
				"PREFIX foaf: <http://xmlns.com/foaf/0.1/>\n"
						+ "SELECT ?name\n"
						+ "WHERE { ?x foaf:name ?name . }\n",
				query.getQueryString());
	}

	@Test
	public void testSelectQuery2Prefixes() {
		Variable x = var("x"), name = var("name");
		query = Queries
				.SELECT(name)
				.prefix(FOAF.NS)
				.prefix(XSD.NS)
				.where(x.has(FOAF.NAME, name).filter(Expressions.equals(datatype(name), iri(XSD.STRING))));
		assertEquals(
				"PREFIX foaf: <http://xmlns.com/foaf/0.1/>\n"
						+ "PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>\n"
						+ "SELECT ?name\n"
						+ "WHERE { ?x foaf:name ?name .\n"
						+ "FILTER ( DATATYPE( ?name ) = xsd:string ) }\n",
				query.getQueryString());
	}

	@Test
	public void testInsertQuery1Prefix() {
		Variable x = var("x"), name = var("name");
		ModifyQuery modifyQuery = Queries
				.INSERT(x.has(FOAF.NAME, name))
				.prefix(FOAF.NS)
				.where(x.has(FOAF.SURNAME, name));
		assertEquals(
				"PREFIX foaf: <http://xmlns.com/foaf/0.1/>\n"
						+ "INSERT { ?x foaf:name ?name . }\n"
						+ "WHERE { ?x foaf:surname ?name . }",
				modifyQuery.getQueryString());
	}

	@Test
	public void testInsertQuery2Prefixes() {
		Variable x = var("x"), name = var("name");
		ModifyQuery modifyQuery = Queries
				.INSERT(x.has(FOAF.NAME, name))
				.prefix(FOAF.NS)
				.prefix(XSD.NS)
				.where(x.has(FOAF.SURNAME, name).filter(Expressions.equals(datatype(name), iri(XSD.STRING))));
		assertEquals(
				"PREFIX foaf: <http://xmlns.com/foaf/0.1/>\n"
						+ "PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>\n"
						+ "INSERT { ?x foaf:name ?name . }\n"
						+ "WHERE { ?x foaf:surname ?name .\n"
						+ "FILTER ( DATATYPE( ?name ) = xsd:string ) }",
				modifyQuery.getQueryString());
	}

	@Test
	public void testSelectQueryWithPropertyPath2Prefixes() {
		Variable x = var("x"), name = var("name");
		query = Queries
				.SELECT(name)
				.prefix(FOAF.NS)
				.where(x.has(p -> p.pred(FOAF.ACCOUNT).then(FOAF.MBOX).build(), name));
		assertEquals(
				"PREFIX foaf: <http://xmlns.com/foaf/0.1/>\n"
						+ "SELECT ?name\n"
						+ "WHERE { ?x foaf:account / foaf:mbox ?name . }\n",
				query.getQueryString());
	}

	@Test
	public void testSelectQuery1PrefixWithAngledBracket() {
		Variable x = var("x"), name = var("name");
		query = Queries
				.SELECT(name)
				.prefix(FOAF.NS)
				.where(x.has(FOAF.NAME, name)
						.filter(lt(strlen(name), 10)));
		assertEquals(
				"PREFIX foaf: <http://xmlns.com/foaf/0.1/>\n"
						+ "SELECT ?name\n"
						+ "WHERE { ?x foaf:name ?name .\n"
						+ "FILTER ( STRLEN( ?name ) < 10 ) }\n",
				query.getQueryString());
	}
}