spec/postgresql/diff/diff_spec.rb in ridgepole-0.6.5.beta10 vs spec/postgresql/diff/diff_spec.rb in ridgepole-0.6.5.beta11

- old
+ new

@@ -1,6 +1,10 @@ describe 'Ridgepole::Client.diff' do + before do + allow(Ridgepole::Diff).to receive(:postgresql?).and_return(true) + end + context 'when change column' do let(:actual_dsl) { <<-EOS create_table "clubs", force: :cascade do |t| t.string "name", limit: 255, default: "", null: false @@ -145,7 +149,60 @@ change_column("employee_clubs", "club_id", :integer, {:null=>true, :default=>nil}) change_column("employees", "last_name", :string, {:limit=>20, :default=>"XXX"}) EOS } + end + + describe 'column position warning' do + subject { Ridgepole::Client } + + context 'when adding a column to the last' do + let(:actual_dsl) { <<-EOS } + create_table "users", force: :cascade do |t| + t.string "name", null: false + end + EOS + + let(:expected_dsl) { <<-EOS } + create_table "users", force: :cascade do |t| + t.string "name", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + EOS + + it "doesn't warn anything" do + expect(Ridgepole::Logger.instance).to_not receive(:warn) + delta = subject.diff(actual_dsl, expected_dsl) + expect(delta).to be_differ + expect(delta.script).to_not include('after') + end + end + + context 'when adding a column to the middle' do + let(:actual_dsl) { <<-EOS } + create_table "users", force: :cascade do |t| + t.datetime "created_at", null: false + end + EOS + + let(:expected_dsl) { <<-EOS } + create_table "users", force: :cascade do |t| + t.string "name", null: false + t.integer "age", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + EOS + + it 'warns position' do + expect(Ridgepole::Logger.instance).to receive(:warn).with(/PostgreSQL doesn't support adding a new column .* users\.name/) + expect(Ridgepole::Logger.instance).to receive(:warn).with(/PostgreSQL doesn't support adding a new column .* users\.age/) + expect(Ridgepole::Logger.instance).to_not receive(:warn) + delta = subject.diff(actual_dsl, expected_dsl) + expect(delta).to be_differ + expect(delta.script).to_not include('after') + end + end end end