Skip to content

Commit 90e063c

Browse files
Extract TargetedMSHelper and add upgrade test for 26.3 schema migration (#1211)
* Extract TargetedMSHelper and add upgrade test for 26.3 schema migration Extracts setupFolder(), selectFolderType(), and importData() from TargetedMSTest into a new TargetedMSHelper class so the logic can be shared without subclassing. Adds TargetedMSUpgradeTest to verify the targetedms-26.006-26.007 migration correctly populates PeptideGroupCount, MoleculeGroupCount, and ProteinCount on existing runs. Co-Authored-By: Claude Sonnet 4.6 <[email protected]> * Split upgrade test into pre- and post-upgrade count checks testPreUpgradeCounts queries columns available in 25.11 (Peptides, SmallMolecules, Replicates) and runs on both setup and verify phases. testPostUpgradeCounts is gated with @EarliestVersion("26.3") and Assume.assumeFalse(isUpgradeSetupPhase) so it only runs on the new server after the 26.006-26.007 migration. Co-Authored-By: Claude Sonnet 4.6 <[email protected]> * Fix field names * Not ready for Java 25 yet * Fix annotations --------- Co-authored-by: Claude Sonnet 4.6 <[email protected]>
1 parent 73be48a commit 90e063c

3 files changed

Lines changed: 171 additions & 29 deletions

File tree

test/src/org/labkey/test/tests/targetedms/TargetedMSTest.java

Lines changed: 12 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.junit.BeforeClass;
2020
import org.labkey.test.BaseWebDriverTest;
2121
import org.labkey.test.Locator;
22+
import org.labkey.test.WebDriverWrapper;
2223
import org.labkey.test.ModulePropertyValue;
2324
import org.labkey.test.TestFileUtils;
2425
import org.labkey.test.TestProperties;
@@ -37,9 +38,8 @@
3738
import org.labkey.test.util.LoggedParam;
3839
import org.labkey.test.util.ReflectionUtils;
3940
import org.labkey.test.util.UIContainerHelper;
40-
import org.openqa.selenium.WebElement;
41+
import org.labkey.test.util.targetedms.TargetedMSHelper;
4142

42-
import java.nio.file.Paths;
4343
import java.util.Arrays;
4444
import java.util.List;
4545

@@ -62,6 +62,7 @@ public abstract class TargetedMSTest extends BaseWebDriverTest
6262
protected static final String SAMPLE_FILE_CHROM_INFO = "SampleFileChromInfo.sky.zip";
6363
protected static final String USER = "[email protected]";
6464
private static ConfiguresSite siteConfigurer;
65+
protected final TargetedMSHelper _targetedMSHelper = new TargetedMSHelper(this);
6566

6667
protected enum SvgShapes
6768
{
@@ -85,43 +86,43 @@ public enum FolderType {
8586
Experiment
8687
{
8788
@Override
88-
public void chooseFolderType(TargetedMSTest test)
89+
public void chooseFolderType(WebDriverWrapper test)
8990
{
9091
test.click(Locator.radioButtonById("experimentalData")); // click the first radio button - Experimental Data
9192
}
9293
},
9394
ExperimentMAM
9495
{
9596
@Override
96-
public void chooseFolderType(TargetedMSTest test)
97+
public void chooseFolderType(WebDriverWrapper test)
9798
{
9899
test.click(Locator.radioButtonById("multiAttributeMethod")); // click the second radio button - Experimental Data
99100
}
100101
}, Library
101102
{
102103
@Override
103-
public void chooseFolderType(TargetedMSTest test)
104+
public void chooseFolderType(WebDriverWrapper test)
104105
{
105106
test.click(Locator.radioButtonById("chromatogramLibrary")); // click the 3rd radio button - Library
106107
}
107108
}, LibraryProtein
108109
{
109110
@Override
110-
public void chooseFolderType(TargetedMSTest test)
111+
public void chooseFolderType(WebDriverWrapper test)
111112
{
112113
test.click(Locator.radioButtonById("chromatogramLibrary")); // click the 3rd radio button - Library
113114
test.click(Locator.checkboxByName("precursorNormalized")); // check the normalization checkbox.
114115
}
115116
}, QC
116117
{
117118
@Override
118-
public void chooseFolderType(TargetedMSTest test)
119+
public void chooseFolderType(WebDriverWrapper test)
119120
{
120121
test.click(Locator.radioButtonById("QC")); // click the 4th radio button - QC
121122
}
122123
};
123124

124-
public abstract void chooseFolderType(TargetedMSTest test);
125+
public abstract void chooseFolderType(WebDriverWrapper test);
125126
}
126127

127128
public TargetedMSTest()
@@ -181,10 +182,7 @@ protected void setupFolder(FolderType folderType)
181182

182183
protected void setUpFolder(String folderName, FolderType folderType )
183184
{
184-
_containerHelper.createProject(folderName, "Panorama");
185-
waitForElement(Locator.linkContainingText("Save"));
186-
clickAndWait(Locator.linkContainingText("Next"));
187-
selectFolderType(folderType);
185+
_targetedMSHelper.setupFolder(folderName, folderType);
188186
getSiteConfigurer().configureProject(getProjectName());
189187
}
190188

@@ -227,20 +225,7 @@ protected void importData(@LoggedParam String file, int jobCount, boolean expect
227225
@LogMethod
228226
protected void importData(@LoggedParam String file, int jobCount, boolean expectError, boolean doDbMaintenance)
229227
{
230-
Locator.XPathLocator importButtonLoc = Locator.lkButton("Process and Import Data");
231-
WebElement importButton = importButtonLoc.findElementOrNull(getDriver());
232-
if (null == importButton)
233-
{
234-
goToModule("Pipeline");
235-
importButton = importButtonLoc.findElement(getDriver());
236-
}
237-
clickAndWait(importButton);
238-
String fileName = Paths.get(file).getFileName().toString();
239-
if (!_fileBrowserHelper.fileIsPresent(fileName))
240-
_fileBrowserHelper.uploadFile(TestFileUtils.getSampleData("TargetedMS/" + file));
241-
_fileBrowserHelper.importFile(fileName, "Import Skyline Results");
242-
waitForText("Skyline document import");
243-
waitForPipelineJobsToComplete(jobCount, file, expectError);
228+
_targetedMSHelper.importData(file, jobCount, expectError);
244229

245230
if (doDbMaintenance)
246231
{
@@ -327,9 +312,7 @@ protected void verifyRunSummaryCounts(int proteinCount, int peptideCount, int mo
327312

328313
@LogMethod
329314
protected void selectFolderType(FolderType folderType) {
330-
log("Select Folder Type: " + folderType);
331-
folderType.chooseFolderType(this);
332-
clickButton("Finish");
315+
_targetedMSHelper.selectFolderType(folderType);
333316
}
334317

335318
/** Verify that the comparison plots have been AJAX'd into place */
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package org.labkey.test.tests.targetedms.upgrade;
2+
3+
import org.junit.Assume;
4+
import org.junit.Test;
5+
import org.junit.experimental.categories.Category;
6+
import org.labkey.remoteapi.query.SelectRowsCommand;
7+
import org.labkey.remoteapi.query.SelectRowsResponse;
8+
import org.labkey.test.tests.targetedms.TargetedMSTest.FolderType;
9+
import org.labkey.test.tests.upgrade.BaseUpgradeTest;
10+
import org.labkey.test.util.UIContainerHelper;
11+
import org.labkey.test.util.targetedms.TargetedMSHelper;
12+
13+
import java.util.List;
14+
import java.util.Map;
15+
16+
import static org.junit.Assert.assertEquals;
17+
18+
/**
19+
* Verifies that the targetedms-26.006-26.007 upgrade script correctly populates PeptideGroupCount,
20+
* MoleculeGroupCount, and ProteinCount on existing runs after the schema migration.
21+
*/
22+
@Category({})
23+
public class TargetedMSUpgradeTest extends BaseUpgradeTest
24+
{
25+
private static final String SKY_FILE = "smallmol_plus_peptides.sky.zip";
26+
27+
public TargetedMSUpgradeTest()
28+
{
29+
setContainerHelper(new UIContainerHelper(this));
30+
}
31+
32+
@Override
33+
protected String getProjectName()
34+
{
35+
return "TargetedMS Upgrade Test";
36+
}
37+
38+
@Override
39+
protected void doSetup() throws Exception
40+
{
41+
TargetedMSHelper helper = new TargetedMSHelper(this);
42+
helper.setupFolder(getProjectName(), FolderType.Experiment);
43+
helper.importData(SKY_FILE);
44+
}
45+
46+
@Test
47+
@EarliestVersion("25.11")
48+
public void testPreUpgradeCounts() throws Exception
49+
{
50+
SelectRowsCommand cmd = new SelectRowsCommand("targetedms", "Runs");
51+
cmd.setColumns(List.of("PeptideCount", "SmallMoleculeCount", "ReplicateCount"));
52+
SelectRowsResponse response = cmd.execute(createDefaultConnection(), getProjectName());
53+
54+
List<Map<String, Object>> rows = response.getRows();
55+
assertEquals("Expected exactly one run", 1, rows.size());
56+
Map<String, Object> run = rows.get(0);
57+
assertEquals("PeptideCount", 44, ((Number) run.get("PeptideCount")).intValue());
58+
assertEquals("SmallMoleculeCount", 98, ((Number) run.get("SmallMoleculeCount")).intValue());
59+
assertEquals("ReplicateCount", 5, ((Number) run.get("ReplicateCount")).intValue());
60+
}
61+
62+
@Test
63+
@EarliestVersion("26.3")
64+
public void testPostUpgradeCounts() throws Exception
65+
{
66+
Assume.assumeFalse("Skipping post-upgrade count checks during setup phase", isUpgradeSetupPhase);
67+
68+
SelectRowsCommand cmd = new SelectRowsCommand("targetedms", "Runs");
69+
cmd.setColumns(List.of("PeptideGroupCount", "MoleculeGroupCount", "ProteinCount"));
70+
SelectRowsResponse response = cmd.execute(createDefaultConnection(), getProjectName());
71+
72+
List<Map<String, Object>> rows = response.getRows();
73+
assertEquals("Expected exactly one run", 1, rows.size());
74+
Map<String, Object> run = rows.get(0);
75+
assertEquals("PeptideGroupCount", 24, ((Number) run.get("PeptideGroupCount")).intValue());
76+
assertEquals("MoleculeGroupCount", 3, ((Number) run.get("MoleculeGroupCount")).intValue());
77+
assertEquals("ProteinCount", 24, ((Number) run.get("ProteinCount")).intValue());
78+
}
79+
80+
@Override
81+
protected void doCleanup(boolean afterTest)
82+
{
83+
_containerHelper.deleteProject(getProjectName(), afterTest);
84+
}
85+
86+
@Override
87+
public List<String> getAssociatedModules()
88+
{
89+
return List.of("targetedms");
90+
}
91+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package org.labkey.test.util.targetedms;
2+
3+
import org.labkey.test.BaseWebDriverTest;
4+
import org.labkey.test.Locator;
5+
import org.labkey.test.TestFileUtils;
6+
import org.labkey.test.tests.targetedms.TargetedMSTest.FolderType;
7+
import org.labkey.test.util.LogMethod;
8+
import org.labkey.test.util.LoggedParam;
9+
import org.openqa.selenium.WebElement;
10+
11+
import java.nio.file.Paths;
12+
13+
/** Setup and import utilities to share between standard and upgrade tests for TargetedMS */
14+
public class TargetedMSHelper
15+
{
16+
private final BaseWebDriverTest _test;
17+
18+
public TargetedMSHelper(BaseWebDriverTest test)
19+
{
20+
_test = test;
21+
}
22+
23+
public void setupFolder(String projectName, FolderType folderType)
24+
{
25+
_test._containerHelper.createProject(projectName, "Panorama");
26+
_test.waitForElement(Locator.linkContainingText("Save"));
27+
_test.clickAndWait(Locator.linkContainingText("Next"));
28+
selectFolderType(folderType);
29+
}
30+
31+
@LogMethod
32+
public void selectFolderType(@LoggedParam FolderType folderType)
33+
{
34+
_test.log("Select Folder Type: " + folderType);
35+
folderType.chooseFolderType(_test);
36+
_test.clickButton("Finish");
37+
}
38+
39+
public void importData(String file)
40+
{
41+
importData(file, 1);
42+
}
43+
44+
@LogMethod
45+
public void importData(@LoggedParam String file, int jobCount)
46+
{
47+
importData(file, jobCount, false);
48+
}
49+
50+
@LogMethod
51+
public void importData(@LoggedParam String file, int jobCount, boolean expectError)
52+
{
53+
Locator.XPathLocator importButtonLoc = Locator.lkButton("Process and Import Data");
54+
WebElement importButton = importButtonLoc.findElementOrNull(_test.getDriver());
55+
if (null == importButton)
56+
{
57+
_test.goToModule("Pipeline");
58+
importButton = importButtonLoc.findElement(_test.getDriver());
59+
}
60+
_test.clickAndWait(importButton);
61+
String fileName = Paths.get(file).getFileName().toString();
62+
if (!_test._fileBrowserHelper.fileIsPresent(fileName))
63+
_test._fileBrowserHelper.uploadFile(TestFileUtils.getSampleData("TargetedMS/" + file));
64+
_test._fileBrowserHelper.importFile(fileName, "Import Skyline Results");
65+
_test.waitForText("Skyline document import");
66+
_test.waitForPipelineJobsToComplete(jobCount, file, expectError);
67+
}
68+
}

0 commit comments

Comments
 (0)