Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions src/org/labkey/test/params/list/ListDefinition.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

public abstract class ListDefinition extends DomainProps
{
private Integer _listId;
private String _name;
private String _description;
private List<FieldDefinition> _fields = new ArrayList<>();
Expand All @@ -25,6 +26,16 @@ public ListDefinition(String name)
_name = name;
}

public Integer getListId()
{
return _listId;
}

public void setListId(Integer listId)
{
_listId = listId;
}

public String getName()
{
return _name;
Expand Down
114 changes: 83 additions & 31 deletions src/org/labkey/test/tests/TriggerScriptTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/
package org.labkey.test.tests;

import org.assertj.core.api.Assertions;
import org.jetbrains.annotations.Nullable;
import org.junit.Assert;
import org.junit.Before;
Expand All @@ -26,6 +27,7 @@
import org.labkey.remoteapi.query.DeleteRowsCommand;
import org.labkey.remoteapi.query.InsertRowsCommand;
import org.labkey.remoteapi.query.BaseRowsCommand;
import org.labkey.remoteapi.query.MoveRowsCommand;
import org.labkey.remoteapi.query.RowsResponse;
import org.labkey.remoteapi.query.UpdateRowsCommand;
import org.labkey.test.BaseWebDriverTest;
Expand All @@ -40,6 +42,8 @@
import org.labkey.test.params.FieldDefinition.ColumnType;
import org.labkey.test.params.experiment.DataClassDefinition;
import org.labkey.test.params.experiment.SampleTypeDefinition;
import org.labkey.test.params.list.IntListDefinition;
import org.labkey.test.params.list.ListDefinition;
import org.labkey.test.util.DataRegionTable;
import org.labkey.test.util.Maps;
import org.labkey.test.util.PortalHelper;
Expand All @@ -61,6 +65,10 @@
@BaseWebDriverTest.ClassTimeout(minutes = 8)
public class TriggerScriptTest extends BaseWebDriverTest
{
private static final String PROJECT_NAME = "Test Trigger Script Project";
private static final String SUBFOLDER_NAME = "SubfolderA";
private static final String SUBFOLDER_PATH = "/" + PROJECT_NAME + "/" + SUBFOLDER_NAME;

//List constants
private static final String TRIGGER_MODULE = "triggerTestModule";
private static final String SIMPLE_MODULE = "simpletest";
Expand Down Expand Up @@ -90,6 +98,7 @@ public class TriggerScriptTest extends BaseWebDriverTest
public static final String PEOPLE_LIST_NAME = "People";

protected final PortalHelper _portalHelper = new PortalHelper(this);
private static ListDefinition EMPLOYEE_LIST;

@Override
public List<String> getAssociatedModules()
Expand All @@ -101,7 +110,7 @@ public List<String> getAssociatedModules()
@Override
protected String getProjectName()
{
return "Test Trigger Script Project";
return PROJECT_NAME;
}

@Override
Expand Down Expand Up @@ -167,36 +176,42 @@ private interface GoToDataUI
}

@BeforeClass
public static void projectSetup()
public static void projectSetup() throws Exception
{
TriggerScriptTest init = getCurrentTest();
init.doSetup();
}


protected void doSetup()
protected void doSetup() throws Exception
{
_containerHelper.createProject(getProjectName(), null);
_containerHelper.createSubfolder(getProjectName(), SUBFOLDER_NAME);
_containerHelper.enableModule(getProjectName(), "Query");
_containerHelper.enableModule(getProjectName(), SIMPLE_MODULE);
_containerHelper.enableModule(getProjectName(), TRIGGER_MODULE);

//create List
FieldDefinition[] columns = new FieldDefinition[] {
// Create lists
{
List<FieldDefinition> fields = List.of(
new FieldDefinition("name", ColumnType.String).setLabel("Name"),
new FieldDefinition("ssn", ColumnType.String).setLabel("SSN"),
new FieldDefinition("company", ColumnType.String).setLabel("Company")
);

};

_listHelper.createList(getProjectName(), LIST_NAME, "Key", columns);
EMPLOYEE_LIST = new IntListDefinition(LIST_NAME, "Key").setFields(fields);
EMPLOYEE_LIST.create(createDefaultConnection(), getProjectName());

log("Create the People list");
_listHelper.createList(getProjectName(), PEOPLE_LIST_NAME, "Key",
fields = List.of(
new FieldDefinition("Name", ColumnType.String).setDescription("Name"),
new FieldDefinition("Age", ColumnType.Integer).setDescription("Age"),
new FieldDefinition("FavoriteDateTime", ColumnType.DateAndTime).setDescription("Favorite date time. Who doesn't have one?"),
new FieldDefinition("Crazy", ColumnType.Boolean).setDescription("Crazy?"));
new FieldDefinition("Crazy", ColumnType.Boolean).setDescription("Crazy?")
);

new IntListDefinition(PEOPLE_LIST_NAME, "Key")
.setFields(fields)
.create(createDefaultConnection(), getProjectName());
}

importFolderFromZip(TestFileUtils.getSampleData("studies/LabkeyDemoStudy.zip"));

Expand All @@ -217,6 +232,7 @@ public void goToProjectStart()
@Test
public void testListIndividualTriggers()
{
cleanUpListRows();
EmployeeRecord caughtAfter = new EmployeeRecord("Emp 1", "1112223333", "Test"),
changedBefore = new EmployeeRecord("Emp 2", "2223334444", "Some Other");

Expand Down Expand Up @@ -267,12 +283,12 @@ public void testListIndividualTriggers()
clickButton("Back");
//Verify validation error prevented delete
waitForElement(Locator.tagWithText("td", "Emp 3"));
cleanUpListRows();
}

@Test
public void testListImportTriggers()
{
cleanUpListRows();
goToManagedList(LIST_NAME);
_listHelper.clickImportData();

Expand Down Expand Up @@ -302,7 +318,27 @@ public void testListImportTriggers()
importDataPage.submit();

waitForElement(Locator.tagWithText("td","Importing TSV"));
}

@Test
public void testListMoveTriggers() throws Exception
{
cleanUpListRows();

RowsResponse response = EMPLOYEE_LIST.getTestDataGenerator(getProjectName())
.addCustomRow(Map.of("name", "Emp 11", "ssn", "123-45-6789", "company", "LK"))
.insertRows();

List<EmployeeRecord> records = response.getRows().stream().map(EmployeeRecord::fromMap).toList();

openServerJavaScriptConsole();

MoveRowsCommand command = new MoveRowsCommand(SUBFOLDER_PATH, LIST_SCHEMA, LIST_NAME);
command.setRows(List.of(Map.of("Key", records.get(0).key)));
command.execute(createDefaultConnection(), getProjectName());
waitForConsole("init got triggered with event: move", "complete got triggered with event: move");

closeServerJavaScriptConsole();
}

/** Issue 52098 - ensure trigger scripts have a chance to do custom type conversion with the incoming row */
Expand Down Expand Up @@ -336,9 +372,10 @@ public void testListAPITriggerTypeConversion() throws Exception
Assert.assertEquals(26, updatedRow.get("Age"));
}

@Test
@Test
public void testListAPITriggers() throws Exception
{
cleanUpListRows();
String ssn1 = "111111112";
String ssn2 = "222211111";

Expand Down Expand Up @@ -408,8 +445,6 @@ public void testListAPITriggers() throws Exception
delCmd = new DeleteRowsCommand(LIST_SCHEMA, LIST_NAME);
delCmd.addRow(row3.toMap());
assertAPIErrorMessage(delCmd, BEFORE_DELETE_ERROR, cn);

cleanUpListRows();
}

/********************************
Expand Down Expand Up @@ -470,7 +505,7 @@ public void testDatasetImportTriggers()
@Test
public void testDatasetAPITriggers() throws Exception
{
doAPITriggerTest(STUDY_SCHEMA,DATASET_NAME,"ParticipantId", true);
doAPITriggerTest(STUDY_SCHEMA, DATASET_NAME, "ParticipantId", true);
}

/********************************
Expand All @@ -484,22 +519,14 @@ public void testDataClassIndividualTriggers() throws Exception
GoToDataUI goToDataClass = () -> goTo("Data Classes", DATA_CLASSES_NAME);

setupDataClass();
openServerJavaScriptConsole();

// Go to the log view to start capturing messages
new SiteNavBar(getDriver()).clickAdminMenuItem(false, "Developer Links", "Server JavaScript Console");
switchToWindow(1);
waitForText("Message");

switchToMainWindow();
doIndividualTriggerTest("query", goToDataClass, "Name", false, "Yes, Delete", false);

// Go back to the console window
switchToWindow(1);
waitForText("init got triggered with event: delete",
waitForConsole("init got triggered with event: delete",
"exp.data: this is from the shared function",
"complete got triggered with event: delete");
getDriver().close();
switchToMainWindow();
closeServerJavaScriptConsole();
}


Expand Down Expand Up @@ -728,7 +755,9 @@ private void assertAPIErrorMessage(BaseRowsCommand cmd, String expected, Connect
}
catch (CommandException e)
{
Assert.assertTrue("Trigger script error message was wrong", e.getMessage().contains(expected));
Assertions.assertThat(e.getMessage())
.as("Trigger script error should contain expected text")
.contains(expected);
}
}

Expand Down Expand Up @@ -834,7 +863,7 @@ private void goTo(String webPartName, String tableName)
/**
* Generate delimited string of keys from a map
*/
private String joinMapValues(Map<String,String> data, String delimiter )
private String joinMapValues(Map<String,String> data, String delimiter)
{
StringBuilder sb = new StringBuilder();
data.values().forEach(val -> sb.append(val).append(delimiter));
Expand All @@ -844,7 +873,7 @@ private String joinMapValues(Map<String,String> data, String delimiter )
/**
* Generate delimited string of keys from a map
*/
private String joinMapKeys(Map<String,String> data, String delimiter )
private String joinMapKeys(Map<String,String> data, String delimiter)
{
StringBuilder sb = new StringBuilder();
data.keySet().forEach(val -> sb.append(val).append(delimiter));
Expand Down Expand Up @@ -885,4 +914,27 @@ private void setupSampleType()
new FieldDefinition(COUNTRY_FIELD, ColumnType.String)));
SampleTypeAPIHelper.createEmptySampleType(getProjectName(), sampleType);
}

private void closeServerJavaScriptConsole()
{
switchToWindow(1);
getDriver().close();
switchToMainWindow();
}

private void openServerJavaScriptConsole()
{
// Go to the log view to start capturing messages
new SiteNavBar(getDriver()).clickAdminMenuItem(false, "Developer Links", "Server JavaScript Console");
switchToWindow(1);
waitForText("Message");
switchToMainWindow();
}

private void waitForConsole(String... text)
{
switchToWindow(1);
waitForText(text);
switchToMainWindow();
}
}
Loading