package nl.knaw.huygens.alexandria.client;
/*
* #%L
* alexandria-java-client
* =======
* Copyright (C) 2015 - 2017 Huygens ING (KNAW)
* =======
* 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
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
import static org.assertj.core.api.Assertions.assertThat;
import java.util.UUID;
import org.junit.Test;
import nl.knaw.huygens.Log;
import nl.knaw.huygens.alexandria.api.model.AlexandriaState;
import nl.knaw.huygens.alexandria.client.model.AnnotationList;
import nl.knaw.huygens.alexandria.client.model.AnnotationPojo;
import nl.knaw.huygens.alexandria.client.model.AnnotationPrototype;
import nl.knaw.huygens.alexandria.client.model.ProvenancePojo;
import nl.knaw.huygens.alexandria.client.model.ResourcePojo;
import nl.knaw.huygens.alexandria.client.model.ResourcePrototype;
import nl.knaw.huygens.alexandria.client.model.SubResourceList;
import nl.knaw.huygens.alexandria.client.model.SubResourcePojo;
import nl.knaw.huygens.alexandria.client.model.SubResourcePrototype;
public class ResourceTest extends AlexandriaClientTest {
@Test
public void testAddResourceReturnsValidUUID() {
client.setAuthKey(AUTHKEY);
client.setAutoConfirm(false);
String resourceRef = "corpus";
ResourcePrototype resource = new ResourcePrototype().setRef(resourceRef);
RestResult<UUID> result = client.addResource(resource);
assertRequestSucceeded(result);
UUID resourceUuid = result.get();
Log.info("resourceUUID = {}", resourceUuid);
softly.assertThat(resourceUuid).isNotNull();
// retrieve the resource
RestResult<ResourcePojo> result2 = client.getResource(resourceUuid);
assertRequestSucceeded(result2);
ResourcePojo resourcePojo = result2.get();
softly.assertThat(resourcePojo).isNotNull();
softly.assertThat(resourcePojo.getRef()).as("ref").isEqualTo("corpus");
softly.assertThat(resourcePojo.getState().getValue()).as("state").isEqualTo(AlexandriaState.TENTATIVE);
// confirm the resource
RestResult<Void> result3 = client.confirmResource(resourceUuid);
assertRequestSucceeded(result3);
// retrieve the resource again
RestResult<ResourcePojo> result4 = client.getResource(resourceUuid);
assertRequestSucceeded(result4);
ResourcePojo resourcePojo2 = result4.get();
softly.assertThat(resourcePojo2).isNotNull();
softly.assertThat(resourcePojo2.getRef()).as("ref").isEqualTo("corpus");
softly.assertThat(resourcePojo2.getState().getValue()).as("state").isEqualTo(AlexandriaState.CONFIRMED);
}
@Test
public void testAddSubResourceReturnsValidUUID() {
client.setAuthKey(AUTHKEY);
client.setAutoConfirm(true);
UUID resourceUuid = createResource("corpus");
String ref = "/some/sub/path";
UUID subresourceUuid = createSubResource(resourceUuid, ref);
// retrieve the resource again
RestResult<SubResourcePojo> getResult1 = client.getSubResource(subresourceUuid);
assertRequestSucceeded(getResult1);
SubResourcePojo subResourcePojo1 = getResult1.get();
softly.assertThat(subResourcePojo1).isNotNull();
softly.assertThat(subResourcePojo1.getSub()).as("sub").isEqualTo(ref);
softly.assertThat(subResourcePojo1.getState().getValue()).as("state").isEqualTo(AlexandriaState.CONFIRMED);
}
@Test
public void testSetSubResourceReturnsGivenUUID() {
client.setAuthKey(AUTHKEY);
client.setAutoConfirm(true);
UUID resourceUuid = createResource("corpus");
UUID subresourceUUID = UUID.randomUUID();
String ref = "/some/sub/path";
SubResourcePrototype subresource = new SubResourcePrototype().setSub(ref);
RestResult<Void> setResult1 = client.setSubResource(resourceUuid, subresourceUUID, subresource);
assertRequestSucceeded(setResult1);
// retrieve the resource again
RestResult<SubResourcePojo> getResult1 = client.getSubResource(subresourceUUID);
assertRequestSucceeded(getResult1);
SubResourcePojo subResourcePojo1 = getResult1.get();
softly.assertThat(subResourcePojo1).isNotNull();
softly.assertThat(subResourcePojo1.getSub()).as("sub").isEqualTo(ref);
softly.assertThat(subResourcePojo1.getState().getValue()).as("state").isEqualTo(AlexandriaState.CONFIRMED);
// update the subresource
String ref2 = "/some/other/sub/path";
SubResourcePrototype newSubresource = new SubResourcePrototype().setSub(ref2);
RestResult<Void> setResult2 = client.setSubResource(resourceUuid, subresourceUUID, newSubresource);
assertRequestSucceeded(setResult2);
RestResult<SubResourcePojo> getResult2 = client.getSubResource(subresourceUUID);
assertRequestSucceeded(getResult2);
SubResourcePojo subResourcePojo2 = getResult2.get();
softly.assertThat(subResourcePojo2).isNotNull();
softly.assertThat(subResourcePojo2.getSub()).as("sub").isEqualTo(ref2);
softly.assertThat(subResourcePojo2.getState().getValue()).as("state").isEqualTo(AlexandriaState.CONFIRMED);
}
@Test
public void testAddResourceWithProvenanceReturnsValidUUID() {
client.setAuthKey(AUTHKEY);
ResourcePrototype resource = new ResourcePrototype()//
.setRef("corpus2")//
.setProvenance(new ProvenancePojo().setWho("test").setWhy("because test"));
RestResult<UUID> result = client.addResource(resource);
assertRequestSucceeded(result);
UUID resourceUuid = result.get();
Log.info("resourceUUID = {}", resourceUuid);
assertThat(resourceUuid).isNotNull();
}
@Test
public void testSetResourceWithProvidedUUID() {
client.setAuthKey(AUTHKEY);
String ref = "resource3";
ResourcePrototype resource = new ResourcePrototype().setRef(ref).setProvenance(new ProvenancePojo().setWho("test3").setWhy("because test3"));
UUID resourceId = UUID.fromString("11111111-1111-1111-1111-111111111111");
RestResult<Void> result = client.setResource(resourceId, resource);
assertRequestSucceeded(result);
// retrieve the resource
RestResult<ResourcePojo> result2 = client.getResource(resourceId);
assertRequestSucceeded(result2);
ResourcePojo resourcePojo = result2.get();
softly.assertThat(resourcePojo).as("entity != null").isNotNull();
softly.assertThat(resourcePojo.getRef()).as("ref").isEqualTo(ref);
softly.assertThat(resourcePojo.getState().getValue()).as("state").isEqualTo(AlexandriaState.CONFIRMED);
}
@Test
public void testGetAnnotationsFromResourceUUID() {
client.setAuthKey(AUTHKEY);
String ref = "resource4";
ResourcePrototype resource = new ResourcePrototype().setRef(ref).setProvenance(new ProvenancePojo().setWho("test4").setWhy("because test4"));
UUID resourceId = UUID.fromString("11111111-1111-1111-1111-111111111112");
RestResult<Void> result = client.setResource(resourceId, resource);
assertRequestSucceeded(result);
// add annotations
RestResult<UUID> annotateResourceResult1 = client.annotateResource(resourceId, new AnnotationPrototype().setType("typeUno").setValue("valueUno"));
assertRequestSucceeded(annotateResourceResult1);
AnnotationPojo annotation1 = client.getAnnotation(annotateResourceResult1.get()).get();
RestResult<UUID> annotateResourceResult2 = client.annotateResource(resourceId, new AnnotationPrototype().setType("typeDos").setValue("valueDos"));
assertRequestSucceeded(annotateResourceResult2);
AnnotationPojo annotation2 = client.getAnnotation(annotateResourceResult2.get()).get();
// retrieve the resource
RestResult<AnnotationList> annotationsResult = client.getResourceAnnotations(resourceId);
assertRequestSucceeded(annotationsResult);
AnnotationList annotationList = annotationsResult.get();
softly.assertThat(annotationList).as("entity != null").isNotNull();
softly.assertThat(annotationList).hasSize(2);
softly.assertThat(annotationList).containsExactly(annotation2, annotation1);
}
@Test
public void testGetSubresourcesFromResourceUUID() {
client.setAuthKey(AUTHKEY);
String ref = "resource5";
ResourcePrototype resource = new ResourcePrototype().setRef(ref).setProvenance(new ProvenancePojo().setWho("test5").setWhy("because test5"));
UUID resourceId = UUID.fromString("11111111-1111-1111-1111-111111111113");
RestResult<Void> result = client.setResource(resourceId, resource);
assertRequestSucceeded(result);
// add subresources
RestResult<UUID> subResourceResult1 = client.addSubResource(resourceId, new SubResourcePrototype().setSub("Uno"));
assertRequestSucceeded(subResourceResult1);
SubResourcePojo subresource1 = client.getSubResource(subResourceResult1.get()).get();
RestResult<UUID> subResourceResult2 = client.addSubResource(resourceId, new SubResourcePrototype().setSub("Dos"));
assertRequestSucceeded(subResourceResult2);
SubResourcePojo subresource2 = client.getSubResource(subResourceResult2.get()).get();
// retrieve the resource
RestResult<SubResourceList> subresourcesResult = client.getSubResources(resourceId);
assertRequestSucceeded(subresourcesResult);
SubResourceList subresourceList = subresourcesResult.get();
softly.assertThat(subresourceList).as("entity != null").isNotNull();
softly.assertThat(subresourceList).hasSize(2);
// sorted on sub, so Dos before Uno
softly.assertThat(subresourceList).containsExactly(subresource2, subresource1);
}
}