@@ -12,13 +12,18 @@ import com.facebook.react.utils.DependencyUtils.configureDependencies
1212import com.facebook.react.utils.DependencyUtils.configureRepositories
1313import com.facebook.react.utils.DependencyUtils.exclusiveEnterpriseRepository
1414import com.facebook.react.utils.DependencyUtils.getDependencySubstitutions
15+ import com.facebook.react.utils.DependencyUtils.isMavenArtifactVersionPublished
1516import com.facebook.react.utils.DependencyUtils.isNightly
1617import com.facebook.react.utils.DependencyUtils.isReactNativeMavenMirrorEnabled
1718import com.facebook.react.utils.DependencyUtils.mavenRepoFromURI
1819import com.facebook.react.utils.DependencyUtils.mavenRepoFromUrl
1920import com.facebook.react.utils.DependencyUtils.readVersionAndGroupStrings
2021import com.facebook.react.utils.DependencyUtils.shouldAddJitPack
22+ import com.sun.net.httpserver.HttpServer
23+ import java.net.InetAddress
24+ import java.net.InetSocketAddress
2125import java.net.URI
26+ import java.util.concurrent.atomic.AtomicInteger
2227import org.assertj.core.api.Assertions.assertThat
2328import org.gradle.api.artifacts.repositories.MavenArtifactRepository
2429import org.gradle.testfixtures.ProjectBuilder
@@ -78,6 +83,42 @@ class DependencyUtilsTest {
7883 .isNotNull()
7984 }
8085
86+ @Test
87+ fun configureRepositories_withUnpublishedVersion_doesNotQueryRemoteRepository () {
88+ val requests = AtomicInteger ()
89+ val loopbackAddress = InetAddress .getLoopbackAddress()
90+ val server = HttpServer .create(InetSocketAddress (loopbackAddress, 0 ), 0 )
91+ server.createContext(" /" ) { exchange ->
92+ requests.incrementAndGet()
93+ exchange.sendResponseHeaders(404 , - 1 )
94+ exchange.close()
95+ }
96+ server.start()
97+
98+ try {
99+ val project = createProject()
100+ project.extensions.extraProperties.set(
101+ " exclusiveEnterpriseRepository" ,
102+ " http://${loopbackAddress.hostAddress} :${server.address.port} " ,
103+ )
104+ configureRepositories(project, DependencyUtils .Coordinates (" 1000.0.0" , " 4.5.6" ))
105+ (project.repositories.first() as MavenArtifactRepository ).isAllowInsecureProtocol = true
106+
107+ val published = project.configurations.create(" published" )
108+ project.dependencies.add(published.name, " com.facebook.react:react-android:0.88.0" )
109+ assertThat(runCatching { published.resolve() }.isFailure).isTrue()
110+ assertThat(requests.get()).isGreaterThan(0 )
111+
112+ requests.set(0 )
113+ val unpublished = project.configurations.create(" unpublished" )
114+ project.dependencies.add(unpublished.name, " com.facebook.react:react-android:1000.0.0" )
115+ assertThat(runCatching { unpublished.resolve() }.isFailure).isTrue()
116+ assertThat(requests.get()).isZero()
117+ } finally {
118+ server.stop(0 )
119+ }
120+ }
121+
81122 @Test
82123 fun configureRepositories_containsGoogleRepo () {
83124 val repositoryURI = URI .create(" https://dl.google.com/dl/android/maven2/" )
@@ -414,6 +455,32 @@ class DependencyUtilsTest {
414455 assertThat(project.configurations.first().resolutionStrategy.forcedModules.isEmpty()).isTrue()
415456 }
416457
458+ @Test
459+ fun configureDependencies_withUnpublishedVersion_preservesResolutionStrategy () {
460+ val project = createProject()
461+
462+ configureDependencies(project, DependencyUtils .Coordinates (" 1000.0.0" , " 4.5.6" ))
463+
464+ val forcedModules = project.configurations.first().resolutionStrategy.forcedModules
465+ assertThat(
466+ forcedModules.any {
467+ it.toString() == " com.facebook.react:react-android:1000.0.0"
468+ },
469+ )
470+ .isTrue()
471+ assertThat(forcedModules.any { it.toString() == " com.facebook.hermes:hermes-android:4.5.6" })
472+ .isTrue()
473+
474+ val dependencySubstitutions =
475+ getDependencySubstitutions(DependencyUtils .Coordinates (" 1000.0.0" , " 4.5.6" ))
476+ assertThat(
477+ dependencySubstitutions.any {
478+ it.second == " com.facebook.react:react-android:1000.0.0"
479+ },
480+ )
481+ .isTrue()
482+ }
483+
417484 @Test
418485 fun configureDependencies_withVersionString_appliesResolutionStrategy () {
419486 val project = createProject()
@@ -577,6 +644,12 @@ class DependencyUtilsTest {
577644 assertThat(hermesVersionString).isEqualTo(" 1000.0.0" )
578645 }
579646
647+ @Test
648+ fun isMavenArtifactVersionPublished_withMainVersion_returnsFalse () {
649+ assertThat(" 1000.0.0" .isMavenArtifactVersionPublished()).isFalse()
650+ assertThat(" 0.88.0" .isMavenArtifactVersionPublished()).isTrue()
651+ }
652+
580653 @Test
581654 fun readVersionString_withNightlyVersionString_returnsSnapshotVersion () {
582655 val propertiesFile =
0 commit comments