001/*
002 * The contents of this file are subject to the license and copyright
003 * detailed in the LICENSE and NOTICE files at the root of the source
004 * tree.
005 */
006package org.fcrepo.kernel.impl.operations;
007
008import static org.junit.Assert.assertEquals;
009
010import org.apache.commons.io.IOUtils;
011
012import org.fcrepo.kernel.api.Transaction;
013import org.fcrepo.kernel.api.identifiers.FedoraId;
014import org.fcrepo.kernel.api.models.ExternalContent;
015import org.fcrepo.kernel.api.operations.NonRdfSourceOperation;
016import org.fcrepo.kernel.api.operations.NonRdfSourceOperationBuilder;
017import org.junit.Before;
018import org.junit.Test;
019import org.junit.runner.RunWith;
020import org.mockito.Mock;
021import org.mockito.junit.MockitoJUnitRunner;
022
023import java.io.InputStream;
024import java.net.URI;
025import java.util.Collection;
026import java.util.HashSet;
027import java.util.stream.Collectors;
028import java.util.stream.Stream;
029
030/**
031 * @author bseeger
032 */
033@RunWith(MockitoJUnitRunner.Silent.class)
034public class CreateNonRdfSourceOperationBuilderTest {
035
036    private InputStream stream;
037
038    private NonRdfSourceOperationBuilder internalBuilder;
039
040    final FedoraId resourceId = FedoraId.create("info:fedora/test-subject");
041
042    @Mock
043    private Transaction tx;
044
045    @Before
046    public void setUp() throws Exception {
047        stream = IOUtils.toInputStream("This is some test data", "UTF-8");
048        internalBuilder = new CreateNonRdfSourceOperationBuilderImpl(tx, resourceId, stream);
049    }
050
051    @Test
052    public void testContent() throws Exception {
053        final NonRdfSourceOperation op = internalBuilder.build();
054        assertEquals(stream, op.getContentStream());
055    }
056
057    @Test
058    public void testExternal() {
059        final URI uri = URI.create("http://example.org/test/location");
060        final String handling = ExternalContent.PROXY;
061        final NonRdfSourceOperationBuilder builder =
062                new CreateNonRdfSourceOperationBuilderImpl(tx, resourceId, handling, uri);
063        final NonRdfSourceOperation op = builder.build();
064        assertEquals(uri, op.getContentUri());
065        assertEquals(handling, op.getExternalHandling());
066    }
067
068    @Test
069    public void testMimeType() {
070        final String mimeType = "text/plain";
071        final NonRdfSourceOperation op = internalBuilder.mimeType(mimeType).build();
072        assertEquals(mimeType, op.getMimeType());
073    }
074
075    @Test
076    public void testFilename() {
077        final String filename = "someFile.txt";
078        final NonRdfSourceOperation op = internalBuilder.filename(filename).build();
079        assertEquals(filename, op.getFilename());
080    }
081
082    @Test
083    public void testSize() {
084        final long filesize = 123l;
085        final NonRdfSourceOperation op = internalBuilder.contentSize(filesize).build();
086        assertEquals(filesize, op.getContentSize());
087    }
088
089    @Test
090    public void testDigests() {
091        final Collection<URI> digests = Stream.of("urn:sha1:1234abcd", "urn:md5:zyxw9876").map(URI::create)
092                .collect(Collectors.toCollection(HashSet::new));
093        final NonRdfSourceOperation op = internalBuilder.contentDigests(digests).build();
094        assertEquals(digests, op.getContentDigests());
095    }
096}