@@ -275,6 +275,7 @@ versions.forEach(version => {
275275 }
276276 )
277277 } )
278+
278279 it ( 'can report code coverage' , ( done ) => {
279280 const libraryConfigRequestPromise = receiver . payloadReceived (
280281 ( { url } ) => url . endsWith ( '/api/v2/libraries/tests/services/setting' )
@@ -355,6 +356,7 @@ versions.forEach(version => {
355356 done ( )
356357 } )
357358 } )
359+
358360 it ( 'does not report code coverage if disabled by the API' , ( done ) => {
359361 receiver . setSettings ( {
360362 itr_enabled : false ,
@@ -390,6 +392,7 @@ versions.forEach(version => {
390392 }
391393 )
392394 } )
395+
393396 it ( 'can skip suites received by the intelligent test runner API and still reports code coverage' ,
394397 ( done ) => {
395398 receiver . setSuitesToSkip ( [ {
@@ -463,6 +466,7 @@ versions.forEach(version => {
463466 }
464467 )
465468 } )
469+
466470 it ( 'does not skip tests if git metadata upload fails' , ( done ) => {
467471 receiver . setSuitesToSkip ( [ {
468472 type : 'suite' ,
@@ -505,6 +509,7 @@ versions.forEach(version => {
505509 }
506510 )
507511 } )
512+
508513 it ( 'does not skip tests if test skipping is disabled by the API' , ( done ) => {
509514 receiver . setSettings ( {
510515 itr_enabled : true ,
@@ -543,6 +548,7 @@ versions.forEach(version => {
543548 }
544549 )
545550 } )
551+
546552 it ( 'does not skip suites if suite is marked as unskippable' , ( done ) => {
547553 receiver . setSettings ( {
548554 itr_enabled : true ,
@@ -611,6 +617,7 @@ versions.forEach(version => {
611617 } ) . catch ( done )
612618 } )
613619 } )
620+
614621 it ( 'only sets forced to run if suite was going to be skipped by ITR' , ( done ) => {
615622 receiver . setSettings ( {
616623 itr_enabled : true ,
@@ -673,6 +680,7 @@ versions.forEach(version => {
673680 } ) . catch ( done )
674681 } )
675682 } )
683+
676684 it ( 'sets _dd.ci.itr.tests_skipped to false if the received suite is not skipped' , ( done ) => {
677685 receiver . setSuitesToSkip ( [ {
678686 type : 'suite' ,
@@ -709,6 +717,7 @@ versions.forEach(version => {
709717 } ) . catch ( done )
710718 } )
711719 } )
720+
712721 if ( ! isAgentless ) {
713722 context ( 'if the agent is not event platform proxy compatible' , ( ) => {
714723 it ( 'does not do any intelligent test runner request' , ( done ) => {
@@ -757,6 +766,7 @@ versions.forEach(version => {
757766 } )
758767 } )
759768 }
769+
760770 it ( 'reports itr_correlation_id in test suites' , ( done ) => {
761771 const itrCorrelationId = '4321'
762772 receiver . setItrCorrelationId ( itrCorrelationId )
@@ -783,6 +793,45 @@ versions.forEach(version => {
783793 } ) . catch ( done )
784794 } )
785795 } )
796+
797+ it ( 'reports code coverage relative to the repository root, not working directory' , ( done ) => {
798+ receiver . setSettings ( {
799+ itr_enabled : true ,
800+ code_coverage : true ,
801+ tests_skipping : false
802+ } )
803+
804+ const codeCoveragesPromise = receiver
805+ . gatherPayloadsMaxTimeout ( ( { url } ) => url . endsWith ( '/api/v2/citestcov' ) , ( payloads ) => {
806+ const coveredFiles = payloads
807+ . flatMap ( ( { payload } ) => payload )
808+ . flatMap ( ( { content : { coverages } } ) => coverages )
809+ . flatMap ( ( { files } ) => files )
810+ . map ( ( { filename } ) => filename )
811+
812+ assert . includeMembers ( coveredFiles , [
813+ 'ci-visibility/subproject/features/support/steps.js' ,
814+ 'ci-visibility/subproject/features/greetings.feature'
815+ ] )
816+ } )
817+
818+ childProcess = exec (
819+ '../../node_modules/nyc/bin/nyc.js node ../../node_modules/.bin/cucumber-js features/*.feature' ,
820+ {
821+ cwd : `${ cwd } /ci-visibility/subproject` ,
822+ env : {
823+ ...getCiVisAgentlessConfig ( receiver . port )
824+ } ,
825+ stdio : 'inherit'
826+ }
827+ )
828+
829+ childProcess . on ( 'exit' , ( ) => {
830+ codeCoveragesPromise . then ( ( ) => {
831+ done ( )
832+ } ) . catch ( done )
833+ } )
834+ } )
786835 } )
787836
788837 context ( 'early flake detection' , ( ) => {
0 commit comments