// ========================================================================== // Project: SproutCore - JavaScript Application Framework // Copyright: ©2006-2011 Apple Inc. and contributors. // License: Licensed under MIT license (see license.js) // ========================================================================== /*globals module ok equals same test MyApp */

var MyFoo = null ; module(“SC.Record#unknownProperty”, {

setup: function() {
  SC.RunLoop.begin();
  MyApp = SC.Object.create({
    store: SC.Store.create()
  })  ;

  MyApp.Foo = SC.Record.extend();
  MyApp.json = { 
    foo: "bar", 
    number: 123,
    bool: YES,
    array: [1,2,3] 
  };

  MyApp.foo = MyApp.store.createRecord(MyApp.Foo, MyApp.json);

  MyApp.FooStrict = SC.Record.extend();

  SC.mixin(MyApp.FooStrict, {
    ignoreUnknownProperties: YES
  });

  MyApp.fooStrict = MyApp.store.createRecord(MyApp.FooStrict, MyApp.json);

},

teardown: function() {
  SC.RunLoop.end();
}

});

test(“get() returns attributes with no type changes if they exist”, function() {

'foo number bool array'.w().forEach(function(key) {
  equals(MyApp.foo.get(key), MyApp.json[key], "MyApp.foo.get(%@) should === attribute".fmt(key));
});

});

test(“get() unknown attribute returns undefined”, function() {

equals(MyApp.foo.get('imaginary'), undefined, 'imaginary property should be undefined');

});

test(“set() unknown property should add to dataHash”, function() {

MyApp.foo.set('blue', '0x00f');
equals(MyApp.store.dataHashes[MyApp.foo.storeKey].blue, '0x00f', 'should add blue attribute');

});

test(“set() should replace existing property”, function() {

MyApp.foo.set('foo', 'baz');
equals(MyApp.store.dataHashes[MyApp.foo.storeKey].foo, 'baz', 'should update foo attribute');

});

test(“set() on unknown property if model ignoreUnknownProperties=YES should not write it to data hash”, function() {

MyApp.fooStrict.set('foo', 'baz');
equals(MyApp.store.dataHashes[MyApp.fooStrict.storeKey].foo, 'bar', 'should not have written new value to dataHash');

});