@Test
 public void testSearchNone()
     throws StopProcessingException, PluginExecutionException, UnsupportedQueryException {
   QueryImpl query =
       new QueryImpl(filterBuilder.attribute(Metacard.MODIFIED).is().equalTo().text("sample"));
   assertThat(filterAdapter.adapt(query, testValidationQueryDelegate), is(false));
   QueryRequest returnQuery = metacardValidityCheckerPlugin.process(new QueryRequestImpl(query));
   assertThat(filterAdapter.adapt(returnQuery.getQuery(), testValidationQueryDelegate), is(true));
 }
 @Test
 public void testSearchValid()
     throws StopProcessingException, PluginExecutionException, UnsupportedQueryException {
   QueryImpl query = new QueryImpl(filterBuilder.attribute(VALIDATION_WARNINGS).is().empty());
   ValidationQueryDelegate delegate = new ValidationQueryDelegate();
   assertThat(filterAdapter.adapt(query, delegate), is(true));
   QueryRequest returnQuery = metacardValidityCheckerPlugin.process(new QueryRequestImpl(query));
   assertThat(filterAdapter.adapt(returnQuery.getQuery(), delegate), is(true));
 }
  /**
   * Test method for {@link
   * org.codice.ddf.endpoints.OpenSearchEndpoint#processQuery(java.lang.String, java.lang.String,
   * java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String,
   * java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String,
   * java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String,
   * java.lang.String, javax.ws.rs.core.UriInfo, java.lang.String, java.lang.String)} .
   *
   * <p>This test will verify that the string "local" in the sources passed to
   * OpenSearchEndpoint.processQuery is replaced with the local site name (in this case the mocked
   * name "TestSiteName"). The QueryRequest object is checked when the framework.query is called to
   * retrieve the OpenSearchQuery, which contains the Set of sites. An assertion within the Answer
   * object for the call framework.query checks that the sites Set is contains the TEST_SITE_NAME.
   *
   * @throws URISyntaxException
   * @throws FederationException
   * @throws SourceUnavailableException
   * @throws UnsupportedQueryException
   * @throws UnsupportedEncodingException
   * @throws CatalogTransformerException
   */
  @SuppressWarnings("unchecked")
  @Test
  public void testProcessQueryForProperHandlingOfSiteNameLOCAL()
      throws URISyntaxException, UnsupportedQueryException, SourceUnavailableException,
          FederationException, UnsupportedEncodingException, CatalogTransformerException {

    // ***Test setup***
    final String TEST_SITE_NAME = "TestSiteName";

    CatalogFramework mockFramework = mock(CatalogFramework.class);
    FilterBuilder mockFilterBuilder = mock(FilterBuilder.class);

    AttributeBuilder mockAB = mock(AttributeBuilder.class);
    ExpressionBuilder mockEB = mock(ExpressionBuilder.class);
    ContextualExpressionBuilder mockCEB = mock(ContextualExpressionBuilder.class);
    Filter mockFilter = mock(Filter.class);

    when(mockFilterBuilder.attribute(anyString())).thenReturn(mockAB);
    when(mockAB.is()).thenReturn(mockEB);
    when(mockEB.like()).thenReturn(mockCEB);
    when(mockCEB.text(anyString())).thenReturn(mockFilter);

    String searchTerms = "searchForThis";

    // "local" MUST be included
    String sources = "test, local";
    String count = "200";

    // dummy UriInfo, not really used functionally
    UriInfo mockUriInfo = mock(UriInfo.class);
    URI uri = new URI("test");
    when(mockUriInfo.getRequestUri()).thenReturn(uri);

    MultivaluedMap<String, String> mockMVMap = mock(MultivaluedMap.class);
    when(mockMVMap.get("subscription")).thenReturn(null);
    when(mockMVMap.get("interval")).thenReturn(null);
    when(mockUriInfo.getQueryParameters()).thenReturn(mockMVMap);

    @SuppressWarnings("unused")
    BinaryContent mockByteContent = mock(BinaryContent.class);

    // Check on the sites passed in to framework.query
    when(mockFramework.query(any(QueryRequest.class)))
        .thenAnswer(
            new Answer<Object>() {
              public Object answer(InvocationOnMock invocation) {
                QueryRequest queryRequest = (QueryRequest) invocation.getArguments()[0];

                // ***Test verification***
                // This assert is the whole point of this unit test
                Assert.assertTrue(
                    ((OpenSearchQuery) queryRequest.getQuery())
                        .getSiteIds()
                        .contains(TEST_SITE_NAME));

                return new QueryResponseImpl(queryRequest);
              }
            });

    // setup the BinaryContent for the call to Response.ok(...)
    // This is just needed to get the method to complete, the
    BinaryContent mockBinaryContent = mock(BinaryContent.class);
    InputStream is = new ByteArrayInputStream("Test String From InputStream".getBytes("UTF-8"));
    when(mockBinaryContent.getInputStream()).thenReturn(is);
    when(mockBinaryContent.getMimeTypeValue()).thenReturn("text/plain");

    when(mockFramework.transform(any(QueryResponse.class), anyString(), anyMap()))
        .thenReturn(mockBinaryContent);

    OpenSearchEndpoint osEndPoint = new OpenSearchEndpoint(mockFramework, mockFilterBuilder);

    // Call ddfConfigurationUpdated to set the id values to the site name we want
    // local to be replaced with
    Map<String, String> ddfProperties = new HashMap<String, String>();
    ddfProperties.put("id", TEST_SITE_NAME);
    osEndPoint.configurationUpdateCallback(ddfProperties);

    // ***Test Execution***
    osEndPoint.processQuery(
        searchTerms,
        null,
        sources,
        null,
        null,
        count,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        mockUriInfo,
        null,
        null,
        null);
  }