Files
react-native/scripts/cocoapods/__tests__/local_podspec_patch-test.rb
T
Riccardo Cipolleschi 8fe2b591c7 Move LocalPodspecPatch to dedicated file (#34025)
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
2022-06-27 01:19:36 -07:00

172 lines
6.7 KiB
Ruby
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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