33require "bundler/installer/parallel_installer"
44
55RSpec . describe Bundler ::ParallelInstaller ::SpecInstallation do
6- let! ( :dep ) do
7- a_spec = Object . new
8- def a_spec . name
9- "I like tests"
10- end
11-
12- def a_spec . full_name
13- "I really like tests"
14- end
15- a_spec
6+ def build_spec ( name , extensions : [ ] )
7+ spec = Object . new
8+ spec . define_singleton_method ( :name ) { name }
9+ spec . define_singleton_method ( :full_name ) { "#{ name } -1.0" }
10+ spec . define_singleton_method ( :extensions ) { extensions }
11+ spec . define_singleton_method ( :dependencies ) { [ ] }
12+ spec
1613 end
1714
15+ let! ( :dep ) { build_spec ( "I like tests" ) }
16+
1817 describe "#ready_to_enqueue?" do
1918 context "when in enqueued state" do
2019 it "is falsey" do
@@ -39,29 +38,51 @@ def a_spec.full_name
3938 end
4039
4140 describe "#dependencies_installed?" do
42- context "when all dependencies are installed" do
43- it "returns true" do
44- dependencies = [ ]
45- dependencies << instance_double ( "SpecInstallation" , spec : "alpha" , name : "alpha" , installed? : true , all_dependencies : [ ] , type : :production )
46- dependencies << instance_double ( "SpecInstallation" , spec : "beta" , name : "beta" , installed? : true , all_dependencies : [ ] , type : :production )
47- all_specs = dependencies + [ instance_double ( "SpecInstallation" , spec : "gamma" , name : "gamma" , installed? : false , all_dependencies : [ ] , type : :production ) ]
41+ it "returns true when all dependencies are installed" do
42+ alpha = described_class . new ( build_spec ( "alpha" ) )
43+ alpha . dependencies = [ ]
44+
45+ beta = described_class . new ( build_spec ( "beta" ) )
46+ beta . dependencies = [ alpha ]
47+
48+ gamma = described_class . new ( build_spec ( "gamma" ) )
49+ gamma . dependencies = [ beta ]
50+
51+ expect ( gamma . dependencies_installed? ( { } ) ) . to be_falsey
52+ expect ( gamma . dependencies_installed? ( { "beta" => true } ) ) . to be_falsey
53+ expect ( gamma . dependencies_installed? ( { "alpha" => true , "beta" => true } ) ) . to be_truthy
54+ end
55+ end
56+
57+ describe "#ready_to_install?" do
58+ context "when spec has no extensions" do
59+ it "returns true regardless of dependencies" do
60+ beta = described_class . new ( build_spec ( "beta" ) )
61+ beta . dependencies = [ ]
62+
4863 spec = described_class . new ( dep )
49- allow ( spec ) . to receive ( :all_dependencies ) . and_return ( dependencies )
50- installed_specs = all_specs . select ( &:installed? ) . map { |s | [ s . name , true ] } . to_h
51- expect ( spec . dependencies_installed? ( installed_specs ) ) . to be_truthy
64+ spec . state = :downloaded
65+ spec . dependencies = [ beta ]
66+
67+ expect ( spec . ready_to_install? ( { } ) ) . to be_truthy
5268 end
5369 end
5470
55- context "when all dependencies are not installed" do
56- it "returns false" do
57- dependencies = [ ]
58- dependencies << instance_double ( "SpecInstallation" , spec : "alpha" , name : "alpha" , installed? : false , all_dependencies : [ ] , type : :production )
59- dependencies << instance_double ( "SpecInstallation" , spec : "beta" , name : "beta" , installed? : true , all_dependencies : [ ] , type : :production )
60- all_specs = dependencies + [ instance_double ( "SpecInstallation" , spec : "gamma" , name : "gamma" , installed? : false , all_dependencies : [ ] , type : :production ) ]
61- spec = described_class . new ( dep )
62- allow ( spec ) . to receive ( :all_dependencies ) . and_return ( dependencies )
63- installed_specs = all_specs . select ( &:installed? ) . map { |s | [ s . name , true ] } . to_h
64- expect ( spec . dependencies_installed? ( installed_specs ) ) . to be_falsey
71+ context "when spec has extensions" do
72+ it "returns true when all dependencies are installed" do
73+ alpha = described_class . new ( build_spec ( "alpha" ) )
74+ alpha . dependencies = [ ]
75+
76+ beta = described_class . new ( build_spec ( "beta" ) )
77+ beta . dependencies = [ alpha ]
78+
79+ gamma = described_class . new ( build_spec ( "gamma" , extensions : [ "ext/Rakefile" ] ) )
80+ gamma . state = :downloaded
81+ gamma . dependencies = [ beta ]
82+
83+ expect ( gamma . ready_to_install? ( { } ) ) . to be_falsey
84+ expect ( gamma . ready_to_install? ( { "beta" => true } ) ) . to be_falsey
85+ expect ( gamma . ready_to_install? ( { "alpha" => true , "beta" => true } ) ) . to be_truthy
6586 end
6687 end
6788 end
0 commit comments