/*
* Licensed to DuraSpace under one or more contributor license agreements.
* See the NOTICE file distributed with this work for additional information
* regarding copyright ownership.
*
* DuraSpace licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.fcrepo.kernel.modeshape.utils.iterators;
import static java.util.stream.Stream.of;
import static com.google.common.collect.Sets.newHashSet;
import static org.apache.jena.graph.NodeFactory.createBlankNode;
import static org.apache.jena.graph.NodeFactory.createURI;
import static org.apache.jena.graph.Triple.create;
import static org.apache.jena.rdf.model.ModelFactory.createDefaultModel;
import static org.apache.jena.rdf.model.ResourceFactory.createProperty;
import static org.apache.jena.rdf.model.ResourceFactory.createResource;
import static org.apache.jena.rdf.model.ResourceFactory.createStatement;
import static org.apache.jena.vocabulary.RDF.type;
import static org.fcrepo.kernel.api.RdfLexicon.PAGE;
import static org.fcrepo.kernel.api.RdfLexicon.REPOSITORY_NAMESPACE;
import static org.fcrepo.kernel.modeshape.RdfJcrLexicon.JCR_NAMESPACE;
import static org.junit.Assert.assertTrue;
import static org.mockito.MockitoAnnotations.initMocks;
import java.util.Set;
import java.util.stream.Stream;
import javax.jcr.Node;
import javax.jcr.Session;
import org.fcrepo.kernel.api.identifiers.IdentifierConverter;
import org.fcrepo.kernel.api.models.FedoraResource;
import org.fcrepo.kernel.api.RdfStream;
import org.fcrepo.kernel.api.rdf.DefaultRdfStream;
import org.fcrepo.kernel.modeshape.rdf.impl.DefaultIdentifierTranslator;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.mockito.Mock;
import com.google.common.collect.ObjectArrays;
import org.apache.jena.graph.Triple;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.Resource;
import org.apache.jena.rdf.model.Statement;
/**
* <p>PersistingRdfStreamConsumerTest class.</p>
*
* @author ajs6f
*/
@Ignore
public class PersistingRdfStreamConsumerTest {
@Test
public void testConsumeAsync() {
try (final RdfStream testStream = new DefaultRdfStream(createURI("subject"), of(profferedStatements)
.map(Statement::asTriple))) {
final Set<Statement> rejectedStatements = newHashSet(profferedStatements);
final Set<Statement> acceptedStatements = newHashSet();
final Set<Resource> rejectedMixins = newHashSet(profferedMixins);
final Set<Resource> acceptedMixins = newHashSet();
testPersister = new PersistingRdfStreamConsumer(idTranslator, mockSession, testStream) {
@Override
protected void operateOnProperty(final Statement s, final FedoraResource resource) {
rejectedStatements.remove(s);
acceptedStatements.add(s);
}
@Override
protected void operateOnMixin(final Resource mixinResource, final FedoraResource resource) {
rejectedMixins.remove(mixinResource);
acceptedMixins.add(mixinResource);
}
};
testPersister.consumeAsync();
assertTrue("Failed to operate on ordinary property!", acceptedStatements.contains(propertyStatement) &&
!rejectedStatements.contains(propertyStatement));
assertTrue("Wrongly operated on foreign property!", !acceptedStatements.contains(foreignStatement) &&
rejectedStatements.contains(foreignStatement));
assertTrue("Failed to operate on ordinary mixin!", acceptedMixins.contains(mixinStatement.getObject()
.asResource()) && !rejectedMixins.contains(mixinStatement.getObject().asResource()));
}
}
@Before
public void setUp() {
initMocks(this);
idTranslator = new DefaultIdentifierTranslator(mockSession);
}
private static final Model m = createDefaultModel();
private static final org.apache.jena.graph.Node subject = m.createResource("x").asNode();
private static final org.apache.jena.graph.Node object = m.createResource("y").asNode();
private static final org.apache.jena.graph.Node foreignSubject = m.createResource("z").asNode();
private static final Triple propertyTriple = create(subject,
createBlankNode(), object);
private static final Statement propertyStatement = m
.asStatement(propertyTriple);
private static final Triple ldpManagedPropertyTriple = create(subject, PAGE.asNode(), object);
private static final Statement ldpManagedPropertyStatement = m.asStatement(ldpManagedPropertyTriple);
private static final Triple fedoraManagedPropertyTriple =
create(subject,createURI(REPOSITORY_NAMESPACE + "thing"), object);
private static final Statement fedoraManagedPropertyStatement = m.asStatement(fedoraManagedPropertyTriple);
private static final Statement jcrManagedPropertyStatement =
createStatement(createResource(), createProperty(JCR_NAMESPACE, "thing"), createResource());
private static final Triple managedMixinTriple = create(subject, type.asNode(),
createURI(REPOSITORY_NAMESPACE + "mixin"));
private static final Statement managedMixinStatement = m.asStatement(managedMixinTriple);
private static final Triple mixinTriple = create(subject,
type.asNode(), createURI("myNS:mymixin"));
private static final Statement mixinStatement = m.asStatement(mixinTriple);
private static final Triple foreignTriple = create(foreignSubject,
createBlankNode(), object);
private static final Statement foreignStatement = m.asStatement(foreignTriple);
private static final Statement[] fedoraStatements = new Statement[] {
propertyStatement, ldpManagedPropertyStatement, mixinStatement,
managedMixinStatement, jcrManagedPropertyStatement,
fedoraManagedPropertyStatement};
private static final Statement[] profferedStatements = ObjectArrays
.concat(fedoraStatements, foreignStatement);
private final static Resource[] profferedMixins = new Resource[] {
mixinStatement.getObject().asResource(),
managedMixinStatement.getObject().asResource()};
@Mock
private Session mockSession;
@Mock
private Node mockNode;
private IdentifierConverter<Resource, FedoraResource> idTranslator;
@Mock
private Stream<Triple> mockTriples;
private PersistingRdfStreamConsumer testPersister;
}