/* * Copyright 2012 Nodeable Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.streamreduce.service; import com.streamreduce.core.model.Account; import com.streamreduce.core.model.messages.SobaMessage; import com.streamreduce.core.service.SearchService; import com.streamreduce.core.service.SearchServiceImpl; import com.streamreduce.util.JSONUtils; import net.sf.json.JSONObject; import org.bson.types.ObjectId; import org.junit.Assert; import org.junit.Test; import org.springframework.test.util.ReflectionTestUtils; import java.util.List; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyMap; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class SearchServiceImplTest { /** * Test that exercises proper serialization of an elasticSearch for searching messages to a * List<SobaMessage> * @throws Exception */ @Test public void testSearchMessages() throws Exception { String json = JSONUtils.readJSONFromClasspath("/com/streamreduce/search/elastic_search_raw_payload.json"); JSONObject elasticSearchPayload = JSONObject.fromObject(json); //Set these fields through reflection (mock prevents setters from working) to dummy values. SearchServiceImpl searchService = mock(SearchServiceImpl.class); ReflectionTestUtils.setField(searchService,"elasticSearchHost","doesNotMatter"); ReflectionTestUtils.setField(searchService,"elasticSearchPort",666); ReflectionTestUtils.setField(searchService,"messageDatabaseName","nodeablemsgdb"); ReflectionTestUtils.setField(searchService,"enabled",true); //Make sure calls to searchMessages uses the real implementation when(searchService.searchMessages(any(Account.class), anyString(), anyMap(), any(JSONObject.class))).thenCallRealMethod(); //Make call to makeRequest so that it returns the elasticSearchPayload when(searchService.makeRequest(anyString(),any(JSONObject.class),anyMap(),anyString())).thenReturn(elasticSearchPayload); Account a = new Account.Builder().name("testAccount").build(); a.setId(new ObjectId()); List<SobaMessage> sobaMessages = searchService.searchMessages(a,"resource", null,null); //Expected number of hits in json: int expectedSize = elasticSearchPayload.getJSONObject("hits").getJSONArray("hits").size(); Assert.assertEquals(expectedSize,sobaMessages.size()); } @Test(expected = IllegalArgumentException.class) public void testCreateRiverForNullAccount() { SearchService searchService = new SearchServiceImpl(); ReflectionTestUtils.setField(searchService,"enabled",true); searchService.createRiverForAccount(null); } @Test(expected = IllegalArgumentException.class) public void testCreateRiverForAccountWithoutId() { Account acctWithoutId = new Account.Builder() .name("foo") .build(); acctWithoutId.setId(null); SearchService searchService = new SearchServiceImpl(); ReflectionTestUtils.setField(searchService,"enabled",true); searchService.createRiverForAccount(acctWithoutId); } }