package org.gbif.occurrence.ws.resources;
import org.gbif.api.model.common.UserPrincipal;
import org.gbif.api.model.occurrence.DownloadFormat;
import org.gbif.api.model.occurrence.DownloadRequest;
import org.gbif.api.model.occurrence.predicate.EqualsPredicate;
import org.gbif.api.model.occurrence.search.OccurrenceSearchParameter;
import org.gbif.api.service.occurrence.DownloadRequestService;
import org.gbif.api.service.registry.OccurrenceDownloadService;
import org.gbif.occurrence.download.service.CallbackService;
import org.gbif.ws.security.NotAllowedException;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class DownloadResourceTest {
private static final String JOB_ID = "FOO";
private static final String USER = "testuser";
private static final String STATUS = "SUCCEEDED";
private DownloadResource resource;
private DownloadRequest dl;
private SecurityContext sec;
@Test
public void testCallback() {
prepareMocks(USER);
Response response = resource.oozieCallback(JOB_ID, STATUS);
assertThat(response.getStatus(), equalTo(Response.Status.OK.getStatusCode()));
}
@Test
public void testStartDownload() {
prepareMocks(USER);
String jobId = resource.startDownload(dl, sec);
assertThat(jobId, equalTo(JOB_ID));
}
@Test(expected = NotAllowedException.class)
public void testStartDownloadNotAuthenticated() {
prepareMocks("foo");
resource.startDownload(dl, sec);
}
private void prepareMocks(String user) {
CallbackService callbackService = mock(CallbackService.class);
DownloadRequestService service = mock(DownloadRequestService.class);
OccurrenceDownloadService downloadService = mock(OccurrenceDownloadService.class);
sec = mock(SecurityContext.class);
UserPrincipal userP = mock(UserPrincipal.class);
when(userP.getName()).thenReturn(user);
when(sec.getUserPrincipal()).thenReturn(userP);
resource = new DownloadResource(service, callbackService, downloadService);
dl = new DownloadRequest(new EqualsPredicate(OccurrenceSearchParameter.TAXON_KEY, "1"), USER, null, true,
DownloadFormat.DWCA);
when(service.create(dl)).thenReturn(JOB_ID);
}
}