require 'rails_helper'
require 'rake'

describe 'Settings Rake' do

  describe '#per_page_code_migration' do

    before do
      Rake.application.rake_require "tasks/settings"
      Rake::Task.define_task(:environment)
    end

    let :run_rake_task do
      Rake::Task['settings:per_page_code_migration'].reenable
      Rake.application.invoke_task 'settings:per_page_code_migration'
    end

    context 'Neither per_page_code_head or per_page_code Settings exist' do
      before do
        Setting.where(key: 'per_page_code').first&.destroy
        Setting.where(key: 'per_page_code_head').first&.destroy
        run_rake_task
      end

      it 'has per_page_code_head setting present and no per_page_code' do
        expect(Setting.where(key: 'per_page_code_head').count).to eq(1)
        expect(Setting['per_page_code_head']).to eq(nil)
        expect(Setting.where(key: 'per_page_code').count).to eq(0)
      end
    end

    context 'Both per_page_code_head or per_page_code Settings exist' do
      before do
        Setting['per_page_code'] = 'per_page_code'
        Setting['per_page_code_head'] = 'per_page_code_head'
        run_rake_task
      end

      it 'has per_page_code_head setting present and no per_page_code' do
        expect(Setting.where(key: 'per_page_code_head').count).to eq(1)
        expect(Setting['per_page_code_head']).to eq('per_page_code_head')
        expect(Setting.where(key: 'per_page_code').count).to eq(0)
      end
    end

    context 'per_page_code_head exists, but per_page_code does not' do
      before do
        Setting.where(key: 'per_page_code').first&.destroy
        Setting['per_page_code_head'] = 'per_page_code_head'
        run_rake_task
      end

      it 'has per_page_code_head setting present and no per_page_code' do
        expect(Setting.where(key: 'per_page_code_head').count).to eq(1)
        expect(Setting['per_page_code_head']).to eq('per_page_code_head')
        expect(Setting.where(key: 'per_page_code').count).to eq(0)
      end
    end

    context 'per_page_code_head does not exist, but per_page_code does' do
      before do
        Setting['per_page_code'] = 'per_page_code'
        Setting.where(key: 'per_page_code_head').first&.destroy
        run_rake_task
      end

      it 'has per_page_code_head setting present and no per_page_code' do
        expect(Setting.where(key: 'per_page_code_head').count).to eq(1)
        expect(Setting['per_page_code_head']).to eq('per_page_code')
        expect(Setting.where(key: 'per_page_code').count).to eq(0)
      end
    end

  end

end
