@@ -142,6 +142,21 @@ async function deleteStage(
142
142
await browser . clickVisible ( Selectors . StageDelete ) ;
143
143
}
144
144
145
+ function getStageContainers ( browser : CompassBrowser ) {
146
+ return browser . $$ ( Selectors . StageCard ) ;
147
+ }
148
+
149
+ async function addStage ( browser : CompassBrowser , expectedStages : number ) {
150
+ expect ( await getStageContainers ( browser ) ) . to . have . lengthOf (
151
+ expectedStages - 1
152
+ ) ;
153
+
154
+ await browser . clickVisible ( Selectors . AddStageButton ) ;
155
+ await browser . $ ( Selectors . stageEditor ( expectedStages - 1 ) ) . waitForDisplayed ( ) ;
156
+
157
+ expect ( await getStageContainers ( browser ) ) . to . have . lengthOf ( expectedStages ) ;
158
+ }
159
+
145
160
describe ( 'Collection aggregations tab' , function ( ) {
146
161
let compass : Compass ;
147
162
let browser : CompassBrowser ;
@@ -165,11 +180,10 @@ describe('Collection aggregations tab', function () {
165
180
// Pipeline flow while at it.
166
181
await browser . clickVisible ( Selectors . CreateNewPipelineButton ) ;
167
182
168
- await browser . clickVisible ( Selectors . AddStageButton ) ;
169
- await browser . $ ( Selectors . stageEditor ( 0 ) ) . waitForDisplayed ( ) ;
170
- // sanity check to make sure there's only one stage
171
- const stageContainers = await browser . $$ ( Selectors . StageCard ) ;
172
- expect ( stageContainers ) . to . have . lengthOf ( 1 ) ;
183
+ // This is kinda superfluous for the nested beforeEach hooks below where we
184
+ // immediately navigate away anyway, but most tests expect there to already
185
+ // be one stage.
186
+ await addStage ( browser , 1 ) ;
173
187
} ) ;
174
188
175
189
after ( async function ( ) {
@@ -358,14 +372,14 @@ describe('Collection aggregations tab', function () {
358
372
await browser . clickVisible ( Selectors . AggregationSettingsApplyButton ) ;
359
373
360
374
// add a $project
361
- await browser . clickVisible ( Selectors . AddStageButton ) ;
375
+ await addStage ( browser , 2 ) ;
362
376
await browser . selectStageOperator ( 1 , '$project' ) ;
363
377
364
378
// delete it
365
379
await deleteStage ( browser , 1 ) ;
366
380
367
381
// add a $project
368
- await browser . clickVisible ( Selectors . AddStageButton ) ;
382
+ await addStage ( browser , 2 ) ;
369
383
await browser . selectStageOperator ( 1 , '$project' ) ;
370
384
371
385
// check that it has no comment
@@ -603,7 +617,7 @@ describe('Collection aggregations tab', function () {
603
617
604
618
await waitForAnyText ( browser , await browser . $ ( Selectors . stageContent ( 0 ) ) ) ;
605
619
606
- await browser . clickVisible ( Selectors . AddStageButton ) ;
620
+ await addStage ( browser , 2 ) ;
607
621
608
622
await browser . focusStageOperator ( 1 ) ;
609
623
await browser . selectStageOperator ( 1 , '$match' ) ;
@@ -667,7 +681,7 @@ describe('Collection aggregations tab', function () {
667
681
668
682
await waitForAnyText ( browser , await browser . $ ( Selectors . stageContent ( 0 ) ) ) ;
669
683
670
- await browser . clickVisible ( Selectors . AddStageButton ) ;
684
+ await addStage ( browser , 2 ) ;
671
685
672
686
await browser . focusStageOperator ( 1 ) ;
673
687
await browser . selectStageOperator ( 1 , '$match' ) ;
@@ -1033,8 +1047,6 @@ describe('Collection aggregations tab', function () {
1033
1047
} ) ;
1034
1048
1035
1049
it ( 'shows confirmation modal when create new pipeline is clicked and aggregation is modified' , async function ( ) {
1036
- await browser . clickVisible ( Selectors . AddStageButton ) ;
1037
- await browser . $ ( Selectors . stageEditor ( 0 ) ) . waitForDisplayed ( ) ;
1038
1050
await browser . selectStageOperator ( 0 , '$match' ) ;
1039
1051
1040
1052
await browser . clickVisible ( Selectors . CreateNewPipelineButton ) ;
@@ -1271,8 +1283,7 @@ describe('Collection aggregations tab', function () {
1271
1283
} ) ;
1272
1284
1273
1285
it ( 'opens an aggregation with confirmation when its modified' , async function ( ) {
1274
- await browser . clickVisible ( Selectors . AddStageButton ) ;
1275
- await browser . $ ( Selectors . stageEditor ( 0 ) ) . waitForDisplayed ( ) ;
1286
+ await addStage ( browser , 1 ) ;
1276
1287
await browser . selectStageOperator ( 0 , '$match' ) ;
1277
1288
1278
1289
await browser . waitForAnimations (
@@ -1621,13 +1632,12 @@ describe('Collection aggregations tab', function () {
1621
1632
'nestedDocs' ,
1622
1633
'Aggregations'
1623
1634
) ;
1635
+
1636
+ await addStage ( browser , 1 ) ;
1624
1637
} ) ;
1625
1638
1626
1639
context ( 'when on stage builder mode' , function ( ) {
1627
1640
it ( 'should expand/collapse all the docs for a stage when "Expand documents" / "Collapse documents" menu option is clicked' , async function ( ) {
1628
- await browser . clickVisible ( Selectors . AddStageButton ) ;
1629
- await browser . $ ( Selectors . stageEditor ( 0 ) ) . waitForDisplayed ( ) ;
1630
-
1631
1641
await browser . selectStageOperator ( 0 , '$match' ) ;
1632
1642
await browser . setCodemirrorEditorValue (
1633
1643
Selectors . stageEditor ( 0 ) ,
@@ -1663,9 +1673,6 @@ describe('Collection aggregations tab', function () {
1663
1673
} ) ;
1664
1674
1665
1675
it ( 'should retain the docs expanded / collapsed state even after switching tabs' , async function ( ) {
1666
- await browser . clickVisible ( Selectors . AddStageButton ) ;
1667
- await browser . $ ( Selectors . stageEditor ( 0 ) ) . waitForDisplayed ( ) ;
1668
-
1669
1676
await browser . selectStageOperator ( 0 , '$match' ) ;
1670
1677
await browser . setCodemirrorEditorValue (
1671
1678
Selectors . stageEditor ( 0 ) ,
@@ -1744,16 +1751,14 @@ describe('Collection aggregations tab', function () {
1744
1751
1745
1752
context ( 'when in focus mode' , function ( ) {
1746
1753
beforeEach ( async function ( ) {
1747
- await browser . clickVisible ( Selectors . AddStageButton ) ;
1748
1754
await browser . $ ( Selectors . stageEditor ( 0 ) ) . waitForDisplayed ( ) ;
1749
1755
await browser . selectStageOperator ( 0 , '$match' ) ;
1750
1756
await browser . setCodemirrorEditorValue (
1751
1757
Selectors . stageEditor ( 0 ) ,
1752
1758
'{ "names.firstName": "1-firstName" }'
1753
1759
) ;
1754
1760
1755
- await browser . clickVisible ( Selectors . AddStageButton ) ;
1756
- await browser . $ ( Selectors . stageEditor ( 1 ) ) . waitForDisplayed ( ) ;
1761
+ await addStage ( browser , 2 ) ;
1757
1762
await browser . selectStageOperator ( 1 , '$limit' ) ;
1758
1763
await browser . setCodemirrorEditorValue ( Selectors . stageEditor ( 1 ) , '1' ) ;
1759
1764
@@ -1820,8 +1825,7 @@ describe('Collection aggregations tab', function () {
1820
1825
1821
1826
context ( 'when on pipeline results' , function ( ) {
1822
1827
beforeEach ( async function ( ) {
1823
- await browser . clickVisible ( Selectors . AddStageButton ) ;
1824
- await browser . $ ( Selectors . stageEditor ( 0 ) ) . waitForDisplayed ( ) ;
1828
+ expect ( await getStageContainers ( browser ) ) . to . have . lengthOf ( 1 ) ;
1825
1829
1826
1830
await browser . selectStageOperator ( 0 , '$match' ) ;
1827
1831
await browser . setCodemirrorEditorValue (
0 commit comments