Skip to content

Commit 5db6938

Browse files
committed
Test: Add helper for asserting resolution failures for one of a dependency-to-project pair
This loosens the assertions to check for only one of two dependency/project pairs, which supports upcoming implementation changes
1 parent 93204da commit 5db6938

File tree

1 file changed

+45
-4
lines changed

1 file changed

+45
-4
lines changed

src/test/groovy/nebula/plugin/dependencyverifier/DependencyResolutionVerifierTest.groovy

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ import static nebula.plugin.dependencyverifier.DependencyResolutionVerifierTest.
3232
import static nebula.plugin.dependencyverifier.DependencyResolutionVerifierTest.OutputAssertions.assertResolutionFailureForDependency
3333
import static nebula.plugin.dependencyverifier.DependencyResolutionVerifierTest.OutputAssertions.assertResolutionFailureForDependencyForProject
3434
import static nebula.plugin.dependencyverifier.DependencyResolutionVerifierTest.OutputAssertions.assertResolutionFailureForMissingVersionDependencies
35+
import static nebula.plugin.dependencyverifier.DependencyResolutionVerifierTest.OutputAssertions.assertResolutionFailureForOneOfTheseDependencies
3536
import static nebula.plugin.dependencyverifier.DependencyResolutionVerifierTest.OutputAssertions.assertResolutionFailureMessage
37+
import static nebula.plugin.dependencyverifier.DependencyResolutionVerifierTest.OutputAssertions.dependencyProjectPair
3638

3739
@Subject(DependencyResolutionVerifierKt)
3840
class DependencyResolutionVerifierTest extends BaseIntegrationTestKitSpec {
@@ -465,8 +467,10 @@ class DependencyResolutionVerifierTest extends BaseIntegrationTestKitSpec {
465467
results.output.contains('FAILURE')
466468
assertExecutionFailedForTask(results.output)
467469
assertResolutionFailureMessage(results.output)
468-
assertResolutionFailureForDependencyForProject(results.output, "not.available:apricot:1.0.0", "sub1")
469-
assertResolutionFailureForDependencyForProject(results.output, "not.available:banana-leaf:2.0.0", "sub2")
470+
assertResolutionFailureForOneOfTheseDependencies(results.output, [
471+
dependencyProjectPair("not.available:apricot:1.0.0", "sub1"),
472+
dependencyProjectPair("not.available:banana-leaf:2.0.0", "sub2")
473+
])
470474

471475
where:
472476
tasks | description
@@ -497,8 +501,10 @@ class DependencyResolutionVerifierTest extends BaseIntegrationTestKitSpec {
497501
results.output.contains('FAILURE')
498502
assertExecutionFailedForTask(results.output)
499503
assertResolutionFailureMessage(results.output)
500-
assertResolutionFailureForDependencyForProject(results.output, "not.available:apricot:1.0.0", "sub1")
501-
assertResolutionFailureForDependencyForProject(results.output, "not.available:banana-leaf:2.0.0", "sub2")
504+
assertResolutionFailureForOneOfTheseDependencies(results.output, [
505+
dependencyProjectPair("not.available:apricot:1.0.0", "sub1"),
506+
dependencyProjectPair("not.available:banana-leaf:2.0.0", "sub2")
507+
])
502508

503509
where:
504510
tasks | description
@@ -610,6 +616,7 @@ class DependencyResolutionVerifierTest extends BaseIntegrationTestKitSpec {
610616
then:
611617
results.output.contains('FAILURE')
612618
assertExecutionFailedForTask(results.output)
619+
assertResolutionFailureMessage(results.output)
613620
assertFailureMessageIsDisplayedOnce(results.output, "not.available:a")
614621

615622
where:
@@ -1426,6 +1433,24 @@ class DependencyResolutionVerifierTest extends BaseIntegrationTestKitSpec {
14261433
assert resultsOutput.findAll(onceBlock).size() == 1
14271434
}
14281435

1436+
/**
1437+
* Asserts that the build output shows a resolution failure for at least one of the given dependency–project pairs.
1438+
* Use {@link #dependencyProjectPair(String, String)} to build each pair.
1439+
*
1440+
* @param resultsOutput build output (e.g. from runTasksAndFail)
1441+
* @param pairList pairs of (dependency coordinate, project name); at least one must appear as a resolution failure in the output
1442+
*/
1443+
static void assertResolutionFailureForOneOfTheseDependencies(String resultsOutput, List<DependencyProjectPair> pairList) {
1444+
boolean anyMatch = pairList.any { hasResolutionFailureForDependencyForProject(resultsOutput, it.dependency, it.project) }
1445+
String expected = pairList.collect { "${it.dependency} in ${it.project}" }.join(' or ')
1446+
assert anyMatch, "Expected resolution failure for ${expected}"
1447+
}
1448+
1449+
static boolean hasResolutionFailureForDependencyForProject(String resultsOutput, String dependency, String projectName) {
1450+
hasResolutionFailureForDependency(resultsOutput, dependency) &&
1451+
hasProjectContextInOutput(resultsOutput, projectName)
1452+
}
1453+
14291454
static boolean hasResolutionFailureForDependency(String resultsOutput, String dependency) {
14301455
List<String> patterns = [
14311456
COULD_NOT_FIND + dependency,
@@ -1454,6 +1479,22 @@ class DependencyResolutionVerifierTest extends BaseIntegrationTestKitSpec {
14541479
return (requiredByProjectMarkers.every { resultsOutput.contains(it) }) ||
14551480
projectPatterns.any { resultsOutput.contains(it) }
14561481
}
1482+
1483+
/** Value type pairing a dependency coordinate with a project name for assertResolutionFailureForDependencyForProjectOneOf. */
1484+
private static final class DependencyProjectPair {
1485+
final String dependency
1486+
final String project
1487+
1488+
DependencyProjectPair(String dependency, String project) {
1489+
this.dependency = dependency
1490+
this.project = project
1491+
}
1492+
}
1493+
1494+
/** Pairs a dependency coordinate with a project name for use in assertResolutionFailureForDependencyForProjectOneOf. */
1495+
static DependencyProjectPair dependencyProjectPair(String dependency, String projectName) {
1496+
return new DependencyProjectPair(dependency, projectName)
1497+
}
14571498
}
14581499

14591500
private static String taskThatRequiresConfigurationDependencies() {

0 commit comments

Comments
 (0)