/*
* Copyright 2014 JBoss 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 org.artificer.shell;
import org.artificer.common.error.ArtificerNotFoundException;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.StoredQuery;
/**
* @author Brett Meyer.
*/
public class TestStoredQueryCommands extends AbstractCommandTest {
@Test
public void testCreateStoredQuery() throws Exception {
prepare(ArtificerShell.StoredQueryCommands.class);
// create stored query
pushToOutput("storedQuery create --name %s --propertyNames %s %s", "FooQuery", "prop1,prop2,prop3", "/s-ramp/xsd/XsdDocument");
// verify
ArgumentCaptor<StoredQuery> storedQuery = ArgumentCaptor.forClass(StoredQuery.class);
Mockito.verify(clientMock).createStoredQuery(storedQuery.capture());
Assert.assertEquals("FooQuery", storedQuery.getValue().getQueryName());
Assert.assertTrue(storedQuery.getValue().getPropertyName().contains("prop1"));
Assert.assertTrue(storedQuery.getValue().getPropertyName().contains("prop2"));
Assert.assertTrue(storedQuery.getValue().getPropertyName().contains("prop3"));
Assert.assertEquals("/s-ramp/xsd/XsdDocument", storedQuery.getValue().getQueryExpression());
Assert.assertTrue(stream.toString().contains("Successfully created the stored query"));
}
@Test
public void testGetStoredQuery() throws Exception {
prepare(ArtificerShell.StoredQueryCommands.class);
StoredQuery storedQuery = storedQuery();
Mockito.when(clientMock.getStoredQuery(Mockito.eq("FooQuery"))).thenReturn(storedQuery);
Mockito.when(clientMock.getStoredQuery(Mockito.eq("DoesNotExist"))).thenThrow(
ArtificerNotFoundException.storedQueryNotFound("DoesNotExist"));
ArgumentCaptor<String> queryNames = ArgumentCaptor.forClass(String.class);
// success test
pushToOutput("storedQuery get FooQuery");
Assert.assertTrue(stream.toString().contains("FooQuery"));
// failure test
pushToOutput("storedQuery get DoesNotExist");
Assert.assertTrue(stream.toString().contains("DoesNotExist"));
Assert.assertTrue(stream.toString().contains("Failed to retrieve the stored query"));
Mockito.verify(clientMock, Mockito.times(2)).getStoredQuery(queryNames.capture());
Assert.assertEquals("FooQuery", queryNames.getAllValues().get(0));
Assert.assertEquals("DoesNotExist", queryNames.getAllValues().get(1));
}
@Test
public void testExecuteStoredQuery() throws Exception {
prepare(ArtificerShell.StoredQueryCommands.class);
// NOTE: QueryResultSet set up by AbstractCommandTest (includes 1 XmlDocument)
pushToOutput("storedQuery execute FooQuery");
Mockito.verify(clientMock, Mockito.times(1)).queryWithStoredQuery(Mockito.eq("FooQuery"),
Mockito.anyInt(), Mockito.anyInt(), Mockito.anyString(), Mockito.anyBoolean(), Mockito.anyMap());
Assert.assertTrue(stream.toString().contains("Querying the Artificer repository"));
Assert.assertTrue(stream.toString().contains("Paging: 1-1 of 1 entries"));
Assert.assertTrue(stream.toString().contains("XmlDocument"));
// verify it was set in the context
Assert.assertNotNull(getAeshContext().getCurrentArtifactFeed());
Assert.assertEquals(1, getAeshContext().getCurrentArtifactFeed().size());
}
@Test
public void testUpdateStoredQuery() throws Exception {
prepare(ArtificerShell.StoredQueryCommands.class);
Mockito.doThrow(ArtificerNotFoundException.storedQueryNotFound("DoesNotExist"))
.when(clientMock).updateStoredQuery(Mockito.eq("DoesNotExist"), Mockito.any(StoredQuery.class));
ArgumentCaptor<String> queryNames = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<StoredQuery> storedQueries = ArgumentCaptor.forClass(StoredQuery.class);
// success test
pushToOutput("storedQuery update --name %s --propertyNames %s %s", "FooQuery", "prop1,prop2,prop3", "/s-ramp/xsd/XsdDocument");
Assert.assertTrue(stream.toString().contains("FooQuery"));
Assert.assertTrue(stream.toString().contains("Successfully updated the stored query"));
// failure test
pushToOutput("storedQuery update --name %s --propertyNames %s %s", "DoesNotExist", "prop1,prop2,prop3", "/s-ramp/xsd/XsdDocument");
Assert.assertTrue(stream.toString().contains("DoesNotExist"));
Assert.assertTrue(stream.toString().contains("Failed to update the stored query"));
Mockito.verify(clientMock, Mockito.times(2)).updateStoredQuery(queryNames.capture(), storedQueries.capture());
Assert.assertEquals("FooQuery", queryNames.getAllValues().get(0));
Assert.assertEquals("DoesNotExist", queryNames.getAllValues().get(1));
Assert.assertEquals("FooQuery", storedQueries.getAllValues().get(0).getQueryName());
Assert.assertTrue(storedQueries.getAllValues().get(0).getPropertyName().contains("prop1"));
Assert.assertTrue(storedQueries.getAllValues().get(0).getPropertyName().contains("prop2"));
Assert.assertTrue(storedQueries.getAllValues().get(0).getPropertyName().contains("prop3"));
Assert.assertEquals("/s-ramp/xsd/XsdDocument", storedQueries.getAllValues().get(0).getQueryExpression());
}
@Test
public void testDeleteStoredQuery() throws Exception {
prepare(ArtificerShell.StoredQueryCommands.class);
Mockito.doThrow(ArtificerNotFoundException.storedQueryNotFound("DoesNotExist"))
.when(clientMock).deleteStoredQuery(Mockito.eq("DoesNotExist"));
ArgumentCaptor<String> queryNames = ArgumentCaptor.forClass(String.class);
// success test
pushToOutput("storedQuery delete FooQuery");
Assert.assertTrue(stream.toString().contains("FooQuery"));
Assert.assertTrue(stream.toString().contains("Successfully deleted the stored query"));
// failure test
pushToOutput("storedQuery delete DoesNotExist");
Assert.assertTrue(stream.toString().contains("DoesNotExist"));
Assert.assertTrue(stream.toString().contains("Failed to delete the stored query"));
Mockito.verify(clientMock, Mockito.times(2)).deleteStoredQuery(queryNames.capture());
Assert.assertEquals("FooQuery", queryNames.getAllValues().get(0));
Assert.assertEquals("DoesNotExist", queryNames.getAllValues().get(1));
}
private StoredQuery storedQuery() {
StoredQuery storedQuery = new StoredQuery();
storedQuery.setQueryName("FooQuery");
storedQuery.getPropertyName().add("prop1");
storedQuery.getPropertyName().add("prop2");
storedQuery.getPropertyName().add("prop3");
storedQuery.setQueryExpression("/s-ramp/xsd/XsdDocument");
return storedQuery;
}
}