/* * Copyright (C) 2012 Jan Pokorsky * * 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/>. */ package cz.cas.lib.proarc.common.fedora; import cz.cas.lib.proarc.common.dublincore.DcStreamEditor; import cz.cas.lib.proarc.common.dublincore.DcStreamEditor.DublinCoreRecord; import static cz.cas.lib.proarc.common.fedora.FedoraTestSupport.assertItem; import cz.cas.lib.proarc.common.fedora.LocalStorage.LocalObject; import cz.cas.lib.proarc.common.fedora.SearchView.Item; import cz.cas.lib.proarc.common.fedora.SearchView.Result; import cz.cas.lib.proarc.common.fedora.relation.RelationEditor; import cz.cas.lib.proarc.common.object.DigitalObjectHandler; import cz.cas.lib.proarc.common.object.model.MetaModelRepository; import cz.cas.lib.proarc.common.object.ndk.NdkPlugin; import cz.cas.lib.proarc.common.user.FedoraGroupDao; import cz.cas.lib.proarc.common.user.FedoraUserDao; import cz.cas.lib.proarc.common.user.Group; import cz.cas.lib.proarc.common.user.UserProfile; import cz.cas.lib.proarc.common.user.UserUtil; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Locale; import org.junit.After; import static org.junit.Assert.*; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestName; /** * * @author Jan Pokorsky */ public class SearchViewTest { @Rule public TestName testName = new TestName(); private RemoteStorage storage; private FedoraTestSupport fedora; public SearchViewTest() { } @Before public void setUp() throws Exception { fedora = new FedoraTestSupport(); storage = fedora.getRemoteStorage(); MetaModelRepository.setInstance(new String[]{NdkPlugin.ID}); new FedoraStorageInitializer(storage).init(); } @After public void tearDown() { } @Test public void testReadJsonResult() throws Exception { SearchView instance = new SearchView(storage); String json = "{\"results\":[{\"pid\" : \"p1\", \"k0\" : \"1\"}]}"; Result result = instance.readResponse(json); assertNotNull(result); assertNotNull(result.getResults()); assertEquals("p1", result.getResults().get(0).getPid()); assertEquals("1", result.getResults().get(0).getK0()); assertEquals((Integer) 1, result.getResults().get(0).getHasExport()); } @Test public void testResolveObjectLabel() { SearchView instance = new SearchView(storage); // model:page Item item = new Item("pid"); item.setModel("model:page"); item.setLabel("1"); instance.resolveObjectLabel(item); assertEquals("1", item.getLabel()); item.setLabel("1, "); instance.resolveObjectLabel(item); assertEquals("1, ", item.getLabel()); item.setLabel("1, TitlePage"); instance.resolveObjectLabel(item); assertEquals("1, Title Page", item.getLabel()); item.setLabel("1, UnknownPageType"); instance.resolveObjectLabel(item); assertEquals("1, UnknownPageType", item.getLabel()); instance.setLocale(new Locale("cs")); item.setLabel("[1], 1, TitlePage"); instance.resolveObjectLabel(item); assertEquals("[1], 1, Titulní strana (TitlePage)", item.getLabel()); // model:periodical item.setModel("model:periodical"); item.setLabel("[1], 1, TitlePage"); instance.resolveObjectLabel(item); assertEquals("[1], 1, TitlePage", item.getLabel()); } @Test public void testFindLastCreated() throws Exception { // XXX needs some assertions; it tests no exception now // client.debug(true); String user = NdkPlugin.MODEL_PERIODICAL; // String user = null; SearchView instance = new SearchView(storage); List<Item> result = instance.findLastCreated(0, user, null); System.out.println(result); } @Test public void testFind_HasOwner() throws Exception { String modelId = NdkPlugin.MODEL_PERIODICAL; UserProfile user = UserProfile.create(testName.getMethodName(), testName.getMethodName(), testName.getMethodName()); fedora.cleanUp(); // prepare fedora user and group FedoraTransaction tx = new FedoraTransaction(storage); FedoraGroupDao groups = new FedoraGroupDao(); groups.setTransaction(tx); Group group = Group.create(testName.getMethodName(), null); groups.addNewGroup(group, fedora.getTestUser(), testName.getMethodName()); FedoraUserDao users = new FedoraUserDao(); users.setTransaction(tx); users.add(user, fedora.getTestUser(), testName.getMethodName()); users.addMembership(user, Arrays.asList(group), testName.getMethodName()); tx.commit(); // prepare digital object LocalObject lobject = new LocalStorage().create(); DigitalObjectHandler handler = new DigitalObjectHandler(lobject, null); lobject.setLabel(testName.getMethodName()); lobject.setOwner(fedora.getTestUser()); RelationEditor relations = handler.relations(); relations.setModel(modelId); relations.setOwners(Arrays.asList(group.getName())); relations.write(relations.getLastModified(), testName.getMethodName()); DcStreamEditor adminEditor = handler.objectMetadata(); DublinCoreRecord dcr = adminEditor.read(); adminEditor.write(handler, dcr, testName.getMethodName()); handler.commit(); storage.ingest(lobject, fedora.getTestUser(), testName.getMethodName()); // fedora.getClient().debug(true); SearchView instance = new SearchView(storage); List<Item> result = instance.findLastCreated(0, modelId, user.getUserNameAsPid()); System.out.println(result); assertNotNull(result); assertEquals(1, result.size()); final String pid = lobject.getPid(); FedoraTestSupport.assertItem(result, pid); result = instance.findQuery(null, null, null, null, modelId, Arrays.asList(UserUtil.toGroupPid(group))); assertNotNull(result); assertEquals(1, result.size()); FedoraTestSupport.assertItem(result, pid); } @Test public void testBuildQuery() { assertEquals("title~'*test*'", SearchView.buildQuery(new StringBuilder(), "title", "test").toString()); assertEquals("title~'*test*'", SearchView.buildQuery(new StringBuilder(), "title", " test ").toString()); // issue 220 assertEquals("title~'*test test*'", SearchView.buildQuery(new StringBuilder(), "title", " test test ").toString()); assertEquals("title~'*test?s test???*'", SearchView.buildQuery(new StringBuilder(), "title", "test's test???").toString()); assertEquals("", SearchView.buildQuery(new StringBuilder(), "title", "").toString()); assertEquals("", SearchView.buildQuery(new StringBuilder(), "title", "***").toString()); assertEquals("label~'*test1*' title~'*test2*'", SearchView.buildQuery( SearchView.buildQuery(new StringBuilder(), "label", "test1"), "title", "test2").toString()); } @Test public void testNormalizePhrase() { assertEquals("*query*", SearchView.normalizePhrase("*query*")); assertEquals("*query*", SearchView.normalizePhrase("*query")); assertEquals("*query*", SearchView.normalizePhrase("query*")); assertEquals("*query*", SearchView.normalizePhrase(" * query* **")); assertEquals("*", SearchView.normalizePhrase(" ***")); assertEquals("*", SearchView.normalizePhrase("")); assertEquals("*", SearchView.normalizePhrase(null)); assertEquals("*Stráž pokroku*", SearchView.normalizePhrase("Stráž pokroku")); } @Test public void testFindQuery() throws Exception { // fedora.getClient().debug(true); fedora.cleanUp(); fedora.ingest( getClass().getResource("tree1.xml") ); SearchView instance = new SearchView(storage); List<Item> result = instance.findQuery("tree", "tree", "u", "u", NdkPlugin.MODEL_PERIODICAL, Collections.<String>emptyList()); assertFalse(result.isEmpty()); } @Test public void testFindModelQuery() throws Exception { // fedora.getClient().debug(true); fedora.cleanUp(); fedora.ingest( getClass().getResource("tree1.xml") ); SearchView instance = new SearchView(storage); List<Item> result = instance.findQuery(null, null, null, null, NdkPlugin.MODEL_PERIODICAL, Collections.<String>emptyList()); assertFalse(result.isEmpty()); } @Test public void testFindPid() throws Exception { // fedora.getClient().debug(true); fedora.cleanUp(); fedora.ingest( getClass().getResource("tree1-child1-child1-child1.xml"), getClass().getResource("tree1-child1-child1-child2.xml") ); SearchView instance = new SearchView(storage); String[] pids = {"uuid:tree1-child1-child1-child1", "uuid:tree1-child1-child1-child2"}; List<Item> result = instance.find(pids); assertItem(result, pids); } @Test public void testFindChildrenHierarchy() throws Exception { fedora.cleanUp(); fedora.ingest( getClass().getResource("tree1.xml"), getClass().getResource("tree1-child1.xml"), getClass().getResource("tree1-child1-child1.xml"), getClass().getResource("tree1-child1-child1-child1.xml"), getClass().getResource("tree1-child1-child1-child2.xml"), getClass().getResource("tree1-child2.xml"), getClass().getResource("tree1-child2-child1.xml"), getClass().getResource("tree1-child2-child1-child1.xml") ); SearchView instance = new SearchView(storage); List<Item> result = instance.findChildrenHierarchy("uuid:tree1"); assertEquals(7, result.size()); assertItem(result, "uuid:tree1-child1", "uuid:tree1-child1-child1", "uuid:tree1-child1-child1-child1", "uuid:tree1-child1-child1-child2", "uuid:tree1-child2", "uuid:tree1-child2-child1", "uuid:tree1-child2-child1-child1"); } @Test public void testFindReferrers() throws Exception { fedora.cleanUp(); fedora.ingest( getClass().getResource("tree1-child1-child1.xml"), getClass().getResource("tree1-child1-child1-child1.xml") ); SearchView instance = new SearchView(storage); List<Item> result = instance.findReferrers("uuid:tree1-child1-child1-child1"); assertEquals(1, result.size()); assertItem(result, "uuid:tree1-child1-child1"); } @Test public void testIsDeviceInUse() throws Exception { fedora.cleanUp(); SearchView instance = new SearchView(storage); assertFalse(instance.isDeviceInUse("device:testDevice")); fedora.ingest( getClass().getResource("device.xml"), getClass().getResource("tree1-child1-child1-child1.xml") ); assertTrue(instance.isDeviceInUse("device:testDevice")); } }