1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package fr.paris.lutece.plugins.directory.modules.multiview.business.record.column.querypart;
35
36 import static org.hamcrest.CoreMatchers.is;
37 import static org.hamcrest.CoreMatchers.not;
38 import static org.hamcrest.CoreMatchers.nullValue;
39 import static org.junit.Assert.assertThat;
40
41 import java.util.ArrayList;
42 import java.util.Arrays;
43 import java.util.List;
44 import java.util.Map;
45
46 import org.apache.commons.lang3.StringUtils;
47
48 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.column.IRecordColumn;
49 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.column.RecordColumnCell;
50 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.column.impl.RecordColumnEntry;
51 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.column.querypart.impl.RecordColumnEntryQueryPart;
52 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.column.querypart.mock.DAOUtilMock;
53 import fr.paris.lutece.portal.service.util.AppException;
54 import fr.paris.lutece.test.LuteceTestCase;
55 import fr.paris.lutece.util.sql.DAOUtil;
56
57
58
59
60 public class RecordColumnEntryRecordFieldQueryPartTest extends LuteceTestCase
61 {
62
63
64
65 @Override
66 protected void setUp( ) throws Exception
67 {
68 super.setUp( );
69 }
70
71
72
73
74 @Override
75 protected void tearDown( ) throws Exception
76 {
77 super.tearDown( );
78 }
79
80
81
82
83 public void testGetRecordColumnCellEntryRecordField( )
84 {
85 String strRecordEntryRecordFieldValueToRetrieve = "entry record field value";
86 DAOUtil daoUtil = new DAOUtilMock( StringUtils.EMPTY, "column_1_value", strRecordEntryRecordFieldValueToRetrieve );
87
88 IRecordColumn recordColumn = new RecordColumnEntry( 1, "Entry Record Field", new ArrayList<String>( ) );
89 RecordColumnEntryQueryPart recordColumnEntryRecordFieldQueryPart = new RecordColumnEntryQueryPart( );
90 recordColumnEntryRecordFieldQueryPart.setRecordColumn( recordColumn );
91
92 RecordColumnCell recordColumnCell = recordColumnEntryRecordFieldQueryPart.getRecordColumnCell( daoUtil );
93 assertThat( recordColumnCell, is( not( nullValue( ) ) ) );
94
95 Map<String, Object> mapRecordColumnCellValues = recordColumnCell.getRecordColumnCellValues( );
96 assertThat( mapRecordColumnCellValues, is( not( nullValue( ) ) ) );
97 assertThat( mapRecordColumnCellValues.size( ), is( 1 ) );
98
99 Object objDirectoryResult = recordColumnCell.getRecordColumnCellValueByName( "column_1_value" );
100 assertThat( objDirectoryResult, is( not( nullValue( ) ) ) );
101 assertThat( String.valueOf( objDirectoryResult ), is( strRecordEntryRecordFieldValueToRetrieve ) );
102 }
103
104
105
106
107 public void testGetRecordColumnCellEntryRecordFieldWithWrongColumnName( )
108 {
109 String strRecordEntryRecordFieldValueToRetrieve = "entry record field value";
110 DAOUtil daoUtil = new DAOUtilMock( StringUtils.EMPTY, "colonne", strRecordEntryRecordFieldValueToRetrieve );
111
112 IRecordColumn recordColumn = new RecordColumnEntry( 1, "Entry Record Field", new ArrayList<String>( ) );
113 RecordColumnEntryQueryPart recordColumnEntryRecordFieldQueryPart = new RecordColumnEntryQueryPart( );
114 recordColumnEntryRecordFieldQueryPart.setRecordColumn( recordColumn );
115
116 try
117 {
118 recordColumnEntryRecordFieldQueryPart.getRecordColumnCell( daoUtil );
119 fail( "Test fail : AppException hasn't been thrown !" );
120 }
121 catch( AppException exception )
122 {
123
124 }
125 }
126
127
128
129
130 public void testGetRecordColumnJoinQueriesWithoutEntryTitle( )
131 {
132 String strJoinQueryExpected = "LEFT JOIN ( SELECT record_1.id_record AS id_record_1, record_field_1.record_field_value AS "
133 + "column_1_value FROM directory_record_field AS record_field_1 INNER JOIN directory_record AS record_1 ON "
134 + "record_field_1.id_record = record_1.id_record INNER JOIN directory_entry AS entry_1 ON entry_1.id_entry = "
135 + "record_field_1.id_entry WHERE entry_1.title IN ( ) ) AS column_1 ON column_1.id_record_1 = record.id_record";
136
137 IRecordColumn recordColumn = new RecordColumnEntry( 1, "Titre", new ArrayList<>( ) );
138 RecordColumnEntryQueryPart recordColumnEntryQueryPart = new RecordColumnEntryQueryPart( );
139 recordColumnEntryQueryPart.setRecordColumn( recordColumn );
140
141 List<String> listRecordColumnJoinQueries = recordColumnEntryQueryPart.getRecordColumnJoinQueries( );
142 assertThat( listRecordColumnJoinQueries, is( not( nullValue( ) ) ) );
143 assertThat( listRecordColumnJoinQueries.size( ), is( 1 ) );
144
145 String strRecordColumnJoinQuery = removeQuerySpaces( listRecordColumnJoinQueries.get( 0 ) );
146 assertThat( strRecordColumnJoinQuery, is( strJoinQueryExpected ) );
147 }
148
149
150
151
152 public void testGetRecordColumnJoinQueriesWithoutEntryTitleAndColumnPosition( )
153 {
154 String strJoinQueryExpected = "LEFT JOIN ( SELECT record_-1.id_record AS id_record_-1, record_field_-1.record_field_value AS "
155 + "column_-1_value FROM directory_record_field AS record_field_-1 INNER JOIN directory_record AS record_-1 ON "
156 + "record_field_-1.id_record = record_-1.id_record INNER JOIN directory_entry AS entry_-1 ON entry_-1.id_entry = "
157 + "record_field_-1.id_entry WHERE entry_-1.title IN ( ) ) AS column_-1 ON column_-1.id_record_-1 = record.id_record";
158
159 RecordColumnEntryQueryPart recordColumnEntryQueryPart = new RecordColumnEntryQueryPart( );
160
161 List<String> listRecordColumnJoinQueries = recordColumnEntryQueryPart.getRecordColumnJoinQueries( );
162 assertThat( listRecordColumnJoinQueries, is( not( nullValue( ) ) ) );
163 assertThat( listRecordColumnJoinQueries.size( ), is( 1 ) );
164
165 String strRecordColumnJoinQuery = removeQuerySpaces( listRecordColumnJoinQueries.get( 0 ) );
166 assertThat( strRecordColumnJoinQuery, is( strJoinQueryExpected ) );
167 }
168
169
170
171
172 public void testGetRecordColumnJoinQueries( )
173 {
174 String strJoinQueryExpected = "LEFT JOIN ( SELECT record_5.id_record AS id_record_5, record_field_5.record_field_value AS "
175 + "column_5_value FROM directory_record_field AS record_field_5 INNER JOIN directory_record AS record_5 ON "
176 + "record_field_5.id_record = record_5.id_record INNER JOIN directory_entry AS entry_5 ON entry_5.id_entry = "
177 + "record_field_5.id_entry WHERE entry_5.title IN ( 'FirstName', 'LastName' ) ) AS column_5 ON column_5.id_record_5 " + "= record.id_record";
178
179 List<String> listEntryTitle = Arrays.asList( "FirstName", "LastName" );
180 IRecordColumn recordColumn = new RecordColumnEntry( 5, "Titre", listEntryTitle );
181
182 RecordColumnEntryQueryPart recordColumnEntryQueryPart = new RecordColumnEntryQueryPart( );
183 recordColumnEntryQueryPart.setRecordColumn( recordColumn );
184
185 List<String> listRecordColumnJoinQueries = recordColumnEntryQueryPart.getRecordColumnJoinQueries( );
186 assertThat( listRecordColumnJoinQueries, is( not( nullValue( ) ) ) );
187 assertThat( listRecordColumnJoinQueries.size( ), is( 1 ) );
188
189 String strRecordColumnJoinQuery = removeQuerySpaces( listRecordColumnJoinQueries.get( 0 ) );
190 assertThat( strRecordColumnJoinQuery, is( strJoinQueryExpected ) );
191 }
192
193
194
195
196
197
198
199
200 private String removeQuerySpaces( String strQuery )
201 {
202 String strQueryResult = StringUtils.EMPTY;
203
204 if ( StringUtils.isNotBlank( strQuery ) )
205 {
206 strQueryResult = strQuery.trim( ).replaceAll( " +", " " );
207 strQueryResult = strQueryResult.replaceAll( " +,", "," );
208 }
209
210 return strQueryResult;
211 }
212 }