package org.bonitasoft.livingapps; import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.BDDMockito.given; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import java.util.Collections; import org.bonitasoft.engine.api.ApplicationAPI; import org.bonitasoft.engine.api.PageAPI; import org.bonitasoft.engine.business.application.Application; import org.bonitasoft.engine.business.application.impl.ApplicationImpl; import org.bonitasoft.engine.business.application.impl.ApplicationPageImpl; import org.bonitasoft.engine.exception.SearchException; import org.bonitasoft.engine.search.SearchOptions; import org.bonitasoft.engine.search.impl.SearchFilter; import org.bonitasoft.engine.search.impl.SearchResultImpl; import org.bonitasoft.livingapps.exception.CreationException; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Answers; import org.mockito.ArgumentCaptor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; @RunWith(MockitoJUnitRunner.class) public class ApplicationModelFactoryTest { @Mock(answer = Answers.RETURNS_MOCKS) ApplicationAPI applicationApi; @Mock PageAPI customPageApi; @InjectMocks ApplicationModelFactory factory; @Test(expected = CreationException.class) public void should_throw_create_error_exception_when_search_fail() throws Exception { given(applicationApi.searchApplications(any(SearchOptions.class))).willThrow(SearchException.class); factory.createApplicationModel("foo"); } @Test(expected = CreationException.class) public void should_throw_create_error_exception_when_application_is_not_found() throws Exception { given(applicationApi.searchApplications(any(SearchOptions.class))).willReturn( new SearchResultImpl<Application>(0, Collections.<Application> emptyList())); factory.createApplicationModel("foo"); } @Test public void should_return_application_found() throws Exception { final ApplicationImpl application = new ApplicationImpl("foobar", "1.0", "bazqux"); application.setId(3); given(applicationApi.searchApplications(any(SearchOptions.class))).willReturn( new SearchResultImpl<Application>(1, asList((Application) application))); given(applicationApi.getApplicationHomePage(3)).willReturn(new ApplicationPageImpl(1, 1, "home")); final ApplicationModel model = factory.createApplicationModel("foo"); assertThat(model.getApplicationHomePage()).isEqualTo("home/"); } @Test public void should_filter_search_using_given_name() throws Exception { final ArgumentCaptor<SearchOptions> captor = ArgumentCaptor.forClass(SearchOptions.class); given(applicationApi.searchApplications(any(SearchOptions.class))).willReturn( new SearchResultImpl<Application>(1, asList(mock(Application.class)))); factory.createApplicationModel("bar"); verify(applicationApi).searchApplications(captor.capture()); final SearchFilter filter = captor.getValue().getFilters().get(0); assertThat(filter.getField()).isEqualTo("token"); assertThat(filter.getValue()).isEqualTo("bar"); } }