/* Copyright 2014 Fabian Steeg, hbz. Licensed under the Eclipse Public License 1.0 */
package tests;
import static org.fest.assertions.Assertions.assertThat;
import static play.test.Helpers.running;
import org.junit.Test;
import com.fasterxml.jackson.databind.JsonNode;
import play.libs.Json;
/**
* Tests for searching resources by combining fields (name, author, subject).
*
* @author Fabian Steeg (fsteeg)
*/
@SuppressWarnings("javadoc")
public class SearchResourceCombineFieldsTests extends SearchTestsHarness {
/*@formatter:off@*/
@Test public void searchName(){search("resource?name=der", 5);}
@Test public void searchAltName(){search("resource?name=Grenzdimensionen", 1);}
@Test public void searchNameAndAuthor(){search("resource?name=der&author=micali", 1);}
@Test public void searchNameAndSubject(){search("resource?name=der&subject=4414195-6", 1);}
@Test public void searchAuthor(){search("resource?author=hundt", 1);}
@Test public void searchAuthorAndId(){search("resource?author=micali&id=9781402083891", 1);}
@Test public void searchAuthorAndSubject(){search("resource?author=micali&subject=4026453-1", 1);}
@Test public void searchNameAndIssued(){search("resource?name=der&issued=2008", 1);}
@Test public void searchNameAndIssuedRange(){search("resource?name=der&issued=1993-2008", 3);}
@Test public void searchNameAndPublisher(){search("resource?name=der&publisher=Springer", 1);}
@Test public void searchSet(){search("resource?set=NWBib", 4);}
@Test public void searchSetAndNwbibspatialValue1(){search("resource?set=NWBib&nwbibspatial=Kirchhundem-Heinsberg", 1);}
@Test public void searchSetAndNwbibspatialValue2(){search("resource?set=NWBib&nwbibspatial=Gummersbach", 1);}
@Test public void searchSetAndNwbibspatialValue3(){search("resource?set=NWBib&nwbibspatial=Gummersbach bei Köln", 1);}
@Test public void searchSetAndNwbibspatialValue4(){search("resource?set=NWBib&nwbibspatial=Gummersbach bei Koeln", 1);}
@Test public void searchSetAndNwbibspatialMultiValue1Default(){search("resource?set=NWBib&nwbibspatial=Gummersbach,Bonn", 2);}
@Test public void searchSetAndNwbibspatialMultiValue2Default(){search("resource?set=NWBib&nwbibspatial=K%C3%B6ln,Bonn", 2);}
@Test public void searchSetAndNwbibspatialMultiValue1Or(){search("resource?set=NWBib&nwbibspatial=Gummersbach,Bonn,OR", 2);}
@Test public void searchSetAndNwbibspatialMultiValue2Or(){search("resource?set=NWBib&nwbibspatial=K%C3%B6ln,Bonn,OR", 2);}
@Test public void searchSetAndNwbibspatialMultiValue1And(){search("resource?set=NWBib&nwbibspatial=Gummersbach,Bonn,AND", 0);}
@Test public void searchSetAndNwbibspatialMultiValue2And(){search("resource?set=NWBib&nwbibspatial=K%C3%B6ln,Bonn,AND", 1);}
@Test public void searchSetAndNwbibsubject1(){search("resource?set=NWBib&nwbibsubject=http://purl.org/lobid/nwbib#s552000", 1);}
@Test public void searchSetAndNwbibsubject2(){search("resource?set=NWBib&nwbibsubject=http://purl.org/lobid/nwbib#s552000,http://purl.org/lobid/nwbib#s706230", 2);}
@Test public void searchSetAndNwbibsubject3(){search("resource?set=NWBib&nwbibsubject=http://purl.org/lobid/nwbib#s706230,http://purl.org/lobid/nwbib#s704042", 1);}
@Test public void searchSetAndSubjectChain1(){search("resource?set=NWBib&subject=Geschichte", 1);}
@Test public void searchSetAndSubjectChain2(){search("resource?set=NWBib&subject=Heinsberg", 1);}
@Test public void searchSubject1(){search("resource?subject=Abracham, Karl", 1);}
@Test public void searchSubject2(){search("resource?subject=Karl Abracham", 1);}
@Test public void searchSubject3(){search("resource?subject=Karl Abracham, http://d-nb.info/gnd/118500228", 1);}
@Test public void searchSubject4(){search("resource?subject=Karl Abracham, 118500228", 1);}
@Test public void searchSubject5(){search("resource?subject=Karl Abracham, http://d-nb.info/gnd/4011882-4", 0);}
@Test public void searchSubject6(){search("resource?subject=Karl Abracham, 4011882-4", 0);}
/*@formatter:on@*/
private static void search(final String request, final int count) {
running(TEST_SERVER, new Runnable() {
@Override
public void run() {
String response = call(request);
assertThat(response).isNotNull();
final JsonNode jsonObjectIds = Json.parse(response);
assertThat(jsonObjectIds.isArray()).isTrue();
assertThat(jsonObjectIds.size()).isEqualTo(count + META);
}
});
}
}