summaryrefslogtreecommitdiff
path: root/spec/bundler/install/gems/fund_spec.rb
blob: f521b0296f31e4f497fd6a5817a3f7145e583342 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# frozen_string_literal: true

RSpec.describe "bundle install" do
  context "with gem sources" do
    before do
      build_repo2 do
        build_gem "has_funding_and_other_metadata" do |s|
          s.metadata = {
            "bug_tracker_uri"   => "https://example.com/user/bestgemever/issues",
            "changelog_uri"     => "https://example.com/user/bestgemever/CHANGELOG.md",
            "documentation_uri" => "https://www.example.info/gems/bestgemever/0.0.1",
            "homepage_uri"      => "https://bestgemever.example.io",
            "mailing_list_uri"  => "https://groups.example.com/bestgemever",
            "funding_uri"       => "https://example.com/has_funding_and_other_metadata/funding",
            "source_code_uri"   => "https://example.com/user/bestgemever",
            "wiki_uri"          => "https://example.com/user/bestgemever/wiki",
          }
        end

        build_gem "has_funding", "1.2.3" do |s|
          s.metadata = {
            "funding_uri"       => "https://example.com/has_funding/funding",
          }
        end

        build_gem "gem_with_dependent_funding", "1.0" do |s|
          s.add_dependency "has_funding"
        end
      end
    end

    context "when gems include a fund URI" do
      it "displays the plural fund message after installing" do
        install_gemfile <<-G
          source "#{file_uri_for(gem_repo2)}"
          gem 'has_funding_and_other_metadata'
          gem 'has_funding'
          gem 'rack-obama'
        G

        expect(out).to include("2 installed gems you directly depend on are looking for funding.")
      end

      it "displays the singular fund message after installing" do
        install_gemfile <<-G
          source "#{file_uri_for(gem_repo2)}"
          gem 'has_funding'
          gem 'rack-obama'
        G

        expect(out).to include("1 installed gem you directly depend on is looking for funding.")
      end
    end

    context "when gems do not include fund messages" do
      it "does not display any fund messages" do
        install_gemfile <<-G
          source "#{file_uri_for(gem_repo2)}"
          gem "activesupport"
        G

        expect(out).not_to include("gem you depend on")
      end
    end

    context "when a dependency includes a fund message" do
      it "does not display the fund message" do
        install_gemfile <<-G
          source "#{file_uri_for(gem_repo2)}"
          gem 'gem_with_dependent_funding'
        G

        expect(out).not_to include("gem you depend on")
      end
    end
  end

  context "with git sources" do
    context "when gems include fund URI" do
      it "displays the fund message after installing" do
        build_git "also_has_funding" do |s|
          s.metadata = {
            "funding_uri" => "https://example.com/also_has_funding/funding",
          }
        end
        install_gemfile <<-G
          source "#{file_uri_for(gem_repo1)}"
          gem 'also_has_funding', :git => '#{lib_path("also_has_funding-1.0")}'
        G

        expect(out).to include("1 installed gem you directly depend on is looking for funding.")
      end

      it "displays the fund message if repo is updated" do
        build_git "also_has_funding" do |s|
          s.metadata = {
            "funding_uri" => "https://example.com/also_has_funding/funding",
          }
        end
        install_gemfile <<-G
          source "#{file_uri_for(gem_repo1)}"
          gem 'also_has_funding', :git => '#{lib_path("also_has_funding-1.0")}'
        G

        build_git "also_has_funding", "1.1" do |s|
          s.metadata = {
            "funding_uri" => "https://example.com/also_has_funding/funding",
          }
        end
        install_gemfile <<-G
          source "#{file_uri_for(gem_repo1)}"
          gem 'also_has_funding', :git => '#{lib_path("also_has_funding-1.1")}'
        G

        expect(out).to include("1 installed gem you directly depend on is looking for funding.")
      end

      it "displays the fund message if repo is not updated" do
        build_git "also_has_funding" do |s|
          s.metadata = {
            "funding_uri" => "https://example.com/also_has_funding/funding",
          }
        end
        gemfile <<-G
          source "#{file_uri_for(gem_repo1)}"
          gem 'also_has_funding', :git => '#{lib_path("also_has_funding-1.0")}'
        G

        bundle :install
        expect(out).to include("1 installed gem you directly depend on is looking for funding.")

        bundle :install
        expect(out).to include("1 installed gem you directly depend on is looking for funding.")
      end
    end
  end
end