diff options
| author | Alban Peignier | 2017-12-12 21:24:24 +0100 | 
|---|---|---|
| committer | Alban Peignier | 2017-12-12 21:26:57 +0100 | 
| commit | ddf3e6c70b5523227c5fbabdf981e301fbf14e5d (patch) | |
| tree | c246b1afb015267adac51ecf44ffae19075294e7 /spec/models/referential_cloning_spec.rb | |
| parent | 4b341d795100a8a5417e4d822ae2afb3ed70da8a (diff) | |
| download | chouette-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.rb | 64 | 
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 | 
