forked from rubygems/rubygems.org
/
dependency_test.rb
94 lines (78 loc) · 3.17 KB
/
dependency_test.rb
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
require File.dirname(__FILE__) + '/../test_helper'
class DependencyTest < ActiveSupport::TestCase
should belong_to :rubygem
should belong_to :version
context "with dependency" do
setup do
@version = Factory(:version)
@dependency = Factory.build(:dependency, :version => @version)
end
should "be valid with factory" do
assert_valid @dependency
end
should "return json" do
@dependency.save
json = JSON.parse(@dependency.to_json)
assert_equal %w[name requirements], json.keys
assert_equal @dependency.rubygem.name, json["name"]
assert_equal @dependency.requirements, json["requirements"]
end
should "return xml" do
@dependency.save
xml = Nokogiri.parse(@dependency.to_xml)
assert_equal "dependency", xml.root.name
assert_equal %w[name requirements], xml.root.children.select(&:element?).map(&:name)
assert_equal @dependency.rubygem.name, xml.at_css("name").content
assert_equal @dependency.requirements, xml.at_css("requirements").content
end
should "be pushed onto a redis list if a runtime dependency" do
@dependency.save
assert_equal "#{@dependency.name} #{@dependency.requirements}", $redis.lindex(Dependency.runtime_key(@version.full_name), 0)
end
end
context "with a Gem::Dependency" do
context "that refers to a Rubygem that exists" do
setup do
@rubygem = Factory(:rubygem)
@requirements = ['>= 0.0.0']
@gem_dependency = Gem::Dependency.new(@rubygem.name, @requirements)
@dependency = Factory(:dependency, :rubygem => @rubygem, :gem_dependency => @gem_dependency)
end
should "create a Dependency referring to the existing Rubygem" do
assert_equal @rubygem, @dependency.rubygem
assert_equal @requirements.to_s, @dependency.requirements
end
end
context "that refers to a Rubygem that exists and has multiple requirements" do
setup do
@rubygem = Factory(:rubygem)
@requirements = ['>= 0.0.0', '< 1.0.0']
@gem_dependency = Gem::Dependency.new(@rubygem.name, @requirements)
@dependency = Factory(:dependency, :rubygem => @rubygem, :gem_dependency => @gem_dependency)
end
should "create a Dependency referring to the existing Rubygem" do
assert_equal @rubygem, @dependency.rubygem
assert_equal @requirements.join(', '), @dependency.requirements
end
end
context "that refers to a Rubygem that does not exist" do
setup do
@rubygem_name = 'other-name'
@gem_dependency = Gem::Dependency.new(@rubygem_name, "= 1.0.0")
end
should "not create rubygem" do
dependency = Dependency.create(:gem_dependency => @gem_dependency)
assert dependency.new_record?
assert dependency.errors[:base].present?
assert_nil Rubygem.find_by_name(@rubygem_name)
end
end
end
context "without using Gem::Dependency" do
should "be invalid" do
dependency = Dependency.create(:gem_dependency => ["ruby-ajp", ">= 0.2.0"])
assert dependency.new_record?
assert dependency.errors[:rubygem].present?
end
end
end