require 'spec_helper'

describe RailsAdmin::Config::Sections do

  describe 'configure' do
    it 'configures without changing the section default list' do
      RailsAdmin.config Team do
        edit do
          configure :name do
            label 'Renamed'
          end
        end
      end
      fields = RailsAdmin.config(Team).edit.fields
      expect(fields.detect { |f| f.name == :name }.label).to eq('Renamed')
      expect(fields.count).to be >= 19 # not 1
    end

    it 'does not change the section list if set' do
      RailsAdmin.config Team do
        edit do
          field :manager
          configure :name do
            label 'Renamed'
          end
        end
      end
      fields = RailsAdmin.config(Team).edit.fields
      expect(fields.first.name).to eq(:manager)
      expect(fields.count).to eq(1) # not 19
    end
  end

  describe 'DSL field inheritance' do
    it 'is tested' do
      RailsAdmin.config do |config|
        config.model Fan do
          field :name do
            label do
              @label ||= "modified base #{label}"
            end
          end
          list do
            field :name do
              label do
                @label ||= "modified list #{label}"
              end
            end
          end
          edit do
            field :name do
              label do
                @label ||= "modified edit #{label}"
              end
            end
          end
          create do
            field :name do
              label do
                @label ||= "modified create #{label}"
              end
            end
          end
        end

      end
      expect(RailsAdmin.config(Fan).visible_fields.count).to eq(1)
      expect(RailsAdmin.config(Fan).visible_fields.first.label).to eq('modified base Their Name')
      expect(RailsAdmin.config(Fan).list.visible_fields.first.label).to eq('modified list Their Name')
      expect(RailsAdmin.config(Fan).export.visible_fields.first.label).to eq('modified base Their Name')
      expect(RailsAdmin.config(Fan).edit.visible_fields.first.label).to eq('modified edit Their Name')
      expect(RailsAdmin.config(Fan).create.visible_fields.first.label).to eq('modified create Their Name')
      expect(RailsAdmin.config(Fan).update.visible_fields.first.label).to eq('modified edit Their Name')
    end
  end

  describe 'DSL group inheritance' do
    it 'is tested' do
      RailsAdmin.config do |config|
        config.model Team do
          list do
            group 'a' do
              field :founded
            end

            group 'b' do
              field :name
              field :wins
            end
          end

          edit do
            group 'a' do
              field :name
            end

            group 'c' do
              field :founded
              field :wins
            end
          end

          update do
            group 'd' do
              field :wins
            end

            group 'e' do
              field :losses
            end
          end
        end
      end

      expect(RailsAdmin.config(Team).list.visible_groups.collect { |g| g.visible_fields.collect(&:name) }).to eq([[:founded], [:name, :wins]])
      expect(RailsAdmin.config(Team).edit.visible_groups.collect { |g| g.visible_fields.collect(&:name) }).to eq([[:name], [:founded, :wins]])
      expect(RailsAdmin.config(Team).create.visible_groups.collect { |g| g.visible_fields.collect(&:name) }).to eq([[:name], [:founded, :wins]])
      expect(RailsAdmin.config(Team).update.visible_groups.collect { |g| g.visible_fields.collect(&:name) }).to eq([[:name], [:founded], [:wins], [:losses]])
      expect(RailsAdmin.config(Team).visible_groups.collect { |g| g.visible_fields.collect(&:name) }.flatten.count).to eq(19)
      expect(RailsAdmin.config(Team).export.visible_groups.collect { |g| g.visible_fields.collect(&:name) }.flatten.count).to eq(19)
    end
  end
end