/**
* Copyright 2014 Red Hat, Inc. and/or its affiliates.
*
* 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.dashbuilder.dataprovider.sql;
import java.net.URL;
import org.apache.commons.io.IOUtils;
import org.dashbuilder.dataset.DataSet;
import org.dashbuilder.dataset.DataSetLookupFactory;
import org.dashbuilder.dataset.DataSetMetadata;
import org.dashbuilder.dataset.def.SQLDataSetDef;
import org.dashbuilder.dataset.filter.FilterFactory;
import org.dashbuilder.dataset.group.AggregateFunctionType;
import org.dashbuilder.dataset.sort.SortOrder;
import org.junit.Test;
import static org.dashbuilder.dataset.ExpenseReportsData.*;
import static org.dashbuilder.dataset.Assertions.*;
import static org.dashbuilder.dataset.filter.FilterFactory.*;
import static org.fest.assertions.api.Assertions.*;
import static org.junit.Assert.*;
public class SQLDataSetDefTest extends SQLDataSetTestBase {
@Override
public void testAll() throws Exception {
if (!testSettings.isMonetDB()) {
testAllColumns();
}
testSQLDataSet();
testColumnSet();
testColumnAlias();
testFilters();
}
@Test
public void testAllColumns() throws Exception {
URL fileURL = Thread.currentThread().getContextClassLoader().getResource("expenseReports_allcolumns.dset");
String json = IOUtils.toString(fileURL);
SQLDataSetDef def = (SQLDataSetDef) jsonMarshaller.fromJson(json);
dataSetDefRegistry.registerDataSetDef(def);
DataSetMetadata metadata = dataSetManager.getDataSetMetadata("expense_reports_allcolumns");
assertThat(metadata.getNumberOfColumns()).isEqualTo(6);
assertThat(metadata.getEstimatedSize()).isEqualTo(6350);
}
@Test
public void testSQLDataSet() throws Exception {
String testDsetFile = testSettings.getExpenseReportsSqlDsetFile();
URL fileURL = Thread.currentThread().getContextClassLoader().getResource(testDsetFile);
String json = IOUtils.toString(fileURL);
SQLDataSetDef def = (SQLDataSetDef) jsonMarshaller.fromJson(json);
dataSetDefRegistry.registerDataSetDef(def);
DataSetMetadata metadata = dataSetManager.getDataSetMetadata("expense_reports_sql");
assertThat(metadata.getNumberOfColumns()).isEqualTo(3);
assertThat(metadata.getNumberOfRows()).isEqualTo(6);
final String uuid = "expense_reports_sql";
DataSet dataSet = dataSetManager.lookupDataSet(
DataSetLookupFactory.newDataSetLookupBuilder()
.dataset(uuid)
.filter(COLUMN_AMOUNT, FilterFactory.lowerThan(1000))
.group(COLUMN_EMPLOYEE)
.column(COLUMN_EMPLOYEE)
.column(COLUMN_AMOUNT, AggregateFunctionType.SUM)
.sort(COLUMN_EMPLOYEE, SortOrder.ASCENDING)
.buildLookup());
assertDataSetDefinition(dataSet, uuid);
assertDataSetValues(dataSet, dataSetFormatter, new String[][]{
{"Jamie Gilbeau", "792.59"},
{"Roxie Foraker", "1,020.45"}
}, 0);
}
@Test
public void testColumnSet() throws Exception {
URL fileURL = Thread.currentThread().getContextClassLoader().getResource("expenseReports_columnset.dset");
String json = IOUtils.toString(fileURL);
SQLDataSetDef def = (SQLDataSetDef) jsonMarshaller.fromJson(json);
dataSetDefRegistry.registerDataSetDef(def);
DataSetMetadata metadata = dataSetManager.getDataSetMetadata("expense_reports_columnset");
assertThat(metadata.getNumberOfColumns()).isEqualTo(4);
if (!testSettings.isMonetDB()) {
assertThat(metadata.getEstimatedSize()).isEqualTo(4300);
}
final String uuid = "expense_reports_columnset";
DataSet dataSet = dataSetManager.lookupDataSet(
DataSetLookupFactory.newDataSetLookupBuilder()
.dataset(uuid)
.buildLookup());
assertThat(dataSet.getColumns().size()).isEqualTo(4);
assertThat(dataSet.getValueAt(0, 0)).isEqualTo("Engineering");
assertThat(dataSet.getValueAt(0, 1)).isEqualTo("Roxie Foraker");
assertThat(dataSet.getValueAt(0, 2)).isEqualTo(120.35d);
assertThat(dataSetFormatter.formatValueAt(dataSet, 0, 3)).isEqualTo("12/11/15 12:00");
assertDataSetDefinition(dataSet, uuid);
}
@Test
public void testColumnAlias() throws Exception {
URL fileURL = Thread.currentThread().getContextClassLoader().getResource("expenseReports_columnalias.dset");
String json = IOUtils.toString(fileURL);
SQLDataSetDef def = (SQLDataSetDef) jsonMarshaller.fromJson(json);
dataSetDefRegistry.registerDataSetDef(def);
String uuid = "expense_reports_columnalias";
DataSetMetadata metadata = dataSetManager.getDataSetMetadata(uuid);
assertThat(metadata.getNumberOfColumns()).isEqualTo(3);
assertThat(metadata.getColumnId(0)).isEqualTo("Id");
assertThat(metadata.getColumnId(1)).isEqualTo("Employee");
assertThat(metadata.getColumnId(2)).isEqualTo("Amount");
DataSet dataSet = dataSetManager.lookupDataSet(
DataSetLookupFactory.newDataSetLookupBuilder()
.dataset(uuid)
.filter("id", FilterFactory.notNull())
.filter("amount", OR(greaterThan(0), lowerThan(1000)))
.group("employee")
.column("EMPLOYEE", "employee")
.column("id", AggregateFunctionType.COUNT, "id")
.column("AMOUNT", AggregateFunctionType.SUM, "amount")
.sort("id", SortOrder.ASCENDING)
.buildLookup());
assertThat(dataSet.getColumns().size()).isEqualTo(3);
assertNotNull(dataSet.getColumnById("ID"));
assertNotNull(dataSet.getColumnById("EMPLOYEE"));
assertNotNull(dataSet.getColumnById("AMOUNT"));
}
@Test
public void testFilters() throws Exception {
URL fileURL = Thread.currentThread().getContextClassLoader().getResource("expenseReports_filtered.dset");
String json = IOUtils.toString(fileURL);
SQLDataSetDef def = (SQLDataSetDef) jsonMarshaller.fromJson(json);
dataSetDefRegistry.registerDataSetDef(def);
final String uuid = "expense_reports_filtered";
DataSetMetadata metadata = dataSetManager.getDataSetMetadata(uuid);
assertThat(metadata.getNumberOfColumns()).isEqualTo(5);
if (!testSettings.isMonetDB()) {
assertThat(metadata.getEstimatedSize()).isEqualTo(666);
}
DataSet dataSet = dataSetManager.lookupDataSet(
DataSetLookupFactory.newDataSetLookupBuilder()
.dataset(uuid)
.group(COLUMN_DEPARTMENT)
.column(COLUMN_DEPARTMENT)
.column(COLUMN_EMPLOYEE)
.column(COLUMN_AMOUNT, AggregateFunctionType.SUM)
.sort(COLUMN_DEPARTMENT, SortOrder.DESCENDING)
.buildLookup());
assertDataSetDefinition(dataSet, uuid);
assertDataSetValues(dataSet, dataSetFormatter, new String[][]{
{"Services", "Jamie Gilbeau", "792.59"},
{"Engineering", "Roxie Foraker", "2,120.55"}
}, 0);
}
public static void assertDataSetDefinition(final DataSet dataSet, final String uuid) {
assertThat(dataSet.getUUID()).isEqualTo(uuid);
assertThat(dataSet.getDefinition()).isNotNull();
assertThat(dataSet.getDefinition().getUUID()).isEqualTo(uuid);
}
}