/*
* Copyright (C) 2014 CLARIN
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
package eu.clarin.cmdi.virtualcollectionregistry.rest;
import com.sun.jersey.api.uri.UriBuilderImpl;
import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionRegistry;
import eu.clarin.cmdi.virtualcollectionregistry.model.VirtualCollection;
import eu.clarin.cmdi.virtualcollectionregistry.pid.PersistentIdentifier;
import eu.clarin.cmdi.virtualcollectionregistry.service.VirtualCollectionMarshaller;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.net.URI;
import java.security.Principal;
import java.util.List;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.core.Variant;
import static org.hamcrest.Matchers.*;
import org.jmock.Expectations;
import static org.jmock.Expectations.equal;
import static org.jmock.Expectations.returnValue;
import org.jmock.Mockery;
import org.jmock.integration.junit4.JUnit4Mockery;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
/**
*
* @author twagoo
*/
public class VirtualCollectionResourceTest {
private final static long ID = 123L;
private Mockery context = new JUnit4Mockery();
private VirtualCollectionResource instance;
private VirtualCollectionRegistry registry;
private VirtualCollectionMarshaller marshaller;
private UriInfo uriInfo;
private HttpHeaders headers;
private SecurityContext security;
@Before
public void setUp() throws Exception {
registry = context.mock(VirtualCollectionRegistry.class);
marshaller = context.mock(VirtualCollectionMarshaller.class);
uriInfo = context.mock(UriInfo.class);
headers = context.mock(HttpHeaders.class);
security = context.mock(SecurityContext.class);
instance = new VirtualCollectionResource(registry, marshaller, security, headers, uriInfo, ID);
}
/**
* Test of getVirtualCollection method, of class VirtualCollectionResource.
*/
@Test
public void testGetPublicVirtualCollection() throws Exception {
final Request request = context.mock(Request.class);
// create a public VC to have returned by the registry service
final VirtualCollection vc = new VirtualCollection();
vc.setId(ID);
vc.setName("Test VC");
vc.setState(VirtualCollection.State.PUBLIC_PENDING);
// set PID and set state to public
vc.setPersistentIdentifier(new PersistentIdentifier(vc, PersistentIdentifier.Type.DUMMY, "PID"));
context.checking(new Expectations() {
{
oneOf(registry).retrieveVirtualCollection(ID);
will(returnValue(vc));
}
});
final Response response = instance.getVirtualCollection(request);
assertEquals(200, response.getStatus());
assertEquals(vc, response.getEntity());
}
/**
* Test of getVirtualCollection method, of class VirtualCollectionResource.
*/
@Test
public void testGetPrivateVirtualCollection() throws Exception {
final Request request = context.mock(Request.class);
// create a public VC to have returned by the registry service
final VirtualCollection vc = new VirtualCollection();
vc.setId(ID);
vc.setName("Test VC");
vc.setState(VirtualCollection.State.PRIVATE);
// prepare variants for content negotiation
final List variants = Variant.mediaTypes(MediaType.APPLICATION_XML_TYPE).add().build();
context.checking(new Expectations() {
{
oneOf(registry).retrieveVirtualCollection(ID);
will(returnValue(vc));
// it's private, so service will check whether non-CMDI XML is acceptable
exactly(1).of(equal(request))
.method("selectVariant").with(hasItems(variants.toArray()));
// we will accept XML
will(returnValue(variants.get(0)));
}
});
final Response response = instance.getVirtualCollection(request);
assertEquals(200, response.getStatus());
assertEquals(vc, response.getEntity());
}
/**
* Test of getVirtualCollectionDetailsRedirect method, of class
* VirtualCollectionResource.
*/
@Test
public void testGetVirtualCollectionDetailsRedirect() throws Exception {
context.checking(new Expectations() {
{
oneOf(uriInfo).getBaseUriBuilder();
will(returnValue(new UriBuilderImpl().path("http://server/vcr")));
}
});
final Response response = instance.getVirtualCollectionDetailsRedirect();
assertEquals(303, response.getStatus());
final List