spec/unit/a9n_spec.rb in a9n-0.4.0 vs spec/unit/a9n_spec.rb in a9n-0.4.1
- old
+ new
@@ -1,184 +1,228 @@
require "spec_helper"
describe A9n do
subject { described_class }
- after {
+ def clean_singleton(subject)
subject.instance_variable_set(:@storage, nil)
subject.instance_variable_set(:@env, nil)
subject.root = nil
subject.app = nil
- }
+ end
+ before { clean_singleton(subject) }
+ after { clean_singleton(subject) }
+
describe ".env" do
- before {
+ before do
subject.instance_variable_set(:@env, nil)
- }
+ end
context "app_env is set" do
- before {
+ before do
expect(subject).to receive(:app).and_return(double(env: "dwarf_env")).exactly(3).times
expect(subject).to receive(:get_env_var).never
- }
+ end
- it { expect(subject.env).to eq("dwarf_env") }
+ it do
+ expect(subject.env).to eq("dwarf_env")
+ end
end
context "when APP_ENV is set" do
- before {
+ before do
expect(subject).to receive(:app_env).and_return(nil)
expect(subject).to receive(:get_env_var).with("RAILS_ENV").and_return(nil)
expect(subject).to receive(:get_env_var).with("RACK_ENV").and_return(nil)
expect(subject).to receive(:get_env_var).with("APP_ENV").and_return("dwarf_env")
- }
+ end
- it { expect(subject.env).to eq("dwarf_env") }
+ it do
+ expect(subject.env).to eq("dwarf_env")
+ end
end
end
describe ".app" do
context "when rails not found" do
- before {
+ before do
expect(subject).to receive(:get_rails).and_return(nil)
- }
- specify {
+ end
+
+ it do
expect(subject.app).to be_nil
- }
+ end
end
context "when rails app is being used" do
let(:app) { double(env: "test", root: "/apps/a9n") }
- before {
+
+ before do
expect(subject).to receive(:get_rails).and_return(app)
- }
+ end
- specify { expect(subject.app).to eq(app) }
+ it do
+ expect(subject.app).to eq(app)
+ end
end
context "when custom non-rails app is being used" do
let(:app) { double(env: "test", root: "/apps/a9n") }
- before { subject.app = app }
- specify { expect(subject.app).to eq(app) }
+ before do
+ subject.app = app
+ end
+
+ it do
+ expect(subject.app).to eq(app)
+ end
end
end
describe ".root" do
let(:app) { double(env: "test", root: "/apps/a9n") }
- before { subject.app = app }
+ before do
+ subject.app = app
+ end
+
context "with custom path" do
- before {
+ before do
subject.root = "/home/knapo/workspace/a9n"
- }
- specify {
+ end
+
+ it do
expect(subject.root).to eq(Pathname.new("/home/knapo/workspace/a9n"))
- }
+ end
end
context "with local app path" do
- specify {
+ it do
expect(subject.root).to eq("/apps/a9n")
- }
+ end
end
end
describe ".get_rails" do
context "when defined" do
- before {
+ before do
Object.const_set(:Rails, Module.new)
- }
- after {
+ end
+
+ after do
Object.send(:remove_const, :Rails)
- }
- it {
+ end
+
+ it do
expect(subject.get_rails).to be_kind_of(Module)
- }
+ end
end
+
context "when not defined" do
- it { expect(subject.get_rails).to be_nil }
+ it do
+ expect(subject.get_rails).to be_nil
+ end
end
end
describe ".get_env_var" do
- before { ENV["DWARF"] = "little dwarf" }
- it { expect(subject.get_env_var("DWARF")).to eq("little dwarf")}
- it { expect(subject.get_env_var("IS_DWARF")).to be_nil}
+ before do
+ ENV["DWARF"] = "little dwarf"
+ end
+
+ it do
+ expect(subject.get_env_var("DWARF")).to eq("little dwarf")
+ end
+
+ it do
+ expect(subject.get_env_var("IS_DWARF")).to be_nil
+ end
end
describe ".default_files" do
- before {
+ before do
subject.root = File.expand_path("../../../test_app", __FILE__)
- }
- it {
+ end
+
+ it do
expect(subject.default_files[0]).to include("configuration.yml")
expect(Pathname.new(subject.default_files[0])).to be_absolute
expect(subject.default_files[1]).to include("a9n/mandrill.yml")
expect(Pathname.new(subject.default_files[1])).to be_absolute
- }
+ end
end
describe ".load" do
- before {
+ before do
expect(described_class).to receive(:env).exactly(2).times.and_return("dev")
subject.root = "/apps/test_app"
files.each do |f, cfg|
expect(A9n::Loader).to receive(:new).with(f, "dev").and_return(double(get: cfg))
end
- }
+ end
+
context "when no files given" do
- let(:files) {
+ let(:files) do
{
"/apps/test_app/config/file1.yml" => { host: "host1.com" },
"/apps/test_app/config/dir/file2.yml" => { host: "host2.com" }
}
- }
- before {
+ end
+
+ before do
expect(subject).to receive(:default_files).and_return(files.keys)
expect(subject).to receive(:get_absolute_paths_for).never
- }
- it {
+ end
+
+ it do
expect(subject.load).to eq(files.values)
- }
+ end
end
context "when custom files given" do
- let(:given_files) {
+ let(:given_files) do
["file3.yml", "/apps/test_app/config/dir/file4.yml"]
- }
- let(:files) {
+ end
+
+ let(:files) do
{
"/apps/test_app/config/file3.yml" => { host: "host3.com" },
"/apps/test_app/config/dir/file4.yml" => { host: "host4.com" }
}
- }
- before {
+ end
+
+ before do
expect(subject).to receive(:default_files).never
expect(subject).to receive(:get_absolute_paths_for).with(given_files).and_call_original
- }
- it {
+ end
+
+ it do
expect(subject.load(*given_files)).to eq(files.values)
- }
+ end
end
end
describe ".method_missing" do
context "when storage is empty" do
- before { expect(subject).to receive(:load).once }
- it {
+ before do
+ expect(subject).to receive(:load).once
+ end
+
+ it do
expect(subject.storage).to be_empty
expect { subject.whatever }.to raise_error(A9n::NoSuchConfigurationVariable)
- }
+ end
end
context "when storage is not empty" do
- before {
+ before do
subject.storage[:whenever] = 'whenever'
expect(subject).not_to receive(:load)
- }
- it {
+ end
+
+ it do
expect { subject.whatever }.to raise_error(A9n::NoSuchConfigurationVariable)
- }
+ end
end
end
end