3535import org .labkey .test .util .SummaryStatisticsHelper ;
3636import org .labkey .test .util .TestDataGenerator ;
3737
38+ import java .util .ArrayList ;
3839import java .util .List ;
3940import java .util .Map ;
4041
@@ -75,6 +76,12 @@ public class CustomizeViewTest extends BaseWebDriverTest
7576 { "7" , "Yak" , "Yakson" , "88" , "" },
7677 };
7778
79+ // GitHub Issue 1219: a deliberately wide list used to verify that summary statistics save action
80+ private final static String WIDE_LIST_NAME = "WideListTest" ;
81+ private final static String WIDE_LIST_KEY_COLUMN = "Key" ;
82+ private final static int WIDE_LIST_COLUMN_COUNT = 160 ;
83+ private final static String WIDE_STAT_COLUMN = "Field001" ;
84+
7885 private SummaryStatisticsHelper _summaryStatisticsHelper ;
7986
8087 @ Override
@@ -94,6 +101,7 @@ private void doSetup() throws Exception
94101 {
95102 _containerHelper .createProject (PROJECT_NAME , null );
96103 createList ();
104+ createWideList ();
97105 }
98106
99107 @ Before
@@ -234,6 +242,21 @@ public void testRemoveViaColumnHeader()
234242 assertThat (drt .getColumnLabels (), hasItem ("Last Name" ));
235243 }
236244
245+ // GitHub Issue 1219: Adding a summary statistic must work on very wide datasets
246+ @ Test
247+ public void testSummaryStatisticsOnWideDataset ()
248+ {
249+ GridPage .beginAt (this , PROJECT_NAME , WIDE_LIST_NAME );
250+ DataRegionTable drt = new DataRegionTable ("query" , getDriver ());
251+
252+ log ("Set summary statistic on a wide (" + WIDE_LIST_COLUMN_COUNT + "-column) dataset" );
253+ drt .setSummaryStatistic (WIDE_STAT_COLUMN , SummaryStatisticsHelper .BASE_STAT_SUM , "60" );
254+ assertTrue ("Summary statistic row didn't appear; the saveQueryViews request likely exceeded the server JSON input limit (Issue 1219)" ,
255+ drt .hasSummaryStatisticRow ());
256+ String summaryStatStr = SummaryStatisticsHelper .BASE_STAT_SUM + ": 60" ;
257+ assertEquals ("Wrong summary statistics" , summaryStatStr , _summaryStatisticsHelper .getSummaryStatisticFooterAsString (drt , WIDE_STAT_COLUMN ));
258+ }
259+
237260 @ Test
238261 public void testFilteringAndSorting ()
239262 {
@@ -401,6 +424,24 @@ private void createList() throws Exception
401424 testDataGenerator .insertRows (createDefaultConnection ());
402425 }
403426
427+ // GitHub Issue 1219: create a wide list
428+ private void createWideList () throws Exception
429+ {
430+ List <FieldDefinition > fields = new ArrayList <>();
431+ for (int i = 1 ; i <= WIDE_LIST_COLUMN_COUNT ; i ++)
432+ fields .add (new FieldDefinition (String .format ("Field%03d" , i ), ColumnType .Integer ));
433+
434+ ListDefinition listDefinition = new IntListDefinition (WIDE_LIST_NAME , WIDE_LIST_KEY_COLUMN ).setFields (fields );
435+ TestDataGenerator testDataGenerator = listDefinition .create (createDefaultConnection (), PROJECT_NAME );
436+
437+ // Only the key and the column under test need values; the remaining columns stay null. Sum == 60.
438+ testDataGenerator .addCustomRow (Map .of (WIDE_LIST_KEY_COLUMN , "1" , WIDE_STAT_COLUMN , "10" ));
439+ testDataGenerator .addCustomRow (Map .of (WIDE_LIST_KEY_COLUMN , "2" , WIDE_STAT_COLUMN , "20" ));
440+ testDataGenerator .addCustomRow (Map .of (WIDE_LIST_KEY_COLUMN , "3" , WIDE_STAT_COLUMN , "30" ));
441+
442+ testDataGenerator .insertRows (createDefaultConnection ());
443+ }
444+
404445 private void setColumns (String ... columnNames )
405446 {
406447 _customizeViewsHelper .openCustomizeViewPanel ();
0 commit comments