@@ -1088,6 +1088,61 @@ describe(`cucumber@${version} commonJS`, () => {
10881088 } ) . catch ( done )
10891089 } )
10901090 } )
1091+
1092+ onlyLatestIt ( 'can skip suites in parallel mode' , async ( ) => {
1093+ receiver . setSuitesToSkip ( [ {
1094+ type : 'suite' ,
1095+ attributes : {
1096+ suite : `${ featuresPath } farewell.feature` ,
1097+ } ,
1098+ } ] )
1099+
1100+ const eventsPromise = receiver
1101+ . gatherPayloadsMaxTimeout ( ( { url } ) => url . endsWith ( '/api/v2/citestcycle' ) , ( payloads ) => {
1102+ const events = payloads . flatMap ( ( { payload } ) => payload . events )
1103+ const testSession = events . find ( event => event . type === 'test_session_end' ) . content
1104+ assert . strictEqual ( testSession . meta [ CUCUMBER_IS_PARALLEL ] , 'true' )
1105+ assert . strictEqual ( testSession . meta [ TEST_ITR_SKIPPING_ENABLED ] , 'true' )
1106+ assert . strictEqual ( testSession . meta [ TEST_ITR_TESTS_SKIPPED ] , 'true' )
1107+ assert . strictEqual ( testSession . meta [ TEST_ITR_SKIPPING_TYPE ] , 'suite' )
1108+ assert . strictEqual ( testSession . metrics [ TEST_ITR_SKIPPING_COUNT ] , 1 )
1109+
1110+ const suites = events . filter ( event => event . type === 'test_suite_end' ) . map ( event => event . content )
1111+ assert . strictEqual ( suites . length , 2 )
1112+
1113+ const skippedSuite = suites . find ( s =>
1114+ s . resource === `test_suite.${ featuresPath } farewell.feature`
1115+ )
1116+ assert . strictEqual ( skippedSuite . meta [ TEST_STATUS ] , 'skip' )
1117+ assert . strictEqual ( skippedSuite . meta [ TEST_SKIPPED_BY_ITR ] , 'true' )
1118+
1119+ // greetings.feature ran (not skipped)
1120+ const runningSuite = suites . find ( s =>
1121+ s . resource === `test_suite.${ featuresPath } greetings.feature`
1122+ )
1123+ assert . ok ( runningSuite )
1124+ assert . ok ( ! ( TEST_SKIPPED_BY_ITR in runningSuite . meta ) )
1125+
1126+ // Only tests from the non-skipped suite ran
1127+ const tests = events . filter ( event => event . type === 'test' ) . map ( event => event . content )
1128+ assert . ok ( tests . length > 0 )
1129+ tests . forEach ( test => {
1130+ assert . ok ( ! test . meta [ TEST_SUITE ] . includes ( 'farewell' ) )
1131+ } )
1132+ } )
1133+
1134+ childProcess = exec (
1135+ parallelModeCommand ,
1136+ {
1137+ cwd,
1138+ env : getCiVisAgentlessConfig ( receiver . port ) ,
1139+ }
1140+ )
1141+ await Promise . all ( [
1142+ eventsPromise ,
1143+ once ( childProcess , 'exit' ) ,
1144+ ] )
1145+ } )
10911146 } )
10921147
10931148 context ( 'early flake detection' , ( ) => {
@@ -2833,6 +2888,119 @@ describe(`cucumber@${version} commonJS`, () => {
28332888 ] )
28342889 assert . match ( testOutput , / T e s t m a n a g e m e n t t e s t s c o u l d n o t b e f e t c h e d / )
28352890 } )
2891+
2892+ onlyLatestIt ( 'can disable tests in parallel mode' , async ( ) => {
2893+ receiver . setSettings ( { test_management : { enabled : true } } )
2894+ receiver . setTestManagementTests ( {
2895+ cucumber : {
2896+ suites : {
2897+ 'ci-visibility/features-test-management-parallel/disabled.feature' : {
2898+ tests : {
2899+ 'Say disabled parallel' : {
2900+ properties : { disabled : true } ,
2901+ } ,
2902+ } ,
2903+ } ,
2904+ } ,
2905+ } ,
2906+ } )
2907+
2908+ const eventsPromise = receiver
2909+ . gatherPayloadsMaxTimeout ( ( { url } ) => url . endsWith ( '/api/v2/citestcycle' ) , ( payloads ) => {
2910+ const events = payloads . flatMap ( ( { payload } ) => payload . events )
2911+ const testSession = events . find ( event => event . type === 'test_session_end' ) . content
2912+ assert . strictEqual ( testSession . meta [ CUCUMBER_IS_PARALLEL ] , 'true' )
2913+ assert . strictEqual ( testSession . meta [ TEST_MANAGEMENT_ENABLED ] , 'true' )
2914+ assert . strictEqual ( testSession . meta [ TEST_STATUS ] , 'pass' )
2915+
2916+ const tests = events . filter ( event => event . type === 'test' ) . map ( event => event . content )
2917+ assert . strictEqual ( tests . length , 2 )
2918+
2919+ const disabledTest = tests . find ( t => t . meta [ TEST_NAME ] === 'Say disabled parallel' )
2920+ assert . strictEqual ( disabledTest . meta [ TEST_STATUS ] , 'skip' )
2921+ assert . strictEqual ( disabledTest . meta [ TEST_MANAGEMENT_IS_DISABLED ] , 'true' )
2922+
2923+ const passingTest = tests . find ( t => t . meta [ TEST_NAME ] === 'Say passing parallel' )
2924+ assert . strictEqual ( passingTest . meta [ TEST_STATUS ] , 'pass' )
2925+ } )
2926+
2927+ let exitCode
2928+ childProcess = exec (
2929+ './node_modules/.bin/cucumber-js' +
2930+ ' ci-visibility/features-test-management-parallel/disabled.feature' +
2931+ ' ci-visibility/features-test-management-parallel/passing.feature' +
2932+ ' --parallel 2' ,
2933+ {
2934+ cwd,
2935+ env : getCiVisAgentlessConfig ( receiver . port ) ,
2936+ }
2937+ )
2938+
2939+ childProcess . on ( 'exit' , ( code ) => { exitCode = code } )
2940+
2941+ await Promise . all ( [
2942+ eventsPromise ,
2943+ once ( childProcess , 'exit' ) ,
2944+ ] )
2945+
2946+ assert . strictEqual ( exitCode , 0 )
2947+ } )
2948+
2949+ onlyLatestIt ( 'can quarantine tests in parallel mode' , async ( ) => {
2950+ receiver . setSettings ( { test_management : { enabled : true } } )
2951+ receiver . setTestManagementTests ( {
2952+ cucumber : {
2953+ suites : {
2954+ 'ci-visibility/features-test-management-parallel/quarantine.feature' : {
2955+ tests : {
2956+ 'Say quarantine parallel' : {
2957+ properties : { quarantined : true } ,
2958+ } ,
2959+ } ,
2960+ } ,
2961+ } ,
2962+ } ,
2963+ } )
2964+
2965+ let exitCode
2966+ const eventsPromise = receiver
2967+ . gatherPayloadsMaxTimeout ( ( { url } ) => url . endsWith ( '/api/v2/citestcycle' ) , ( payloads ) => {
2968+ const events = payloads . flatMap ( ( { payload } ) => payload . events )
2969+ const testSession = events . find ( event => event . type === 'test_session_end' ) . content
2970+ assert . strictEqual ( testSession . meta [ CUCUMBER_IS_PARALLEL ] , 'true' )
2971+ assert . strictEqual ( testSession . meta [ TEST_MANAGEMENT_ENABLED ] , 'true' )
2972+ assert . strictEqual ( testSession . meta [ TEST_STATUS ] , 'pass' )
2973+
2974+ const tests = events . filter ( event => event . type === 'test' ) . map ( event => event . content )
2975+ assert . strictEqual ( tests . length , 2 )
2976+
2977+ const quarantinedTest = tests . find ( t => t . meta [ TEST_NAME ] === 'Say quarantine parallel' )
2978+ assert . strictEqual ( quarantinedTest . meta [ TEST_STATUS ] , 'fail' )
2979+ assert . strictEqual ( quarantinedTest . meta [ TEST_MANAGEMENT_IS_QUARANTINED ] , 'true' )
2980+
2981+ const passingTest = tests . find ( t => t . meta [ TEST_NAME ] === 'Say passing parallel' )
2982+ assert . strictEqual ( passingTest . meta [ TEST_STATUS ] , 'pass' )
2983+ } )
2984+
2985+ childProcess = exec (
2986+ './node_modules/.bin/cucumber-js ci-visibility/features-test-management-parallel/quarantine.feature' +
2987+ ' ci-visibility/features-test-management-parallel/passing.feature --parallel 2' ,
2988+ {
2989+ cwd,
2990+ env : getCiVisAgentlessConfig ( receiver . port ) ,
2991+ }
2992+ )
2993+
2994+ childProcess . on ( 'exit' , ( code ) => { exitCode = code } )
2995+
2996+ await Promise . all ( [
2997+ eventsPromise ,
2998+ once ( childProcess , 'exit' ) ,
2999+ ] )
3000+
3001+ // Quarantined test fails but exit code should be 0
3002+ assert . strictEqual ( exitCode , 0 )
3003+ } )
28363004 } )
28373005
28383006 context ( 'libraries capabilities' , ( ) => {
@@ -2852,11 +3020,7 @@ describe(`cucumber@${version} commonJS`, () => {
28523020
28533021 assert . ok ( metadataDicts . length > 0 )
28543022 metadataDicts . forEach ( metadata => {
2855- if ( runMode === 'parallel' ) {
2856- assert . strictEqual ( metadata . test [ DD_CAPABILITIES_TEST_IMPACT_ANALYSIS ] , undefined )
2857- } else {
2858- assert . strictEqual ( metadata . test [ DD_CAPABILITIES_TEST_IMPACT_ANALYSIS ] , '1' )
2859- }
3023+ assert . strictEqual ( metadata . test [ DD_CAPABILITIES_TEST_IMPACT_ANALYSIS ] , '1' )
28603024 assert . strictEqual ( metadata . test [ DD_CAPABILITIES_EARLY_FLAKE_DETECTION ] , '1' )
28613025 assert . strictEqual ( metadata . test [ DD_CAPABILITIES_AUTO_TEST_RETRIES ] , '1' )
28623026 assert . strictEqual ( metadata . test [ DD_CAPABILITIES_IMPACTED_TESTS ] , '1' )
0 commit comments