mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
8fe2b591c7
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/34025 This diff moves the monkeypatch LocalPodspecPatch to a dedicated ruby file. It also adds test for that ## Changelog [iOS][Changed] - Move LocalPodspecPatch to dedicated file Reviewed By: cortinico Differential Revision: D37069361 fbshipit-source-id: 28fddb197484f45aa20ccac516c874e79448e999
172 lines
6.7 KiB
Ruby
172 lines
6.7 KiB
Ruby
# Copyright (c) Meta Platforms, Inc. and affiliates.
|
||
#
|
||
# This source code is licensed under the MIT license found in the
|
||
# LICENSE file in the root directory of this source tree.
|
||
|
||
require "test/unit"
|
||
require "json"
|
||
require_relative "../local_podspec_patch.rb"
|
||
require_relative "./test_utils/FileMock.rb"
|
||
require_relative "./test_utils/DirMock.rb"
|
||
require_relative "./test_utils/PodMock.rb"
|
||
require_relative "./test_utils/LocalPodspecPatchMock.rb"
|
||
|
||
class LocalPodspecPatchTests < Test::Unit::TestCase
|
||
def setup
|
||
File.enable_testing_mode!
|
||
Dir.enable_testing_mode!
|
||
end
|
||
|
||
def teardown
|
||
File.reset()
|
||
Dir.reset()
|
||
end
|
||
|
||
# =================== #
|
||
# Test - Pods To Update #
|
||
# =================== #
|
||
|
||
def test_podsToUpdate_whenNoFilesExists_returnLocalPodspecs
|
||
# Arrange
|
||
react_native_path = "../node_modules/react-native"
|
||
globs = ["a/path/to/boost.podspec", "a/path/to/DoubleConversion.podspec"]
|
||
mocked_pwd = "a/path/to"
|
||
Dir.mocked_existing_globs(globs, "#{react_native_path}/third-party-podspecs/*")
|
||
Dir.set_pwd(mocked_pwd)
|
||
|
||
# Act
|
||
local_podspec = LocalPodspecPatch.pods_to_update(:react_native_path => react_native_path)
|
||
|
||
# Assert
|
||
assert_equal(local_podspec, [])
|
||
assert_equal(Dir.glob_invocation, ["#{react_native_path}/third-party-podspecs/*"])
|
||
assert_equal(File.exist_invocation_params, [
|
||
File.join(mocked_pwd, "Pods/Local Podspecs", "boost.podspec.json"),
|
||
File.join(mocked_pwd, "Pods/Local Podspecs", "DoubleConversion.podspec.json"),
|
||
])
|
||
end
|
||
|
||
def test_podsToUpdate_whenFilesExistsWithSameVersions_returnsEmpty
|
||
# Arrange
|
||
react_native_path = "../node_modules/react-native"
|
||
globs = ["a/path/to/boost.podspec", "a/path/to/DoubleConversion.podspec"]
|
||
mocked_pwd = "a/path/to"
|
||
prepare_PodsToUpdate_test_withMatchingVersions(react_native_path, globs, mocked_pwd)
|
||
|
||
# Act
|
||
local_podspec = LocalPodspecPatch.pods_to_update(:react_native_path => react_native_path)
|
||
|
||
# Assert
|
||
assert_equal(local_podspec, [])
|
||
assert_equal(Dir.glob_invocation, ["#{react_native_path}/third-party-podspecs/*"])
|
||
assert_equal(File.exist_invocation_params, [
|
||
File.join(mocked_pwd, "Pods/Local Podspecs", "boost.podspec.json"),
|
||
File.join(mocked_pwd, "Pods/Local Podspecs", "DoubleConversion.podspec.json"),
|
||
])
|
||
end
|
||
|
||
def test_podsToUpdate_whenFilesExistsWithDifferentVersions_returnsThem
|
||
# Arrange
|
||
react_native_path = "../node_modules/react-native"
|
||
globs = ["a/path/to/boost.podspec", "a/path/to/DoubleConversion.podspec"]
|
||
mocked_pwd = "a/path/to"
|
||
prepare_PodsToUpdate_test_withDifferentVersions(react_native_path, globs, mocked_pwd)
|
||
|
||
# Act
|
||
local_podspec = LocalPodspecPatch.pods_to_update(:react_native_path => react_native_path)
|
||
|
||
# Assert
|
||
assert_equal(local_podspec, [
|
||
"boost",
|
||
"DoubleConversion"
|
||
])
|
||
assert_equal(Dir.glob_invocation, ["#{react_native_path}/third-party-podspecs/*"])
|
||
assert_equal(File.exist_invocation_params, [
|
||
File.join(mocked_pwd, "Pods/Local Podspecs", "boost.podspec.json"),
|
||
File.join(mocked_pwd, "Pods/Local Podspecs", "DoubleConversion.podspec.json"),
|
||
])
|
||
end
|
||
|
||
# ======================================== #
|
||
# Test - Patch Detect Changes With Podfile #
|
||
# ======================================== #
|
||
def test_patchDetectChangesWithPodfile_whenAlreadyChanged_returnSameChangeSet()
|
||
local_pods = [
|
||
"boost",
|
||
"DoubleConversion"
|
||
]
|
||
LocalPodspecPatch.mock_local_podspecs(local_pods)
|
||
changes = {
|
||
:unchanged => ["some_pod"],
|
||
:changed => ["boost", "DoubleConversion", "another_pod"]
|
||
}
|
||
|
||
Pod::Lockfile.prepend(LocalPodspecPatch)
|
||
|
||
new_changes = Pod::Lockfile.new().patch_detect_changes_with_podfile(changes)
|
||
|
||
assert_equal(new_changes, {
|
||
:unchanged => ["some_pod"],
|
||
:changed => ["boost", "DoubleConversion", "another_pod"]
|
||
})
|
||
end
|
||
|
||
def test_patchDetectChangesWithPodfile_whenLocalPodsUnchanged_movesLocalPodsToChangeSet()
|
||
pods = [
|
||
"boost",
|
||
"DoubleConversion"
|
||
]
|
||
LocalPodspecPatch.mock_local_podspecs(pods)
|
||
changes = {
|
||
:unchanged => ["first_pod", "boost", "DoubleConversion"],
|
||
:changed => ["another_pod"]
|
||
}
|
||
|
||
Pod::Lockfile.prepend(LocalPodspecPatch)
|
||
|
||
new_changes = Pod::Lockfile.new().patch_detect_changes_with_podfile(changes)
|
||
|
||
assert_equal(new_changes, {
|
||
:unchanged => ["first_pod"],
|
||
:changed => ["another_pod", "boost", "DoubleConversion"]
|
||
})
|
||
end
|
||
|
||
# ========= #
|
||
# Utilities #
|
||
# ========= #
|
||
def prepare_PodsToUpdate_test_withMatchingVersions(react_native_path, globs, mocked_pwd)
|
||
File.mocked_existing_files([
|
||
"a/path/to/Pods/Local Podspecs/boost.podspec.json",
|
||
"a/path/to/Pods/Local Podspecs/DoubleConversion.podspec.json"
|
||
])
|
||
File.files_to_read({
|
||
"a/path/to/Pods/Local Podspecs/boost.podspec.json" => "{ \"version\": \"0.0.1\"}",
|
||
"a/path/to/Pods/Local Podspecs/DoubleConversion.podspec.json" => "{ \"version\": \"1.0.1\"}",
|
||
})
|
||
Dir.mocked_existing_globs(globs, "#{react_native_path}/third-party-podspecs/*")
|
||
Dir.set_pwd(mocked_pwd)
|
||
Pod::Specification.specs_from_file({
|
||
"../node_modules/react-native/third-party-podspecs/boost.podspec" => Pod::PodSpecMock.new(:version => "0.0.1"),
|
||
"../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" => Pod::PodSpecMock.new(:version => "1.0.1"),
|
||
})
|
||
end
|
||
|
||
def prepare_PodsToUpdate_test_withDifferentVersions(react_native_path, globs, mocked_pwd)
|
||
File.mocked_existing_files([
|
||
"a/path/to/Pods/Local Podspecs/boost.podspec.json",
|
||
"a/path/to/Pods/Local Podspecs/DoubleConversion.podspec.json"
|
||
])
|
||
File.files_to_read({
|
||
"a/path/to/Pods/Local Podspecs/boost.podspec.json" => "{ \"version\": \"0.0.1\"}",
|
||
"a/path/to/Pods/Local Podspecs/DoubleConversion.podspec.json" => "{ \"version\": \"1.0.1\"}",
|
||
})
|
||
Dir.mocked_existing_globs(globs, "#{react_native_path}/third-party-podspecs/*")
|
||
Dir.set_pwd(mocked_pwd)
|
||
Pod::Specification.specs_from_file({
|
||
"../node_modules/react-native/third-party-podspecs/boost.podspec" => Pod::PodSpecMock.new(:version => "0.1.1"),
|
||
"../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" => Pod::PodSpecMock.new(:version => "1.1.1"),
|
||
})
|
||
end
|
||
end
|