# coding: utf-8
require 'spec_helper'

describe JpPrefecture::Base do
  describe '#jp_prefecture' do
    describe 'カラム名の指定について' do
      context 'prefecture_code を指定した場合' do
        let(:model_class) do
          klass = Class.new(ActiveRecord::Base) do
            self.table_name = :places
            include JpPrefecture
            jp_prefecture :prefecture_code
          end

          klass.new(:prefecture_code => 1)
        end

        it 'prefecture_code のコードが変換できること' do
          model_class.prefecture.name.should eq '北海道'
        end
      end

      context 'prefecture_id を指定した場合' do
        let(:model_class) do
          klass = Class.new(ActiveRecord::Base) do
            self.table_name = :places
            include JpPrefecture
            jp_prefecture :prefecture_id
          end

          klass.new(:prefecture_id => 1)
        end

        it 'prefecture_id のコードが変換できること' do
          model_class.prefecture.name.should eq '北海道'
        end
      end
    end

    describe '生成するメソッド名の指定について' do
      context 'prefecture_method を指定した場合' do
        let(:model_class) do
          klass = Class.new(ActiveRecord::Base) do
            self.table_name = :places
            include JpPrefecture
            jp_prefecture :prefecture_code, :method_name => :prefecture_method
          end

          klass.new(:prefecture_code => 1)
        end

        it 'prefecture_method で結果が参照できること' do
          model_class.prefecture_method.name.should eq '北海道'
        end
      end
    end

    describe '都道府県の検索について' do
      let(:klass) do
        Class.new(ActiveRecord::Base) do
          self.table_name = :places
          include JpPrefecture
          jp_prefecture :prefecture_code
        end
      end

      context '都道府県が見つかった場合' do
        let(:model_class) { klass.new(:prefecture_code => 1) }
        it { model_class.should respond_to(:prefecture) }
        it { model_class.prefecture.should be_an_instance_of(JpPrefecture::Prefecture) }
        it { model_class.prefecture.name.should eq '北海道' }
      end

      context '都道府県が見つからなかった場合' do
        let(:model_class) { klass.new(:prefecture_code => 99) }
        it { model_class.should respond_to(:prefecture) }
        it { model_class.prefecture.should be_nil }
      end
    end
  end
end