Add missing file.
[online-glom:gwt-glom.git] / src / test / java / org / glom / web / server / SelfHostTestUtils.java
1 /*
2  * Copyright (C) 2012 Openismus GmbH
3  *
4  * This file is part of GWT-Glom.
5  *
6  * GWT-Glom is free software: you can redistribute it and/or modify it
7  * under the terms of the GNU Lesser General Public License as published by the
8  * Free Software Foundation, either version 3 of the License, or (at your
9  * option) any later version.
10  *
11  * GWT-Glom is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
14  * for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with GWT-Glom.  If not, see <http://www.gnu.org/licenses/>.
18  */
19
20 package org.glom.web.server;
21
22 import static org.junit.Assert.assertNotNull;
23 import static org.junit.Assert.assertTrue;
24
25 import java.sql.Connection;
26 import java.sql.ResultSet;
27 import java.sql.ResultSetMetaData;
28 import java.sql.SQLException;
29 import java.sql.Statement;
30 import java.util.ArrayList;
31 import java.util.List;
32
33 import org.glom.web.server.libglom.Document;
34 import org.glom.web.shared.TypedDataItem;
35 import org.glom.web.shared.libglom.Field;
36 import org.glom.web.shared.libglom.Relationship;
37 import org.glom.web.shared.libglom.layout.LayoutItemField;
38 import org.jooq.Condition;
39 import org.junit.Assert;
40
41 /**
42  * @author Murray Cumming <murrayc@openismus.com>
43  *
44  */
45 public class SelfHostTestUtils {
46         static public void testExampleMusiccollectionData(final SelfHoster selfHoster, final Document document) throws SQLException
47         {
48           assertTrue(document != null);
49           
50           //Check that some data is as expected:
51           final TypedDataItem quickFindValue = new TypedDataItem();
52           quickFindValue.setText("Born To Run");
53           final String tableName = "albums";
54           final Condition whereClause = SqlUtils.getFindWhereClauseQuick(document, tableName, quickFindValue);
55           assertTrue(whereClause != null);
56
57           final List<LayoutItemField> fieldsToGet = new ArrayList<LayoutItemField>();
58           Field field = document.getField(tableName, "album_id");
59           final LayoutItemField layoutItemFieldAlbumID = new LayoutItemField();
60           layoutItemFieldAlbumID.setFullFieldDetails(field);
61           fieldsToGet.add(layoutItemFieldAlbumID);
62           field = document.getField(tableName, "name");
63           LayoutItemField layoutItemField = new LayoutItemField();
64           layoutItemField.setFullFieldDetails(field);
65           fieldsToGet.add(layoutItemField);
66           
67           final String sqlQuery = SqlUtils.buildSqlSelectWithWhereClause(tableName, fieldsToGet, whereClause, null);
68           
69           final Connection conn = selfHoster.createConnection(false);
70           assertTrue(conn != null);
71           
72           final Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
73       //st.setFetchSize(length);
74           final ResultSet rs = st.executeQuery(sqlQuery);
75           assertTrue(rs != null);
76           
77           final ResultSetMetaData rsMetaData = rs.getMetaData();
78           Assert.assertEquals(2, rsMetaData.getColumnCount());
79           
80           rs.last();
81           final int rsRowsCount = rs.getRow();
82           Assert.assertEquals(1, rsRowsCount);
83           
84           final TypedDataItem albumID = new TypedDataItem();
85           SqlUtils.fillDataItemFromResultSet(albumID, layoutItemFieldAlbumID, 1,
86                                 rs, "fake-document-id", tableName, null);
87           testExampleMusiccollectionDataRelated(selfHoster, document, albumID);
88         }
89
90         /** Check that we can get data via a relationship.
91          * @param document
92          * @param albumID
93          * @throws SQLException 
94          */
95         static private void testExampleMusiccollectionDataRelated(final SelfHoster selfHoster, final Document document, TypedDataItem albumID) throws SQLException {
96                 final String tableName = "albums";
97                 
98                 //Normal fields:
99                 final List<LayoutItemField> fieldsToGet = new ArrayList<LayoutItemField>();
100                 final Field fieldAlbumID = document.getField(tableName, "album_id");
101                 assertNotNull(fieldAlbumID);
102                 LayoutItemField layoutItemField = new LayoutItemField();
103                 layoutItemField.setFullFieldDetails(fieldAlbumID);
104                 fieldsToGet.add(layoutItemField);
105                 Field field = document.getField(tableName, "name");
106                 assertNotNull(field);
107                 layoutItemField = new LayoutItemField();
108                 layoutItemField.setFullFieldDetails(field);
109                 fieldsToGet.add(layoutItemField);
110                   
111                 //Related field:
112                 final Relationship relationship = document.getRelationship(tableName, "artist");
113                 assertNotNull(relationship);
114                 layoutItemField = new LayoutItemField();
115                 layoutItemField.setRelationship(relationship);
116                 field = document.getField("artists", "name");
117                 assertNotNull(field);
118                 layoutItemField.setFullFieldDetails(field);
119                 fieldsToGet.add(layoutItemField);
120                 
121                   
122                 final String sqlQuery = SqlUtils.buildSqlSelectWithKey(tableName, fieldsToGet, fieldAlbumID, albumID);
123                   
124                 final Connection conn = selfHoster.createConnection(false);
125                 assertTrue(conn != null);
126                   
127                 final Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
128                 //st.setFetchSize(length);
129                 final ResultSet rs = st.executeQuery(sqlQuery);
130                 assertTrue(rs != null);
131                 
132                 final ResultSetMetaData rsMetaData = rs.getMetaData();
133                 Assert.assertEquals(3, rsMetaData.getColumnCount());
134
135                 rs.last();
136                 final int rsRowsCount = rs.getRow();
137                 Assert.assertEquals(1, rsRowsCount);
138         }
139 }