|
716 | 716 | end |
717 | 717 |
|
718 | 718 | its(:content) do |
719 | | - expected_command = "gradle --no-daemon --stacktrace wrapper --no-validate-url --gradle-version 9.0.0" |
| 719 | + # First command: Update wrapper with new version |
| 720 | + first_expected_command = "./gradlew --no-daemon --stacktrace wrapper --no-validate-url --gradle-version 9.0.0" |
| 721 | + # Second command: Regenerate wrapper binaries |
| 722 | + second_expected_command = "./gradlew --no-daemon --stacktrace wrapper" |
720 | 723 |
|
721 | 724 | is_expected.to include( |
722 | 725 | "distributionUrl=https\\://services.gradle.org/distributions/gradle-9.0.0-#{type}.zip" |
723 | 726 | ) |
724 | 727 |
|
725 | 728 | if checksum |
726 | | - expected_command += " --gradle-distribution-sha256-sum #{updated_checksum}" |
| 729 | + first_expected_command += " --gradle-distribution-sha256-sum #{updated_checksum}" |
727 | 730 | is_expected.to include("distributionSha256Sum=#{updated_checksum}") |
728 | 731 | else |
729 | 732 | is_expected.not_to include("distributionSha256Sum=") |
730 | 733 | end |
731 | 734 |
|
732 | | - expect(Dependabot::SharedHelpers).to have_received(:run_shell_command).with(expected_command, cwd: anything) |
| 735 | + # Verify both commands were called in sequence |
| 736 | + expect(Dependabot::SharedHelpers).to have_received(:run_shell_command).with(first_expected_command, cwd: anything).ordered |
| 737 | + expect(Dependabot::SharedHelpers).to have_received(:run_shell_command).with(second_expected_command, cwd: anything).ordered |
733 | 738 | end |
734 | 739 | end |
735 | 740 |
|
|
745 | 750 | "all", |
746 | 751 | "443c9c8ee2ac1ee0e11881a40f2376d79c66386264a44b24a9f8ca67e633375f", |
747 | 752 | "f759b8dd5204e2e3fa4ca3e73f452f087153cf81bac9561eeb854229cc2c5365" |
| 753 | + |
| 754 | + context "when wrapper task fails" do |
| 755 | + let(:buildfile) { wrapper_file } |
| 756 | + let(:wrapper_file) do |
| 757 | + Dependabot::DependencyFile.new( |
| 758 | + name: "gradle/wrapper/gradle-wrapper.properties", |
| 759 | + content: fixture("wrapper_files", "gradle-wrapper-8.14.2-bin.properties") |
| 760 | + ) |
| 761 | + end |
| 762 | + |
| 763 | + let(:dependency) do |
| 764 | + Dependabot::Dependency.new( |
| 765 | + name: "gradle-wrapper", |
| 766 | + version: "9.0.0", |
| 767 | + previous_version: "8.14.2", |
| 768 | + requirements: [{ |
| 769 | + file: "gradle/wrapper/gradle-wrapper.properties", |
| 770 | + requirement: "9.0.0", |
| 771 | + groups: [], |
| 772 | + source: { type: "gradle-distribution", url: "https://services.gradle.org", property: "distributionUrl" } |
| 773 | + }], |
| 774 | + previous_requirements: [{ |
| 775 | + file: "gradle/wrapper/gradle-wrapper.properties", |
| 776 | + requirement: "8.14.2", |
| 777 | + groups: [], |
| 778 | + source: { type: "gradle-distribution", url: "https://services.gradle.org", property: "distributionUrl" } |
| 779 | + }], |
| 780 | + package_manager: "gradle" |
| 781 | + ) |
| 782 | + end |
| 783 | + |
| 784 | + before do |
| 785 | + allow(Dependabot::SharedHelpers).to receive(:run_shell_command) |
| 786 | + .and_raise( |
| 787 | + Dependabot::SharedHelpers::HelperSubprocessFailed.new( |
| 788 | + message: "Gradle wrapper task failed", |
| 789 | + error_context: {} |
| 790 | + ) |
| 791 | + ) |
| 792 | + end |
| 793 | + |
| 794 | + it "raises DependencyFileNotResolvable" do |
| 795 | + expect { updated_files }.to raise_error(Dependabot::DependencyFileNotResolvable) |
| 796 | + end |
| 797 | + end |
| 798 | + |
| 799 | + context "when updating a non-wrapper dependency" do |
| 800 | + let(:buildfile) do |
| 801 | + Dependabot::DependencyFile.new( |
| 802 | + name: "build.gradle", |
| 803 | + content: fixture("buildfiles", "basic_build.gradle") |
| 804 | + ) |
| 805 | + end |
| 806 | + |
| 807 | + let(:dependency_files) { [buildfile, wrapper_file] } |
| 808 | + |
| 809 | + let(:wrapper_file) do |
| 810 | + Dependabot::DependencyFile.new( |
| 811 | + name: "gradle/wrapper/gradle-wrapper.properties", |
| 812 | + content: fixture("wrapper_files", "gradle-wrapper-8.14.2-bin.properties") |
| 813 | + ) |
| 814 | + end |
| 815 | + |
| 816 | + let(:dependency) do |
| 817 | + Dependabot::Dependency.new( |
| 818 | + name: "co.aikar:acf-paper", |
| 819 | + version: "0.6.0-SNAPSHOT", |
| 820 | + requirements: [{ |
| 821 | + file: "build.gradle", |
| 822 | + requirement: "0.6.0-SNAPSHOT", |
| 823 | + groups: [], |
| 824 | + source: nil, |
| 825 | + metadata: nil |
| 826 | + }], |
| 827 | + previous_requirements: [{ |
| 828 | + file: "build.gradle", |
| 829 | + requirement: "0.5.0-SNAPSHOT", |
| 830 | + groups: [], |
| 831 | + source: nil, |
| 832 | + metadata: nil |
| 833 | + }], |
| 834 | + package_manager: "gradle" |
| 835 | + ) |
| 836 | + end |
| 837 | + |
| 838 | + it "does not run wrapper updater" do |
| 839 | + # Should not call run_shell_command for wrapper tasks |
| 840 | + updated_files |
| 841 | + expect(Dependabot::SharedHelpers).not_to have_received(:run_shell_command) |
| 842 | + end |
| 843 | + |
| 844 | + it "updates only the build file" do |
| 845 | + expect(updated_files.length).to eq(1) |
| 846 | + expect(updated_files.first.name).to eq("build.gradle") |
| 847 | + end |
| 848 | + end |
| 849 | + |
| 850 | + context "with all wrapper files including binaries" do |
| 851 | + let(:buildfile) { wrapper_file } |
| 852 | + |
| 853 | + let(:wrapper_file) do |
| 854 | + Dependabot::DependencyFile.new( |
| 855 | + name: "gradle/wrapper/gradle-wrapper.properties", |
| 856 | + content: fixture("wrapper_files", "gradle-wrapper-8.14.2-bin.properties") |
| 857 | + ) |
| 858 | + end |
| 859 | + |
| 860 | + let(:gradlew_file) do |
| 861 | + Dependabot::DependencyFile.new( |
| 862 | + name: "gradlew", |
| 863 | + content: "#!/bin/sh\necho 'gradlew script'" |
| 864 | + ) |
| 865 | + end |
| 866 | + |
| 867 | + let(:gradlew_bat_file) do |
| 868 | + Dependabot::DependencyFile.new( |
| 869 | + name: "gradlew.bat", |
| 870 | + content: "@echo off\necho gradlew.bat" |
| 871 | + ) |
| 872 | + end |
| 873 | + |
| 874 | + let(:jar_file) do |
| 875 | + file = Dependabot::DependencyFile.new( |
| 876 | + name: "gradle/wrapper/gradle-wrapper.jar", |
| 877 | + content: Base64.encode64("fake jar content") |
| 878 | + ) |
| 879 | + file.content_encoding = Dependabot::DependencyFile::ContentEncoding::BASE64 |
| 880 | + file |
| 881 | + end |
| 882 | + |
| 883 | + let(:dependency_files) { [wrapper_file, gradlew_file, gradlew_bat_file, jar_file] } |
| 884 | + |
| 885 | + let(:dependency) do |
| 886 | + Dependabot::Dependency.new( |
| 887 | + name: "gradle-wrapper", |
| 888 | + version: "9.0.0", |
| 889 | + previous_version: "8.14.2", |
| 890 | + requirements: [{ |
| 891 | + file: "gradle/wrapper/gradle-wrapper.properties", |
| 892 | + requirement: "9.0.0", |
| 893 | + groups: [], |
| 894 | + source: { type: "gradle-distribution", url: "https://services.gradle.org", property: "distributionUrl" } |
| 895 | + }], |
| 896 | + previous_requirements: [{ |
| 897 | + file: "gradle/wrapper/gradle-wrapper.properties", |
| 898 | + requirement: "8.14.2", |
| 899 | + groups: [], |
| 900 | + source: { type: "gradle-distribution", url: "https://services.gradle.org", property: "distributionUrl" } |
| 901 | + }], |
| 902 | + package_manager: "gradle" |
| 903 | + ) |
| 904 | + end |
| 905 | + |
| 906 | + before do |
| 907 | + allow(Dependabot::SharedHelpers).to receive(:run_shell_command) |
| 908 | + end |
| 909 | + |
| 910 | + it "processes all wrapper files" do |
| 911 | + # When commands are mocked, files don't actually change content, |
| 912 | + # so they may be filtered out. The key is that the wrapper updater |
| 913 | + # processes all wrapper files by running the wrapper task. |
| 914 | + result = updated_files |
| 915 | + # At minimum, the properties file should be in the result |
| 916 | + expect(result.map(&:name)).to include("gradle/wrapper/gradle-wrapper.properties") |
| 917 | + end |
| 918 | + |
| 919 | + it "runs wrapper task twice" do |
| 920 | + updated_files |
| 921 | + expect(Dependabot::SharedHelpers).to have_received(:run_shell_command).twice |
| 922 | + end |
| 923 | + end |
748 | 924 | end |
749 | 925 |
|
750 | 926 | context "with a version catalog" do |
|
0 commit comments