aboutsummaryrefslogtreecommitdiffstats
path: root/spec/models/referential_cloning_spec.rb
diff options
context:
space:
mode:
authorAlban Peignier2017-12-12 21:24:24 +0100
committerAlban Peignier2017-12-12 21:26:57 +0100
commitddf3e6c70b5523227c5fbabdf981e301fbf14e5d (patch)
treec246b1afb015267adac51ecf44ffae19075294e7 /spec/models/referential_cloning_spec.rb
parent4b341d795100a8a5417e4d822ae2afb3ed70da8a (diff)
downloadchouette-core-ddf3e6c70b5523227c5fbabdf981e301fbf14e5d.tar.bz2
Move logic to ReferentialCloning. Improve specs. Refs #5283
Diffstat (limited to 'spec/models/referential_cloning_spec.rb')
-rw-r--r--spec/models/referential_cloning_spec.rb64
1 files changed, 62 insertions, 2 deletions
diff --git a/spec/models/referential_cloning_spec.rb b/spec/models/referential_cloning_spec.rb
index 5acd433ec..c01be20a9 100644
--- a/spec/models/referential_cloning_spec.rb
+++ b/spec/models/referential_cloning_spec.rb
@@ -1,6 +1,8 @@
require 'spec_helper'
RSpec.describe ReferentialCloning, :type => :model do
+ alias_method :referential_cloning, :subject
+
it 'should have a valid factory' do
expect(FactoryGirl.build(:referential_cloning)).to be_valid
end
@@ -8,11 +10,69 @@ RSpec.describe ReferentialCloning, :type => :model do
it { should belong_to :source_referential }
it { should belong_to :target_referential }
- describe "ReferentialCloningWorker" do
+ describe 'after commit' do
+ let(:referential_cloning) { FactoryGirl.create(:referential_cloning) }
+
+ it 'invoke clone method' do
+ expect(referential_cloning).to receive(:clone)
+ referential_cloning.run_callbacks(:commit)
+ end
+ end
+
+ describe '#clone' do
let(:referential_cloning) { FactoryGirl.create(:referential_cloning) }
it "should schedule a job in worker" do
- expect{referential_cloning.run_callbacks(:commit)}.to change {ReferentialCloningWorker.jobs.count}.by(1)
+ expect{referential_cloning.clone}.to change {ReferentialCloningWorker.jobs.count}.by(1)
+ end
+ end
+
+ describe '#clone!' do
+ let(:source_referential) { Referential.new slug: "source"}
+ let(:target_referential) { Referential.new slug: "target"}
+ let(:referential_cloning) do
+ ReferentialCloning.new source_referential: source_referential,
+ target_referential: target_referential
+ end
+
+ let(:cloner) { double }
+
+ before do
+ allow(AF83::SchemaCloner).to receive(:new).and_return cloner
+ allow(cloner).to receive(:clone_schema)
end
+
+ it 'creates a schema cloner with source and target schemas and clone schema' do
+ expect(AF83::SchemaCloner).to receive(:new).with(source_referential.slug, target_referential.slug).and_return(cloner)
+ expect(cloner).to receive(:clone_schema)
+
+ referential_cloning.clone!
+ end
+
+ context 'when clone_schema is performed without error' do
+ it "should have successful status" do
+ referential_cloning.clone!
+ expect(referential_cloning.status).to eq("successful")
+ end
+ end
+
+ context 'when clone_schema raises an error' do
+ it "should have failed status" do
+ expect(cloner).to receive(:clone_schema).and_raise("#fail")
+ referential_cloning.clone!
+ expect(referential_cloning.status).to eq("failed")
+ end
+ end
+
+ it "defines started_at" do
+ referential_cloning.clone!
+ expect(referential_cloning.started_at).not_to be(nil)
+ end
+
+ it "defines ended_at" do
+ referential_cloning.clone!
+ expect(referential_cloning.ended_at).not_to be(nil)
+ end
+
end
end