// ========================================================================== // 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 */

// test parsing of query string var store, storeKey, rec1, rec2, rec3, rec4, rec5, MyApp, q;

module(“SC.Query#containsRecordTypes”, {

setup: function() {
  MyApp = SC.Object.create();

  MyApp.Contact  = SC.Record.extend();
  MyApp.Person   = MyApp.Contact.extend(); // person is a type of contact
  MyApp.Group    = SC.Record.extend() ; // NOT a subclass
  MyApp.Foo      = SC.Record.extend();

},

teardown: function() { 
  MyApp = null ; 
  SC.Record.subclasses = SC.Set.create(); // reset subclasses
}

});

test(“single recordType with no subclasses”, function() {

var q = SC.Query.local(MyApp.Foo),
    expected = SC.CoreSet.create().add(MyApp.Foo);

same(q.get('expandedRecordTypes'), expected, 'should have only MyApp.Foo');

});

test(“multiple recordTypes with no subclasses”, function() {

var q = SC.Query.local([MyApp.Foo, MyApp.Group]),
    expected = SC.CoreSet.create().add(MyApp.Foo).add(MyApp.Group);

same(q.get('expandedRecordTypes'), expected, 'should have MyApp.Foo, MyApp.Group');

});

test(“base SC.Record”, function() {

var q = SC.Query.local(),
    expected = SC.CoreSet.create().addEach([SC.Record, MyApp.Foo, MyApp.Group, MyApp.Contact, MyApp.Person]);

same(q.get('expandedRecordTypes'), expected, 'should have all defined types');

});

test(“type with subclass”, function() {

var q = SC.Query.local(MyApp.Contact),
    expected = SC.CoreSet.create().addEach([MyApp.Contact, MyApp.Person]);

same(q.get('expandedRecordTypes'), expected, 'should have all Contact and Person');

});

test(“adding new type should invalidate property”, function() {

var q = SC.Query.local(MyApp.Contact),
    expected = SC.CoreSet.create().addEach([MyApp.Contact, MyApp.Person]);    
same(q.get('expandedRecordTypes'), expected, 'precond - should have all Contact and Person');

var Bar = MyApp.Person.extend(); // add a new record
expected.add(Bar);
same(q.get('expandedRecordTypes'), expected, 'should have all Contact, Person, and Bar');

});