Skip to content

Commit e2c6dc7

Browse files
committed
Merge remote-tracking branch 'origin/develop' into fb_editableGridNeedsAutomation
2 parents 1c74fd9 + a56522e commit e2c6dc7

7 files changed

Lines changed: 141 additions & 91 deletions

File tree

src/org/labkey/test/WebDriverWrapper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -542,7 +542,7 @@ public <T> T executeScript(@Language("JavaScript") String script, Class<T> expec
542542
* Wrapper for synchronous execution of asynchronous JavaScript. This wrapper extracts the 'callback' from the argument list
543543
* See {@link JavascriptExecutor#executeAsyncScript(java.lang.String, java.lang.Object...)} for details
544544
*/
545-
public Object executeAsyncScript(@Language("XPath") String script, Object... arguments)
545+
public Object executeAsyncScript(@Language("JavaScript") String script, Object... arguments)
546546
{
547547
script = "var callback = arguments[arguments.length - 1];\n" + // See WebDriver documentation for details on injected callback
548548
"try {" +
@@ -551,7 +551,7 @@ public Object executeAsyncScript(@Language("XPath") String script, Object... arg
551551
return ((JavascriptExecutor) getDriver()).executeAsyncScript(script, arguments);
552552
}
553553

554-
public <T> T executeAsyncScript(String script, Class<T> expectedResultType, Object... arguments)
554+
public <T> T executeAsyncScript(@Language("JavaScript") String script, Class<T> expectedResultType, Object... arguments)
555555
{
556556
Object o = executeAsyncScript(script, arguments);
557557
if (o != null && !expectedResultType.isAssignableFrom(o.getClass()))

src/org/labkey/test/components/domain/DomainFormPanel.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.util.stream.Collectors;
2828

2929
import static org.labkey.test.WebDriverWrapper.WAIT_FOR_JAVASCRIPT;
30+
import static org.labkey.test.WebDriverWrapper.waitFor;
3031

3132
/**
3233
* Automates the LabKey ui component defined in: packages/components/src/components/domainproperties/DomainForm.tsx
@@ -43,6 +44,12 @@ private DomainFormPanel(WebElement element, WebDriver driver)
4344
super(element, driver);
4445
}
4546

47+
@Override
48+
protected void waitForReady()
49+
{
50+
waitFor(() -> !BootstrapLocators.loadingSpinner.existsIn(this), "Loading spinner still present", 2_000);
51+
}
52+
4653
public static List<AdvancedFieldSetting> advancedSettingsFromFieldDefinition(FieldDefinition def)
4754
{
4855
List<AdvancedFieldSetting> advancedSettings = new ArrayList<>();
@@ -256,8 +263,8 @@ else if (validator instanceof FieldDefinition.TextChoiceValidator textChoiceVali
256263
*/
257264
public DomainFormPanel clickManuallyDefineFields()
258265
{
259-
getWrapper().scrollIntoView(elementCache().manuallyDefineButton, true);
260266
getWrapper().shortWait().until(ExpectedConditions.elementToBeClickable(elementCache().manuallyDefineButton)); // give modal dialogs time to disappear
267+
getWrapper().scrollIntoView(elementCache().manuallyDefineButton, true);
261268
elementCache().manuallyDefineButton.click();
262269

263270
return this;

src/org/labkey/test/components/ui/grids/ResponsiveGrid.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,24 @@ public List<String> getColumnLabels()
642642
return elementCache().getColumnLabels();
643643
}
644644

645+
/**
646+
*
647+
* @return a List&#60;String&#62; containing the names of the fields for each column header
648+
*/
649+
public List<String> getColumnNames()
650+
{
651+
return elementCache().getColumnNames();
652+
}
653+
654+
/**
655+
*
656+
* @return a List&#60;FieldKey&#62; containing the fieldKeys for each column header
657+
*/
658+
public List<FieldKey> getColumnFieldKeys()
659+
{
660+
return elementCache().getColumnFieldKeys();
661+
}
662+
645663
/**
646664
* Get data from a row
647665
* @param rowIndex the index of the desired row
@@ -773,7 +791,7 @@ public Optional<String> getGridEmptyMessage()
773791
return msg;
774792
}
775793

776-
List<FieldReference> getHeaders()
794+
public List<FieldReference> getHeaders()
777795
{
778796
return Collections.unmodifiableList(elementCache().findHeaders());
779797
}
@@ -861,6 +879,16 @@ protected List<String> getColumnLabels()
861879
return findHeaders().stream().map(FieldReferenceManager.FieldReference::getLabel).collect(Collectors.toList());
862880
}
863881

882+
protected List<String> getColumnNames()
883+
{
884+
return findHeaders().stream().map(FieldReferenceManager.FieldReference::getName).collect(Collectors.toList());
885+
}
886+
887+
protected List<FieldKey> getColumnFieldKeys()
888+
{
889+
return findHeaders().stream().map(FieldReferenceManager.FieldReference::getFieldKey).collect(Collectors.toList());
890+
}
891+
864892
protected GridRow getRow(int index)
865893
{
866894
return getRows().get(index);

src/org/labkey/test/tests/AdminConsoleNavigationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ private void doSetup()
5555
_apiPermissionsHelper.addMemberToRole(TROUBLESHOOTER, "Troubleshooter", PermissionsHelper.MemberType.user, "/");
5656

5757
_userHelper.createUser(NON_ADMIN);
58-
_apiPermissionsHelper.setUserPermissions(NON_ADMIN, "Reader");
5958
}
6059

6160
@Override
@@ -76,6 +75,7 @@ public void testAdminNavTrails()
7675
"Memory Usage", // Slow to load
7776
"View All Site Errors", // No nav trail
7877
"View All Site Errors Since Reset", // No nav trail
78+
"View CSP Report Log File", // No nav trail
7979
"View Primary Site Log File" // No nav trail
8080
));
8181
List<WebElement> adminLinks = ShowAdminPage.beginAt(this).getAllAdminConsoleLinks();

src/org/labkey/test/tests/DomainFieldTypeChangeTest.java

Lines changed: 51 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
import org.labkey.test.components.DomainDesignerPage;
1515
import org.labkey.test.components.domain.DomainFormPanel;
1616
import org.labkey.test.pages.ReactAssayDesignerPage;
17+
import org.labkey.test.pages.query.UpdateQueryRowPage;
1718
import org.labkey.test.params.FieldDefinition;
19+
import org.labkey.test.params.FieldInfo;
1820
import org.labkey.test.util.APIAssayHelper;
1921
import org.labkey.test.util.DataRegionTable;
2022
import org.labkey.test.util.PortalHelper;
@@ -58,76 +60,89 @@ public void preTest() throws Exception
5860
@Test
5961
public void testProvisionedDomainFieldChanges() throws IOException, CommandException
6062
{
61-
String listName = "SampleListWithAllDataTypes";
62-
6363
log("Creating list with variety of data fields");
64+
String listName = TestDataGenerator.randomDomainName("SampleListWithAllDataTypes");
65+
FieldInfo stringField = new FieldInfo(TestDataGenerator.randomFieldName("name"), FieldDefinition.ColumnType.String);
66+
FieldInfo integerField = new FieldInfo(TestDataGenerator.randomFieldName("Test/Integer"), FieldDefinition.ColumnType.Integer);
67+
FieldInfo decimalField = new FieldInfo(TestDataGenerator.randomFieldName("Test/Decimal"), FieldDefinition.ColumnType.Decimal);
68+
FieldInfo dateField = new FieldInfo(TestDataGenerator.randomFieldName("Test/Date"), FieldDefinition.ColumnType.DateAndTime);
69+
FieldInfo booleanField = new FieldInfo(TestDataGenerator.randomFieldName("Test'/\"Boolean"), FieldDefinition.ColumnType.Boolean); // GH Issue #755
6470
TestDataGenerator dgen = new TestDataGenerator("lists", listName, getProjectName())
6571
.withColumns(List.of(
66-
new FieldDefinition("name", FieldDefinition.ColumnType.String),
67-
new FieldDefinition("testInteger", FieldDefinition.ColumnType.Integer),
68-
new FieldDefinition("testDecimal", FieldDefinition.ColumnType.Decimal),
69-
new FieldDefinition("testDate", FieldDefinition.ColumnType.DateAndTime),
70-
new FieldDefinition("testBoolean", FieldDefinition.ColumnType.Boolean)));
72+
stringField.getFieldDefinition(),
73+
integerField.getFieldDefinition(),
74+
decimalField.getFieldDefinition(),
75+
dateField.getFieldDefinition(),
76+
booleanField.getFieldDefinition()));
7177
dgen.createDomain(createDefaultConnection(), "IntList", Map.of("keyName", "id"));
7278

7379
log("Inserting sample rows in the list");
74-
dgen.addCustomRow(Map.of("name", "first", "testInteger", "1",
75-
"testDecimal", "1.10", "testDate", "01-01-2022",
76-
"testBoolean", "true"));
77-
dgen.addCustomRow(Map.of("name", "Second", "testInteger", "2",
78-
"testDecimal", "2.20", "testDate", "01-02-2022",
79-
"testBoolean", "false"));
80-
dgen.addCustomRow(Map.of("name", "Third", "testInteger", "3",
81-
"testDecimal", "3.30", "testDate", "01-03-2022",
82-
"testBoolean", "true"));
80+
dgen.addCustomRow(Map.of(
81+
stringField.getName(), "first",
82+
integerField.getName(), "1",
83+
decimalField.getName(), "1.10",
84+
dateField.getName(), "01-01-2022",
85+
booleanField.getName(), "true"));
86+
dgen.addCustomRow(Map.of(
87+
stringField.getName(), "Second",
88+
integerField.getName(), "2",
89+
decimalField.getName(), "2.20",
90+
dateField.getName(), "01-02-2022",
91+
booleanField.getName(), "false"));
92+
dgen.addCustomRow(Map.of(
93+
stringField.getName(), "Third",
94+
integerField.getName(), "3",
95+
decimalField.getName(), "3.30",
96+
dateField.getName(), "01-03-2022",
97+
booleanField.getName(), "true"));
8398
dgen.insertRows(createDefaultConnection(), dgen.getRows());
8499

85100
log("Verifying Integer to Decimal change");
86101
DomainDesignerPage domainDesignerPage = DomainDesignerPage.beginAt(this, getProjectName(), "lists", listName);
87102
DomainFormPanel domainFormPanel = domainDesignerPage.fieldsPanel();
88-
domainFormPanel.getField("testInteger").setType(FieldDefinition.ColumnType.Decimal, true);
89-
domainFormPanel.getField("testBoolean").setNumberFormat("yes;no");
103+
domainFormPanel.getField(integerField.getName()).setType(FieldDefinition.ColumnType.Decimal, true);
104+
domainFormPanel.getField(booleanField.getName()).setNumberFormat("yes;no");
90105
domainDesignerPage.clickFinish();
91106

92107
clickAndWait(Locator.linkWithText(listName));
93108
DataRegionTable table = new DataRegionTable("query", getDriver());
94109
checker().verifyEquals("Incorrect values after changing integer to decimal", Arrays.asList("1.0", "2.0", "3.0"),
95-
table.getColumnDataAsText("testInteger"));
110+
table.getColumnDataAsText(integerField.getLabel()));
96111

97112
log("Verifying changing data fields to string");
98113
domainDesignerPage = DomainDesignerPage.beginAt(this, getProjectName(), "lists", listName);
99114
domainFormPanel = domainDesignerPage.fieldsPanel();
100-
domainFormPanel.getField("testInteger").setType(FieldDefinition.ColumnType.String, true);
101-
domainFormPanel.getField("testDecimal").setType(FieldDefinition.ColumnType.String, true);
102-
domainFormPanel.getField("testDate").setType(FieldDefinition.ColumnType.String, true);
103-
domainFormPanel.getField("testBoolean").setType(FieldDefinition.ColumnType.String, true);
115+
domainFormPanel.getField(integerField.getName()).setType(FieldDefinition.ColumnType.String, true);
116+
domainFormPanel.getField(decimalField.getName()).setType(FieldDefinition.ColumnType.String, true);
117+
domainFormPanel.getField(dateField.getName()).setType(FieldDefinition.ColumnType.String, true);
118+
domainFormPanel.getField(booleanField.getName()).setType(FieldDefinition.ColumnType.String, true); // GH Issue #755
104119
domainDesignerPage.clickFinish();
105120

106121
clickAndWait(Locator.linkWithText(listName));
107122
table = new DataRegionTable("query", getDriver());
108123
log("Verifying inserting string values");
109-
table.clickInsertNewRow();
110-
setFormElement(Locator.name("quf_name"), "Fourth");
111-
setFormElement(Locator.name("quf_testInteger"), "New1");
112-
setFormElement(Locator.name("quf_testDecimal"), "New1.1");
113-
setFormElement(Locator.name("quf_testDate"), "New01-02-2022");
114-
setFormElement(Locator.name("quf_testBoolean"), "NewTrue");
124+
UpdateQueryRowPage updateQueryRowPage = table.clickInsertNewRow();
125+
updateQueryRowPage.setField(stringField.getName(), "Fourth");
126+
updateQueryRowPage.setField(integerField.getName(), "New1");
127+
updateQueryRowPage.setField(decimalField.getName(), "New1.1");
128+
updateQueryRowPage.setField(dateField.getName(), "New01-02-2022");
129+
updateQueryRowPage.setField(booleanField.getName(), "NewTrue");
115130
clickButton("Submit");
116-
table.clickEditRow(0);
117-
setFormElement(Locator.name("quf_testInteger"), "Edited1");
131+
updateQueryRowPage = table.clickEditRow(0);
132+
updateQueryRowPage.setField(integerField.getName(), "Edited1");
118133
clickButton("Submit");
119134
checker().verifyEquals("Incorrect values after changing integer to string", Arrays.asList("Edited1", "2", "3", "New1"),
120-
table.getColumnDataAsText("testInteger"));
135+
table.getColumnDataAsText(integerField.getName()));
121136
checker().verifyEquals("Incorrect values after changing decimal to string", Arrays.asList("1.1", "2.2", "3.3", "New1.1"),
122-
table.getColumnDataAsText("testDecimal"));
137+
table.getColumnDataAsText(decimalField.getName()));
123138
checker().verifyEquals("Incorrect values after changing boolean to string", Arrays.asList("yes", "no", "yes", "NewTrue"),
124-
table.getColumnDataAsText("testBoolean"));
139+
table.getColumnDataAsText(booleanField.getName()));
125140
if (WebTestHelper.getDatabaseType() == WebTestHelper.DatabaseType.MicrosoftSQLServer)
126141
checker().verifyEquals("Incorrect values after changing date to string", Arrays.asList("Jan 1 2022 12:00AM", "Jan 2 2022 12:00AM", "Jan 3 2022 12:00AM", "New01-02-2022"),
127-
table.getColumnDataAsText("testDate"));
142+
table.getColumnDataAsText(dateField.getName()));
128143
else
129144
checker().verifyEquals("Incorrect values after changing date to string", Arrays.asList("2022-01-01 00:00:00", "2022-01-02 00:00:00", "2022-01-03 00:00:00", "New01-02-2022"),
130-
table.getColumnDataAsText("testDate"));
145+
table.getColumnDataAsText(dateField.getName()));
131146
}
132147

133148
@Test

0 commit comments

Comments
 (0)