Fix spec on CI, and refactor

This commit is contained in:
uu59 2014-05-14 18:00:13 +09:00
parent 0595b454e9
commit f47ee2e154
2 changed files with 31 additions and 25 deletions

View File

@ -16,7 +16,7 @@ class Plugin
def install! def install!
if valid? && !installed? if valid? && !installed?
if fluent_gem("install", gem_name, "-v", version) if fluent_gem("install", gem_name, "-v", version)
File.open(gemfile, "a") do |f| File.open(gemfile_path, "a") do |f|
f.puts format_gemfile f.puts format_gemfile
end end
end end
@ -27,11 +27,11 @@ class Plugin
if valid? && installed? if valid? && installed?
# NOTE: do not uninstall gem actually for now. because it is not necessary, and slow job # NOTE: do not uninstall gem actually for now. because it is not necessary, and slow job
new_gemfile = "" new_gemfile = ""
File.open(gemfile).each_line do |line| File.open(gemfile_path).each_line do |line|
next if line.strip == format_gemfile next if line.strip == format_gemfile
new_gemfile << line new_gemfile << line
end end
File.open(gemfile, "w"){|f| f.write new_gemfile } File.open(gemfile_path, "w"){|f| f.write new_gemfile }
end end
end end
@ -46,7 +46,7 @@ class Plugin
end end
def installed? def installed?
File.read(gemfile).lines.map(&:strip).grep(format_gemfile).present? File.read(gemfile_path).lines.map(&:strip).grep(format_gemfile).present?
end end
def format_gemfile def format_gemfile
@ -54,35 +54,36 @@ class Plugin
end end
def self.gemfile_changed? def self.gemfile_changed?
# if true, rails server needs to restart # if true, rails server needs to restart }
@initial_gemfile_content != File.read(gemfile) @initial_gemfile_content != File.read(gemfile_path)
end end
def self.gemfile def self.gemfile_path
if Rails.env == "test" if Rails.env == "test"
gemfile = Rails.root + "tmp/Gemfile.plugins" gemfile_path = "/tmp/fluentd-ui-test-Gemfile.plugins" # can't create a file under Rails.root directory on Circle CI
else else
gemfile = Rails.root + "Gemfile.plugins" gemfile_path = Rails.root + "Gemfile.plugins"
end end
end
unless File.exists?(gemfile) def self.pristine!
File.open(gemfile, "w") do |f| unless File.exists?(gemfile_path)
File.open(gemfile_path, "w") do |f|
f.write "# USED BY fluentd-ui internally\n" f.write "# USED BY fluentd-ui internally\n"
end end
end end
@initial_gemfile_content ||= File.read(gemfile) @initial_gemfile_content = File.read(gemfile_path)
gemfile
end end
pristine!
def gemfile_path
def gemfile self.class.gemfile_path
self.class.gemfile
end end
private private
def fluent_gem(*commands) def fluent_gem(*commands)
unless system(*%W(bundle exec gem) + commands) # TODO: should grab stdout/stderr unless system(*%W(bundle exec fluent-gem) + commands) # TODO: should grab stdout/stderr
raise GemError, "failed command #{commands}" raise GemError, "failed command #{commands}"
end end
true true

View File

@ -2,15 +2,24 @@ require 'spec_helper'
describe Plugin do describe Plugin do
let(:plugin) { FactoryGirl.build(:plugin) } let(:plugin) { FactoryGirl.build(:plugin) }
before do
Kernel.stub(:system) # do not call `system('fluent-gem install ..')` on CI
end
after do
File.unlink Plugin.gemfile_path if File.exist?(Plugin.gemfile_path)
Plugin.pristine!
end
describe "#valid?" do describe "#valid?" do
describe "gem_name" do describe "gem_name" do
subject { plugin } subject { plugin }
before { plugin.gem_name = gem_name } before { plugin.gem_name = gem_name }
context "nil is invalid" do context "nil is invalid" do
let(:gem_name) { nil } let(:gem_name) { nil }
it { should_not be_valid } it { should_not be_valid }
end end
context "somthing filled is valid" do context "somthing filled is valid" do
let(:gem_name) { "foobar" } let(:gem_name) { "foobar" }
it { should be_valid } it { should be_valid }
@ -20,10 +29,12 @@ describe Plugin do
describe "version" do describe "version" do
subject { plugin } subject { plugin }
before { plugin.version = version } before { plugin.version = version }
context "nil is invalid" do context "nil is invalid" do
let(:version) { nil } let(:version) { nil }
it { should_not be_valid } it { should_not be_valid }
end end
context "somthing filled is valid" do context "somthing filled is valid" do
let(:version) { "0.0.1" } let(:version) { "0.0.1" }
it { should be_valid } it { should be_valid }
@ -32,11 +43,6 @@ describe Plugin do
end end
describe "#install!" do describe "#install!" do
before do
File.unlink Plugin.gemfile
Plugin.instance_variable_set(:@initial_gemfile_content, nil)
end
describe "invoke fluent_gem" do describe "invoke fluent_gem" do
after do after do
plugin.stub(:valid?).and_return { valid } plugin.stub(:valid?).and_return { valid }
@ -85,13 +91,12 @@ describe Plugin do
end end
describe "uninstall!" do describe "uninstall!" do
let(:installed_plugin) { FactoryGirl.build(:plugin) } let(:installed_plugin) { FactoryGirl.build(:plugin, gem_name: "fluent-plugin-foobar") }
before do before do
installed_plugin.stub(:fluent_gem).and_return { true } installed_plugin.stub(:fluent_gem).and_return { true }
File.unlink Plugin.gemfile
installed_plugin.install! installed_plugin.install!
Plugin.instance_variable_set(:@initial_gemfile_content, nil) Plugin.pristine!
end end
before do before do