/**
* Licensed to the Austrian Association for Software Tool Integration (AASTI)
* under one or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information regarding copyright
* ownership. The AASTI licenses this file to you 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 org.openengsb.ui.admin.edb;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.Arrays;
import java.util.Dictionary;
import java.util.Hashtable;
import java.util.List;
import org.apache.wicket.Component;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.util.tester.FormTester;
import org.junit.Before;
import org.junit.Test;
import org.openengsb.core.api.model.OpenEngSBModel;
import org.openengsb.core.ekb.api.QueryInterface;
import org.openengsb.core.test.DummyModel;
import org.openengsb.core.test.NullDomain;
import org.openengsb.core.test.ServiceList;
import org.openengsb.labs.delegation.service.ClassProvider;
import org.openengsb.labs.delegation.service.Constants;
import org.openengsb.labs.delegation.service.internal.ClassProviderImpl;
import org.openengsb.ui.admin.AbstractUITest;
import org.openengsb.ui.admin.index.Index;
public class EdbClientTest extends AbstractUITest {
private QueryInterface queryInterface;
@Before
public void setUp() throws Exception {
createDomainProviderMock(NullDomain.class, "example");
queryInterface = mock(QueryInterface.class);
context.putBean("queryInterface", queryInterface);
DummyModel dummyModel = new DummyModel();
dummyModel.setId("42");
dummyModel.setValue("foo");
when(queryInterface.queryByString(DummyModel.class, "id:42")).thenReturn(Arrays.asList(dummyModel));
when(queryInterface.queryByString(DummyModel.class, "crap")).thenThrow(
new IllegalArgumentException("illegal query"));
ServiceList<ClassProvider> classProviders = super.makeServiceList(ClassProvider.class);
context.putBean("modelProviders", classProviders);
ClassProviderImpl classProvider = new ClassProviderImpl(bundle, DummyModel.class.getName());
Dictionary<String, Object> props = new Hashtable<String, Object>();
props.put(Constants.DELEGATION_CONTEXT_KEY, org.openengsb.core.api.Constants.DELEGATION_CONTEXT_MODELS);
registerService(classProvider, props, ClassProvider.class);
}
@Test
public void testShowIndex_shouldContainEDBClientPage() throws Exception {
tester.startPage(Index.class);
tester.clickLink("menu:menuItems:7:link");
tester.assertRenderedPage(EdbClient.class);
}
@SuppressWarnings("unchecked")
@Test
public void testModelDropDown_shouldContainDummyModel() throws Exception {
tester.startPage(EdbClient.class);
DropDownChoice<Class<? extends OpenEngSBModel>> dropdown =
(DropDownChoice<Class<? extends OpenEngSBModel>>) tester
.getComponentFromLastRenderedPage("form:modelSelector");
@SuppressWarnings("rawtypes")
List<Object> choices = (List) dropdown.getChoices();
assertThat(choices, hasItem((Object) DummyModel.class));
}
@SuppressWarnings("unchecked")
@Test
public void testSelectModel_shouldEnableQueryField() throws Exception {
tester.startPage(EdbClient.class);
Component query = tester.getComponentFromLastRenderedPage("form:query");
assertFalse("queryfield not disabled at the beginning", query.isEnabled());
FormTester formTester = tester.newFormTester("form");
DropDownChoice<Class<? extends OpenEngSBModel>> modeldropdown =
(DropDownChoice<Class<? extends OpenEngSBModel>>) tester
.getComponentFromLastRenderedPage("form:modelSelector");
formTester.select("modelSelector", getIndexForValue(modeldropdown, "DummyModel"));
tester.executeAjaxEvent(modeldropdown, "onchange");
assertTrue("QueryField not enabled after selection", query.isEnabled());
}
@SuppressWarnings("unchecked")
@Test
public void testEnterQuery_shouldReturnQueryResults() throws Exception {
tester.startPage(EdbClient.class);
FormTester formTester = tester.newFormTester("form");
DropDownChoice<Class<? extends OpenEngSBModel>> modeldropdown =
(DropDownChoice<Class<? extends OpenEngSBModel>>) tester
.getComponentFromLastRenderedPage("form:modelSelector");
formTester.select("modelSelector", getIndexForValue(modeldropdown, "DummyModel"));
tester.executeAjaxEvent(modeldropdown, "onchange");
formTester.setValue("query", "id:42");
tester.executeAjaxEvent("form:submit", "onclick");
ListView<? extends OpenEngSBModel> resultElement =
(ListView<? extends OpenEngSBModel>) tester.getComponentFromLastRenderedPage("result:list");
tester.assertFeedback("form:feedback", "Found 1 results");
assertThat(resultElement.get("0:id").getDefaultModelObjectAsString(), is("42"));
assertThat(resultElement.get("0:entries").getDefaultModelObjectAsString(), containsString("foo"));
}
@SuppressWarnings("unchecked")
@Test
public void testInvalidQuery_shouldShowError() throws Exception {
tester.startPage(EdbClient.class);
FormTester formTester = tester.newFormTester("form");
DropDownChoice<Class<? extends OpenEngSBModel>> modeldropdown =
(DropDownChoice<Class<? extends OpenEngSBModel>>) tester
.getComponentFromLastRenderedPage("form:modelSelector");
formTester.select("modelSelector", getIndexForValue(modeldropdown, "DummyModel"));
tester.executeAjaxEvent(modeldropdown, "onchange");
formTester.setValue("query", "crap");
tester.executeAjaxEvent("form:submit", "onclick");
tester.assertFeedback("form:feedback", String.format("Error when querying for models %s (%s)",
"illegal query", IllegalArgumentException.class.getName()));
}
}