spec/unit/solve/artifact_spec.rb in solve-0.2.1 vs spec/unit/solve/artifact_spec.rb in solve-0.3.0

- old
+ new

@@ -11,87 +11,111 @@ let(:name) { "league" } let(:version) { "1.0.0" } subject { Solve::Artifact.new(graph, name, version) } - describe "#dependencies" do - context "given a name and constraint argument" do - let(:name) { "nginx" } - let(:constraint) { "~> 0.101.5" } + describe "equality" do + context "given an artifact with the same name and version" do + let(:one) { Solve::Artifact.new(graph, "riot", "1.0.0") } + let(:two) { Solve::Artifact.new(graph, "riot", "1.0.0") } - context "given the dependency of the given name and constraint does not exist" do - it "returns a Solve::Artifact" do - subject.dependencies(name, constraint).should be_a(Solve::Dependency) - end + it "is equal" do + one.should be_eql(two) + end + end - it "the dependency has the given name" do - subject.dependencies(name, constraint).name.should eql(name) - end + context "given an artifact with the same name but different version" do + let(:one) { Solve::Artifact.new(graph, "riot", "1.0.0") } + let(:two) { Solve::Artifact.new(graph, "riot", "2.0.0") } - it "the dependency has the given constraint" do - subject.dependencies(name, constraint).constraint.to_s.should eql(constraint) - end + it "is not equal" do + one.should_not be_eql(two) + end + end - it "adds an dependency to the dependency collection" do - subject.dependencies(name, constraint) + context "given an artifact with the same version but different name" do + let(:one) { Solve::Artifact.new(graph, "riot", "1.0.0") } + let(:two) { Solve::Artifact.new(graph, "league", "1.0.0") } - subject.dependencies.should have(1).item - end + it "is not equal" do + one.should_not be_eql(two) + end + end + end - it "the dependency added matches the given name" do - subject.dependencies(name, constraint) + describe "sorting" do + let(:one) { Solve::Artifact.new(graph, "riot", "1.0.0") } + let(:two) { Solve::Artifact.new(graph, "riot", "2.0.0") } + let(:three) { Solve::Artifact.new(graph, "riot", "3.0.0") } - subject.dependencies[0].name.should eql(name) - end + let(:artifacts) do + [ + one, + two, + three + ].shuffle + end - it "the dependency added matches the given constraint" do - subject.dependencies(name, constraint) + it "orders artifacts by their version number" do + sorted = artifacts.sort - subject.dependencies[0].constraint.to_s.should eql(constraint) - end - end + sorted[0].should eql(one) + sorted[1].should eql(two) + sorted[2].should eql(three) end + end + describe "#dependencies" do context "given no arguments" do it "returns an array" do subject.dependencies.should be_a(Array) end it "returns an empty array if no dependencies have been accessed" do subject.dependencies.should have(0).items end + end + end - it "returns an array containing an dependency if one was accessed" do - subject.dependencies("nginx", "~> 0.101.5") + describe "#depends" do + context "given a name and constraint argument" do + let(:name) { "nginx" } + let(:constraint) { "~> 0.101.5" } - subject.dependencies.should have(1).item + context "given the dependency of the given name and constraint does not exist" do + it "returns a Solve::Artifact" do + subject.depends(name, constraint).should be_a(Solve::Artifact) + end + + it "adds a dependency with the given name and constraint to the list of dependencies" do + subject.depends(name, constraint) + + subject.dependencies.should have(1).item + subject.dependencies.first.name.should eql(name) + subject.dependencies.first.constraint.to_s.should eql(constraint) + end end end context "given only a name argument" do - it "returns an array containing a match all constraint (>= 0.0.0)" do - subject.dependencies("nginx").constraint.to_s.should eql(">= 0.0.0") + it "adds a dependency with a all constraint (>= 0.0.0)" do + subject.depends("nginx") + + subject.dependencies.should have(1).item + subject.dependencies.first.constraint.to_s.should eql(">= 0.0.0") end end + end - context "given an unexpected number of arguments" do - it "raises an ArgumentError if more than two are provided" do - lambda { - subject.dependencies(1, 2, 3) - }.should raise_error(ArgumentError, "Unexpected number of arguments. You gave: 3. Expected: 2 or less.") - end + describe "::get_dependency" do + before(:each) { subject.depends("nginx", "~> 1.2.3") } - it "raises an ArgumentError if a name argument is provided but it is nil" do - lambda { - subject.dependencies(nil) - }.should raise_error(ArgumentError, "A name must be specified. You gave: [nil].") - end + it "returns an instance of Solve::Dependency matching the given name and constraint" do + dependency = subject.get_dependency("nginx", "~> 1.2.3") - it "raises an ArgumentError if a name and constraint argument are provided but the name is nil" do - lambda { - subject.dependencies(nil, "= 1.0.0") - }.should raise_error(ArgumentError, 'A name must be specified. You gave: [nil, "= 1.0.0"].') - end + dependency.should be_a(Solve::Dependency) + dependency.name.should eql("nginx") + dependency.constraint.to_s.should eql("~> 1.2.3") end end describe "#delete" do context "given the artifact is a member of a graph" do