require File.dirname(__FILE__) + '/../spec_helper'

describe Netzke::Basepack::FormPanel do
  it "should have correct fields" do
    form = Netzke::Basepack::FormPanel.new(:model => 'User')
    form.fields_from_model.keys.map(&:to_s).sort.should == %w(created_at first_name id last_name role__name updated_at)
  end
  
  it "should extract fields from config" do
    form = Netzke::Basepack::FormPanel.new(:model => 'User', :items => [{:xtype => 'fieldset', :items => [:first_name, {:name => "last_name"}]}, :created_at, {:name => :updated_at}])
    
    form.fields_from_config.keys.map(&:to_s).sort.should == %w(created_at first_name id last_name updated_at)
  end
  
  it "should set correct xtype for columns" do
    form = Netzke::Basepack::FormPanel.new(:model => 'User', :items => [:first_name, :created_at, :role__name])
    
    form.fields[:first_name][:xtype].should == :textfield
    form.fields[:created_at][:xtype].should == :xdatetime
    form.fields[:role__name][:xtype].should == :combobox
  end
  
  it "should set correct default field labels" do
    form = Netzke::Basepack::FormPanel.new(:model => 'User', :items => [:first_name, :created_at, :role__name])
    
    form.fields[:first_name][:field_label].should == "First name"
    form.fields[:created_at][:field_label].should == "Created at"
    form.fields[:role__name][:field_label].should == "Role name"
  end
  
  it "should set correct field values" do
    role = Factory(:role, :name => "warrior")
    user = Factory(:user, :first_name => "Carlos", :last_name => "Castaneda", :role => role)
    
    form = Netzke::Basepack::FormPanel.new(:model => 'User', :record => user, :items => [:first_name, :last_name, :role__name])
    
    form.fields[:first_name][:value].should == "Carlos"
    form.fields[:last_name][:value].should == "Castaneda"
    form.fields[:role__name][:value].should == "warrior"
  end
  
  it "should add primary key field automatically when omitted" do
    form = Netzke::Basepack::FormPanel.new(:model => 'User', :items => [:first_name, :last_name, :role__name])
    form.fields[:id].should_not be_nil
  end
  
  it "should pass normalized items to JS" do
    form = Netzke::Basepack::FormPanel.new(:model => 'User', :items => [
      {:xtype => 'fieldset', :items => [
        :first_name, 
        {:name => "last_name"}
      ]},
      :created_at,
      {:name => :updated_at}
    ])

    form.items[0][:name].should == "id"
    form.items[1][:items][0][:name].should == "first_name"
    form.items[1][:items][1][:name].should == "last_name"
    form.items[2][:name].should == "created_at"
    form.items[3][:name].should == "updated_at"
  end
  
  it "should detect association column" do
    form = Netzke::Basepack::FormPanel.new(:model => 'User', :items => [:role_id])
    
    form.items[1][:name].should == "role__name"
  end
  
end