test/model_test.rb in extjs-mvc-0.3.4 vs test/model_test.rb in extjs-mvc-0.3.5

- old
+ new

@@ -164,10 +164,52 @@ assert_equal('last', record[:person][:last]) assert_equal('first', record[:person][:first]) end end + context "Person with User association (has_one relationship)" do + setup do + clean_all + User.extjs_fields(:id, :password) + Person.extjs_fields(:id, :user) + end + should "produce a valid store config" do + fields = Person.extjs_record[:fields] + assert_array_has_item(fields, 'has id') {|f| f[:name] === "id" } + assert_array_has_item(fields, 'has user_id') {|f| f[:name] === "user_id" and f[:mapping] == 'user.id' } + assert_array_has_item(fields, 'has user_password') {|f| f[:name] === "user_password"and f[:mapping] == 'user.password' } + end + should "produce a valid to_record record" do + person = Person.create!(:first => 'first', :last => 'last', :email => 'email') + user = User.create!(:person_id => person.id, :password => 'password') + record = person.reload.to_record + assert_equal(person.id, record[:id]) + assert_equal(user.id, record[:user][:id]) + assert_equal('password', record[:user][:password]) + end + end + + context "Person with User association (has_one/belongs_to relationship) cyclic reference" do + setup do + clean_all + User.extjs_fields(:id, :person) + Person.extjs_fields(:id, :user) + end + should "produce a valid store config for Person" do + fields = Person.extjs_record[:fields] + assert_array_has_item(fields, 'has id') {|f| f[:name] === "id" } + assert_array_has_item(fields, 'has user_id') {|f| f[:name] === "user_id" and f[:mapping] == 'user.id' } + end + should "produce a valid to_record record for Person" do + person = Person.create!(:first => 'first', :last => 'last', :email => 'email') + user = User.create!(:person_id => person.id, :password => 'password') + record = person.reload.to_record + assert_equal(person.id, record[:id]) + assert_equal(user.id, record[:user][:id]) + end + end + context "Fields should render with correct, ExtJS-compatible data-types" do setup do clean_all @fields = DataType.extjs_record[:fields] end @@ -202,11 +244,11 @@ should "Understand DEFAULT" do assert_array_has_item(@fields, 'has default_column with defaultValue == true') {|f| f[:name] == 'default_column' and f[:defaultValue] === true} end end - context "polymorphic assosiations" do + context "polymorphic associations" do setup do clean_all end should "return nil as class for a polymorphic relation" do @@ -218,11 +260,11 @@ fields = Address.extjs_record[:fields] assert_array_has_item(fields, 'has addressable_id') {|f| f[:name] === 'addressable_id' && !f[:mapping] } assert_array_has_item(fields, 'addressable_type') {|f| f[:name] === 'addressable_type' && !f[:mapping] } end - should "create the right store config when including members of the polymorpic association" do + should "create the right store config when including members of the polymorphic association" do Address.extjs_fields :street, :addressable => [:name] fields = Address.extjs_record[:fields] assert_array_has_item(fields, "has addressable_name") {|f| f[:name] === 'addressable_name' && f[:mapping] === 'addressable.name'} assert_array_has_item(fields, "has addressable_id") {|f| f[:name] === 'addressable_id' && !f[:mapping] } assert_array_has_item(fields, "has addressable_type") {|f| f[:name] === 'addressable_type' && !f[:mapping] } @@ -244,62 +286,100 @@ context "single table inheritance" do setup do clean_all end - should "fieldsets should be accessible from decendants" do + should "fieldsets should be accessible from descendants" do Location.extjs_fieldset :on_location, [:street] fields = House.extjs_record(:on_location)[:fields] assert_array_has_item(fields, 'has street') {|f| f[:name] === 'street' } assert_array_has_not_item(fields, 'has name') {|f| f[:name] === 'name' } end - should "fieldsets should be overrideable from decendants" do + should "fieldsets should be overrideable from descendants" do Location.extjs_fieldset :override, [:street] House.extjs_fieldset :override, [:name] fields = House.extjs_record(:override)[:fields] assert_array_has_not_item(fields, 'has street') {|f| f[:name] === 'street' } assert_array_has_item(fields, 'has name') {|f| f[:name] === 'name' } end end - context "ExtJS::Model::ClassMethods" do - - context "#extjs_extract_fieldset! default" do + context "ExtJS::Model::Util" do + context "#extract_fieldset_and_options default" do setup do - @fieldset, @fields = BogusModel.extjs_extract_fieldset! [:one, :two, :three] + @fieldset, @options = ExtJS::Model::Util.extract_fieldset_and_options [:fields => [:one, :two, :three]] + @fields = @options[:fields] end should "return :default when no fieldset provided" do assert_equal(:'default', @fieldset) end should "not alter the fields array" do assert_equal([:one, :two, :three], @fields) end end - context "#extjs_extract_fieldset! with explicit fieldset definition" do + context "#extract_fieldset_and_options with explicit fieldset definition and array with fields" do setup do - @fieldset, @fields = BogusModel.extjs_extract_fieldset! [:explicit, [:one, :two, :three]] + @fieldset, @options = ExtJS::Model::Util.extract_fieldset_and_options [:explicit, [:one, :two, :three]] + @fields = @options[:fields] end should "return :default when no fieldset provided" do assert_equal(:'explicit', @fieldset) end should "not alter the fields array" do assert_equal([:one, :two, :three], @fields) end end - context "#extjs_extract_fieldset! edge cases" do + context "#extract_fieldset_and_options with explicit fieldset definition and hash with fields" do + setup do + @fieldset, @options = ExtJS::Model::Util.extract_fieldset_and_options [:explicit, {:fields => [:one, :two, :three]}] + @fields = @options[:fields] + end + should "return :default when no fieldset provided" do + assert_equal(:'explicit', @fieldset) + end + should "not alter the fields array" do + assert_equal([:one, :two, :three], @fields) + end + end + + context "#extract_fieldset_and_options with only a hash" do + setup do + @fieldset, @options = ExtJS::Model::Util.extract_fieldset_and_options [{:fieldset => :explicit, :fields => [:one, :two, :three]}] + @fields = @options[:fields] + end + should "return :default when no fieldset provided" do + assert_equal(:'explicit', @fieldset) + end + should "not alter the fields array" do + assert_equal([:one, :two, :three], @fields) + end + end + + context "#extract_fieldset_and_options edge cases" do should "called without arguments" do - @fieldset, @fields = BogusModel.extjs_extract_fieldset! [] + @fieldset, @options = ExtJS::Model::Util.extract_fieldset_and_options [] + @fields = @options[:fields] assert_equal(:'default', @fieldset) assert_equal([], @fields) end should "called with only the fieldset and no field arguments" do - @fieldset, @fields = BogusModel.extjs_extract_fieldset! [:explicit] + @fieldset, @options = ExtJS::Model::Util.extract_fieldset_and_options [:explicit] + @fields = @options[:fields] assert_equal(:'explicit', @fieldset) assert_equal([], @fields) end + should "raise error when called with more than 2 arguments" do + assert_raise(ArgumentError) { ExtJS::Model::Util.extract_fieldset_and_options [:explicit, :some, {}] } + end + should "raise error when called with 2 arguments and the first one is no symbol" do + assert_raise(ArgumentError) { ExtJS::Model::Util.extract_fieldset_and_options [{ :fields => [] }, :explicit] } + end end + end + + context "ExtJS::Model::ClassMethods" do context "#process_fields" do should "handle a simple Array of Symbols" do @fields = BogusModel.process_fields :one, :two, :three assert_equal([{:name => :one}, {:name => :two}, {:name => :three}], @fields)