ruby/spec/bundler/commands/viz_spec.rb

144 lines
4.1 KiB
Ruby

# frozen_string_literal: true
RSpec.describe "bundle viz", if: Bundler.which("dot") do
before do
base_system_gems "rexml", "ruby-graphviz"
end
it "graphs gems from the Gemfile" do
install_gemfile <<-G
source "https://gem.repo1"
gem "myrack"
gem "myrack-obama"
G
bundle "viz"
expect(out).to include("gem_graph.png")
bundle "viz", format: "debug"
expect(out).to eq(<<~DOT.strip)
digraph Gemfile {
concentrate = "true";
normalize = "true";
nodesep = "0.55";
edge[ weight = "2"];
node[ fontname = "Arial, Helvetica, SansSerif"];
edge[ fontname = "Arial, Helvetica, SansSerif" , fontsize = "12"];
default [style = "filled", fillcolor = "#B9B9D5", shape = "box3d", fontsize = "16", label = "default"];
myrack [style = "filled", fillcolor = "#B9B9D5", label = "myrack"];
default -> myrack [constraint = "false"];
"myrack-obama" [style = "filled", fillcolor = "#B9B9D5", label = "myrack-obama"];
default -> "myrack-obama" [constraint = "false"];
"myrack-obama" -> myrack;
}
debugging bundle viz...
DOT
end
it "graphs gems that are prereleases" do
build_repo2 do
build_gem "myrack", "1.3.pre"
end
install_gemfile <<-G
source "https://gem.repo2"
gem "myrack", "= 1.3.pre"
gem "myrack-obama"
G
bundle "viz"
expect(out).to include("gem_graph.png")
bundle "viz", format: :debug, version: true
expect(out).to eq(<<~EOS.strip)
digraph Gemfile {
concentrate = "true";
normalize = "true";
nodesep = "0.55";
edge[ weight = "2"];
node[ fontname = "Arial, Helvetica, SansSerif"];
edge[ fontname = "Arial, Helvetica, SansSerif" , fontsize = "12"];
default [style = "filled", fillcolor = "#B9B9D5", shape = "box3d", fontsize = "16", label = "default"];
myrack [style = "filled", fillcolor = "#B9B9D5", label = "myrack\\n1.3.pre"];
default -> myrack [constraint = "false"];
"myrack-obama" [style = "filled", fillcolor = "#B9B9D5", label = "myrack-obama\\n1.0"];
default -> "myrack-obama" [constraint = "false"];
"myrack-obama" -> myrack;
}
debugging bundle viz...
EOS
end
context "with another gem that has a graphviz file" do
before do
update_repo4 do
build_gem "graphviz", "999" do |s|
s.write("lib/graphviz.rb", "abort 'wrong graphviz gem loaded'")
end
end
system_gems "graphviz-999", gem_repo: gem_repo4
end
it "loads the correct ruby-graphviz gem" do
install_gemfile <<-G
source "https://gem.repo1"
gem "myrack"
gem "myrack-obama"
G
bundle "viz", format: "debug"
expect(out).to eq(<<~DOT.strip)
digraph Gemfile {
concentrate = "true";
normalize = "true";
nodesep = "0.55";
edge[ weight = "2"];
node[ fontname = "Arial, Helvetica, SansSerif"];
edge[ fontname = "Arial, Helvetica, SansSerif" , fontsize = "12"];
default [style = "filled", fillcolor = "#B9B9D5", shape = "box3d", fontsize = "16", label = "default"];
myrack [style = "filled", fillcolor = "#B9B9D5", label = "myrack"];
default -> myrack [constraint = "false"];
"myrack-obama" [style = "filled", fillcolor = "#B9B9D5", label = "myrack-obama"];
default -> "myrack-obama" [constraint = "false"];
"myrack-obama" -> myrack;
}
debugging bundle viz...
DOT
end
end
context "--without option" do
it "one group" do
install_gemfile <<-G
source "https://gem.repo1"
gem "activesupport"
group :rails do
gem "rails"
end
G
bundle "viz --without=rails"
expect(out).to include("gem_graph.png")
end
it "two groups" do
install_gemfile <<-G
source "https://gem.repo1"
gem "activesupport"
group :myrack do
gem "myrack"
end
group :rails do
gem "rails"
end
G
bundle "viz --without=rails:myrack"
expect(out).to include("gem_graph.png")
end
end
end