/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF 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.apache.metamodel.sugarcrm; import java.util.Arrays; import java.util.Date; import org.apache.metamodel.data.DataSet; import org.apache.metamodel.data.InMemoryDataSet; import org.apache.metamodel.data.MaxRowsDataSet; import org.apache.metamodel.data.Row; import org.apache.metamodel.query.Query; import org.apache.metamodel.schema.Column; import org.apache.metamodel.schema.ColumnType; import org.apache.metamodel.schema.Schema; import org.apache.metamodel.schema.Table; import com.sugarcrm.ws.soap.GetEntryListResultVersion2; public class SugarCrmDataContextTest extends SugarCrmTestCase { private static final String BASE_URL = "http://localhost:9090/sugarcrm"; private SugarCrmDataContext dataContext; @Override protected void tearDown() throws Exception { if (dataContext != null) { dataContext.close(); dataContext = null; } } public void testCountQuery() throws Exception { if (!isConfigured()) { System.err.println(getInvalidConfigurationMessage()); return; } dataContext = new SugarCrmDataContext(BASE_URL, getUsername(), getPassword(), "Test"); final DataSet ds = dataContext.query().from("Accounts").selectCount().execute(); assertTrue(ds instanceof InMemoryDataSet); assertTrue(ds.next()); Object count = ds.getRow().getValue(0); assertEquals(getNumberOfAccounts(), ((Number) count).intValue()); assertFalse(ds.next()); ds.close(); } public void testScrollingQuery() throws Exception { if (!isConfigured()) { System.err.println(getInvalidConfigurationMessage()); return; } dataContext = new SugarCrmDataContext(BASE_URL + "/", getUsername(), getPassword(), "Test"); final DataSet ds = dataContext.query().from("Accounts").select("name").execute(); assertNotNull(ds); assertTrue("Not a SugarCrmDataSet: " + ds.getClass(), ds instanceof SugarCrmDataSet); final GetEntryListResultVersion2 entryList = ((SugarCrmDataSet) ds).getEntryList(); final int totalCount = entryList.getTotalCount(); assertTrue(totalCount > 0); assertEquals(183, totalCount); int counter = 0; while (ds.next()) { Row row = ds.getRow(); Object value = row.getValue(0); assertNotNull(value); assertTrue(value instanceof String); assertFalse("".equals(value)); counter++; } ds.close(); assertEquals(counter, totalCount); } public void testSelectAllColumnsAndTypes() throws Exception { if (!isConfigured()) { System.err.println(getInvalidConfigurationMessage()); return; } dataContext = new SugarCrmDataContext(BASE_URL + "/", getUsername(), getPassword(), "Test"); final Schema schema = dataContext.getDefaultSchema(); final Table table = schema.getTableByName("Prospects"); final Column[] numberColumns = table.getNumberColumns(); final Column[] booleanColumns = table.getBooleanColumns(); final Column[] timeBasedColumns = table.getTimeBasedColumns(); assertTrue(numberColumns.length > 0); assertTrue(booleanColumns.length > 0); assertTrue(timeBasedColumns.length > 0); DataSet ds = dataContext.query().from(table).selectAll().limit(5).execute(); int rowCounter = 0; int numberCounter = 0; int booleanCounter = 0; int timeBasedCounter = 0; while (ds.next()) { final Row row = ds.getRow(); for (Column column : numberColumns) { Object value = row.getValue(column); if (value != null) { assertTrue(value instanceof Number); numberCounter++; } } for (Column column : booleanColumns) { Object value = row.getValue(column); if (value != null) { assertTrue(value instanceof Boolean); booleanCounter++; } } for (Column column : timeBasedColumns) { Object value = row.getValue(column); if (value != null) { assertTrue(value instanceof Date); timeBasedCounter++; } } rowCounter++; } ds.close(); assertTrue(rowCounter > 0); assertTrue("No non-null values found in: " + Arrays.toString(numberColumns), numberCounter > 0); assertTrue("No non-null values found in: " + Arrays.toString(booleanColumns), booleanCounter > 0); assertTrue("No non-null values found in: " + Arrays.toString(timeBasedColumns), timeBasedCounter > 0); } public void testMaxRowsQuery() throws Exception { if (!isConfigured()) { System.err.println(getInvalidConfigurationMessage()); return; } dataContext = new SugarCrmDataContext(BASE_URL + "/", getUsername(), getPassword(), "Test"); Query query = dataContext.query().from("Employees").select("id", "name").toQuery(); query.setMaxRows(3); final DataSet ds = dataContext.executeQuery(query); assertNotNull(ds); assertTrue(ds instanceof MaxRowsDataSet); assertTrue(ds.next()); assertNotNull(ds.getRow().getValue(0)); assertNotNull(ds.getRow().getValue(1)); assertTrue(ds.next()); assertNotNull(ds.getRow().getValue(0)); assertNotNull(ds.getRow().getValue(1)); assertTrue(ds.next()); assertNotNull(ds.getRow().getValue(0)); assertNotNull(ds.getRow().getValue(1)); assertFalse(ds.next()); } public void testSchema() throws Exception { if (!isConfigured()) { System.err.println(getInvalidConfigurationMessage()); return; } dataContext = new SugarCrmDataContext(BASE_URL, getUsername(), getPassword(), "Test"); Schema schema = dataContext.getDefaultSchema(); assertEquals("SugarCRM", schema.getName()); Table table = schema.getTableByName("Accounts"); String[] columnNames = table.getColumnNames(); assertEquals( "[id, name, date_entered, date_modified, modified_user_id, modified_by_name, created_by, created_by_name, " + "description, deleted, assigned_user_id, assigned_user_name, account_type, industry, annual_revenue, phone_fax, " + "billing_address_street, billing_address_street_2, billing_address_street_3, billing_address_street_4, " + "billing_address_city, billing_address_state, billing_address_postalcode, billing_address_country, rating, " + "phone_office, phone_alternate, website, ownership, employees, ticker_symbol, shipping_address_street, " + "shipping_address_street_2, shipping_address_street_3, shipping_address_street_4, shipping_address_city, " + "shipping_address_state, shipping_address_postalcode, shipping_address_country, email1, parent_id, sic_code, parent_name, " + "email_opt_out, invalid_email, email, campaign_id, campaign_name]", Arrays.toString(columnNames)); Column nameColumn = table.getColumnByName("name"); String nativeType = nameColumn.getNativeType(); String remarks = nameColumn.getRemarks(); ColumnType type = nameColumn.getType(); assertEquals("name|Name:|VARCHAR", nativeType + "|" + remarks + "|" + type); Column[] columns = table.getColumns(); for (Column column : columns) { type = column.getType(); if (type == null || type == ColumnType.OTHER) { fail("No type mapping for native type: " + column.getNativeType() + " (found in column: " + column + ")"); } } table = schema.getTableByName("Contacts"); columnNames = table.getColumnNames(); assertEquals( "[id, name, date_entered, date_modified, modified_user_id, modified_by_name, created_by, created_by_name, description, deleted, " + "assigned_user_id, assigned_user_name, salutation, first_name, last_name, full_name, title, department, do_not_call, phone_home, " + "email, phone_mobile, phone_work, phone_other, phone_fax, email1, email2, invalid_email, email_opt_out, primary_address_street, " + "primary_address_street_2, primary_address_street_3, primary_address_city, primary_address_state, primary_address_postalcode, " + "primary_address_country, alt_address_street, alt_address_street_2, alt_address_street_3, alt_address_city, alt_address_state, " + "alt_address_postalcode, alt_address_country, assistant, assistant_phone, email_and_name1, lead_source, account_name, account_id, " + "opportunity_role_fields, opportunity_role_id, opportunity_role, reports_to_id, report_to_name, birthdate, campaign_id, campaign_name, " + "c_accept_status_fields, m_accept_status_fields, accept_status_id, accept_status_name, sync_contact]", Arrays.toString(columnNames)); columns = table.getColumns(); for (Column column : columns) { type = column.getType(); if (type == null || type == ColumnType.OTHER) { fail("No type mapping for native type: " + column.getNativeType() + " (found in column: " + column + ")"); } } } }