Package com.google.refine.test.org.deri.reconcile.sindice

Source Code of com.google.refine.test.org.deri.reconcile.sindice.SindiceServiceTest

package com.google.refine.test.org.deri.reconcile.sindice;

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;

import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import com.google.common.collect.ImmutableList;
import com.google.refine.org.deri.reconcile.model.ReconciliationCandidate;
import com.google.refine.org.deri.reconcile.model.ReconciliationRequest;
import com.google.refine.org.deri.reconcile.rdf.endpoints.QueryEndpoint;
import com.google.refine.org.deri.reconcile.rdf.endpoints.QueryEndpointFactory;
import com.google.refine.org.deri.reconcile.sindice.SindiceBroker;
import com.google.refine.org.deri.reconcile.sindice.SindiceService;
import com.google.refine.org.deri.reconcile.util.GRefineJsonUtilities;
import com.google.refine.org.deri.reconcile.util.GRefineJsonUtilitiesImpl;
import com.google.refine.org.deri.reconcile.util.RdfUtilitiesImpl;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;

import static org.mockito.Mockito.*;

public class SindiceServiceTest {

  String name = "sindice-test";
  String query = "Deutschland";
  int limit =5;
  int DEFAULT_SEARCH_LIMIT = 8;
  int DOMAIN_SPECIFIED_SEARCH_LIMIT = 3;
  String domain = "dbpedia.org";
 
  SindiceService service;
  GRefineJsonUtilities jsonUtil;
  ReconciliationRequest request;
  LinkedHashSet<String[]> urlPairs;
  QueryEndpointFactory mockQueryEndpointFactory;
  SindiceBroker mockBroker;
  QueryEndpoint mockEndpoint;
 
  @BeforeMethod
  public void setUp() throws Exception{
    jsonUtil = new GRefineJsonUtilitiesImpl();
    request = new ReconciliationRequest(query, limit);
    urlPairs = new LinkedHashSet<String[]>();
    urlPairs.add(new String[] {"http://doc1.result.url","http://doc1.sindice.cache.url"} );
    urlPairs.add(new String[] {"http://doc2.result.url","http://doc2.sindice.cache.url"} );

    /*
     * Mocks
     */
    mockBroker = mock(SindiceBroker.class);
    mockEndpoint = mock(QueryEndpoint.class);
    mockQueryEndpointFactory = mock(QueryEndpointFactory.class);
    when(mockQueryEndpointFactory.getLarqQueryEndpoint((Model)anyObject())).thenReturn(mockEndpoint);
   
    /*
     * Configuring mocks
     */
    //nulls are for domain and type i.e. no restriction on any
    when(mockBroker.getUrlsForSimpleTermSearch(query,null,null,DEFAULT_SEARCH_LIMIT,jsonUtil)).thenReturn(urlPairs);
    when(mockBroker.getUrlsForSimpleTermSearch(query,domain,null,DOMAIN_SPECIFIED_SEARCH_LIMIT,jsonUtil)).thenReturn(urlPairs);
   
    when(mockBroker.getModelForUrl("http://doc1.result.url", "http://doc1.sindice.cache.url", jsonUtil)).thenReturn(ModelFactory.createDefaultModel());
    when(mockBroker.getModelForUrl("http://doc2.result.url", "http://doc2.sindice.cache.url", jsonUtil)).thenReturn(ModelFactory.createDefaultModel());
  }
 
  @Test
  public void reconcileTest()throws Exception{
    /*
     * testing
     */
    service = new SindiceService(name, name, null, jsonUtil, new RdfUtilitiesImpl(), mockBroker, mockQueryEndpointFactory);
    service.reconcile(request);
   
    /*
     * Verification
     */
    verify(mockBroker).getUrlsForSimpleTermSearch(query,null,null,DEFAULT_SEARCH_LIMIT,jsonUtil);
    verify(mockBroker).getModelForUrl("http://doc1.result.url", "http://doc1.sindice.cache.url", jsonUtil);
    verify(mockBroker).getModelForUrl("http://doc2.result.url", "http://doc2.sindice.cache.url", jsonUtil);
   
    ImmutableList<String> empty = ImmutableList.of();
    verify(mockEndpoint, times(2)).reconcileEntities(request, empty, 0.9);
  }
 
  @Test
  public void reconcileTestWithEnoughResults()throws Exception{
    ImmutableList<String> empty = ImmutableList.of();
    List<ReconciliationCandidate> results = new ArrayList<ReconciliationCandidate>();
    //prepare enough results
    for(int i=0;i<limit;i++){
      results.add(new ReconciliationCandidate(String.valueOf(i), "", null, 0, false));
    }
   
    when(mockEndpoint.reconcileEntities(request, empty, 0.9)).thenReturn(results);
    /*
     * testing
     */
    service = new SindiceService(name, name, null, jsonUtil, new RdfUtilitiesImpl(), mockBroker, mockQueryEndpointFactory);
    service.reconcile(request);
   
    /*
     * Verification
     */
    verify(mockBroker).getUrlsForSimpleTermSearch(query,null,null,DEFAULT_SEARCH_LIMIT,jsonUtil);
    verify(mockBroker).getModelForUrl("http://doc1.result.url", "http://doc1.sindice.cache.url", jsonUtil);
    //the other URL will not be called
   
    verify(mockEndpoint, times(1)).reconcileEntities(request, empty, 0.9);
  }
 
  @Test
  public void reconcileTestWithDomain()throws Exception{
    /*
     * testing
     */
    service = new SindiceService(name, name, domain, jsonUtil, new RdfUtilitiesImpl(), mockBroker, mockQueryEndpointFactory);
    service.reconcile(request);
   
    /*
     * Verification
     */
    verify(mockBroker).getUrlsForSimpleTermSearch(query,domain,null,DOMAIN_SPECIFIED_SEARCH_LIMIT,jsonUtil);
    verify(mockBroker).getModelForUrl("http://doc1.result.url", "http://doc1.sindice.cache.url", jsonUtil);
    verify(mockBroker).getModelForUrl("http://doc2.result.url", "http://doc2.sindice.cache.url", jsonUtil);
   
    ImmutableList<String> empty = ImmutableList.of();
    verify(mockEndpoint, times(2)).reconcileEntities(request, empty, 0.9);
  }
 
  @Test
  public void reconcileTestWithType()throws Exception{
    /*
     * testing
     */
    SindiceService service = new SindiceService(name, name, null, jsonUtil, new RdfUtilitiesImpl(), mockBroker, mockQueryEndpointFactory);
    request.setTypes(new String[] {"httphttp://xmlns.com/foaf/0.1/Person"});
    service.reconcile(request);
   
    /*
     * Verification
     */
    verify(mockBroker).getUrlsForSimpleTermSearch(query,null,null,DEFAULT_SEARCH_LIMIT,jsonUtil);
    verify(mockBroker).getModelForUrl("http://doc1.result.url", "http://doc1.sindice.cache.url", jsonUtil);
    verify(mockBroker).getModelForUrl("http://doc2.result.url", "http://doc2.sindice.cache.url", jsonUtil);
   
    ImmutableList<String> empty = ImmutableList.of();
    verify(mockEndpoint, times(2)).reconcileEntities(request, empty, 0.9);
  }
 
}
TOP

Related Classes of com.google.refine.test.org.deri.reconcile.sindice.SindiceServiceTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.