From 258ca5f16581f0e8befa493644225a02ae2fc002 Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Fri, 26 Mar 2010 16:27:18 -0700 Subject: moved all uneeded files out, widgets.html works, tests horribly broken --- test/Base64Test.js | 5 - test/DataStoreTest.js | 616 ------------------------- test/EntityDeclarationTest.js | 50 -- test/ModelTest.js | 84 ---- test/ScopeSpec.js | 16 +- test/ScopeTest.js | 145 ------ test/ServerTest.js | 42 -- test/UsersTest.js | 26 -- test/delete/ScopeTest.js | 145 ++++++ test/moveToAngularCom/Base64Test.js | 5 + test/moveToAngularCom/DataStoreTest.js | 616 +++++++++++++++++++++++++ test/moveToAngularCom/EntityDeclarationTest.js | 50 ++ test/moveToAngularCom/ModelTest.js | 84 ++++ test/moveToAngularCom/ServerTest.js | 42 ++ test/moveToAngularCom/UsersTest.js | 26 ++ 15 files changed, 976 insertions(+), 976 deletions(-) delete mode 100644 test/Base64Test.js delete mode 100644 test/DataStoreTest.js delete mode 100644 test/EntityDeclarationTest.js delete mode 100644 test/ModelTest.js delete mode 100644 test/ScopeTest.js delete mode 100644 test/ServerTest.js delete mode 100644 test/UsersTest.js create mode 100644 test/delete/ScopeTest.js create mode 100644 test/moveToAngularCom/Base64Test.js create mode 100644 test/moveToAngularCom/DataStoreTest.js create mode 100644 test/moveToAngularCom/EntityDeclarationTest.js create mode 100644 test/moveToAngularCom/ModelTest.js create mode 100644 test/moveToAngularCom/ServerTest.js create mode 100644 test/moveToAngularCom/UsersTest.js (limited to 'test') diff --git a/test/Base64Test.js b/test/Base64Test.js deleted file mode 100644 index a9353186..00000000 --- a/test/Base64Test.js +++ /dev/null @@ -1,5 +0,0 @@ -Base64Test = TestCase('Base64Test'); - -Base64Test.prototype.testEncodeDecode = function(){ - assertEquals(Base64.decode(Base64.encode('hello')), 'hello'); -}; diff --git a/test/DataStoreTest.js b/test/DataStoreTest.js deleted file mode 100644 index 87c5be2e..00000000 --- a/test/DataStoreTest.js +++ /dev/null @@ -1,616 +0,0 @@ -DataStoreTest = TestCase('DataStoreTest'); - -DataStoreTest.prototype.testSavePostsToServer = function(){ - expectAsserts(10); - var response; - var post = function(data, callback){ - var method = data[0][0]; - var posted = data[0][2]; - assertEquals("POST", method); - assertEquals("abc", posted.$entity); - assertEquals("123", posted.$id); - assertEquals("1", posted.$version); - assertFalse('function' == typeof posted.save); - response = fromJson(toJson(posted)); - response.$entity = "abc"; - response.$id = "123"; - response.$version = "2"; - callback(200, [response]); - }; - var datastore = new DataStore(post); - var model = datastore.entity('abc', {name: "value"})(); - model.$id = "123"; - model.$version = "1"; - - datastore.save(model, function(obj){ - assertTrue(obj === model); - assertEquals(obj.$entity, "abc"); - assertEquals(obj.$id, "123"); - assertEquals(obj.$version, "2"); - assertEquals(obj.name, "value"); - obj.after = true; - }); - datastore.flush(); -}; - -DataStoreTest.prototype.testLoadGetsFromServer = function(){ - expectAsserts(12); - var post = function(data, callback){ - var method = data[0][0]; - var path = data[0][1]; - assertEquals("GET", method); - assertEquals("abc/1", path); - response = [{$entity:'abc', $id:'1', $version:'2', key:"value"}]; - callback(200, response); - }; - var datastore = new DataStore(post); - - var model = datastore.entity("abc", {merge:true})(); - assertEquals(datastore.load(model, '1', function(obj){ - assertEquals(obj.$entity, "abc"); - assertEquals(obj.$id, "1"); - assertEquals(obj.$version, "2"); - assertEquals(obj.key, "value"); - }), model); - datastore.flush(); - assertEquals(model.$entity, "abc"); - assertEquals(model.$id, "1"); - assertEquals(model.$version, "2"); - assertEquals(model.key, "value"); - assertEquals(model.merge, true); -}; - -DataStoreTest.prototype.testRemove = function(){ - expectAsserts(8); - var response; - var post = function(data, callback){ - var method = data[0][0]; - var posted = data[0][2]; - assertEquals("DELETE", method); - assertEquals("abc", posted.$entity); - assertEquals("123", posted.$id); - assertEquals("1", posted.$version); - assertFalse('function' == typeof posted.save); - response = fromJson(toJson(posted)); - response.$entity = "abc"; - response.$id = "123"; - response.$version = "2"; - callback(200, [response]); - }; - var model; - var datastore = new DataStore(post); - model = datastore.entity('abc', {name: "value"})(); - model.$id = "123"; - model.$version = "1"; - - datastore.remove(model, function(obj){ - assertEquals(obj.$id, "123"); - assertEquals(obj.$version, "2"); - assertEquals(obj.name, "value"); - obj.after = true; - }); - datastore.flush(); - -}; - - -DataStoreTest.prototype.test401ResponseDoesNotCallCallback = function(){ - expectAsserts(1); - var post = function(data, callback) { - callback(200, {$status_code: 401}); - }; - - var datastore = new DataStore(post, {login:function(){ - assertTrue(true); - }}); - - var onLoadAll = function(){ - assertTrue(false, "onLoadAll should not be called when response is status 401"); - }; - datastore.bulkRequest.push({}); - datastore.flush(); - datastore.loadAll({type: "A"}, onLoadAll); -}; - -DataStoreTest.prototype.test403ResponseDoesNotCallCallback = function(){ - expectAsserts(1); - var post = function(data, callback) { - callback(200, [{$status_code: 403}]); - }; - - var datastore = new DataStore(post, {notAuthorized:function(){ - assertTrue(true); - }}); - - var onLoadAll = function(){ - assertTrue(false, "onLoadAll should not be called when response is status 403"); - }; - datastore.bulkRequest.push({}); - datastore.flush(); - datastore.loadAll({type: "A"}, onLoadAll); -}; - -DataStoreTest.prototype.testLoadCalledWithoutIdShouldBeNoop = function(){ - expectAsserts(2); - var post = function(url, callback){ - assertTrue(false); - }; - var datastore = new DataStore(post); - var model = datastore.entity("abc")(); - assertEquals(datastore.load(model, undefined), model); - assertEquals(model.$entity, "abc"); -}; - -DataStoreTest.prototype.testEntityFactory = function(){ - var ds = new DataStore(); - var Recipe = ds.entity("Recipe", {a:1, b:2}); - assertEquals(Recipe.title, "Recipe"); - assertEquals(Recipe.defaults.a, 1); - assertEquals(Recipe.defaults.b, 2); - - var recipe = Recipe(); - assertEquals(recipe.$entity, "Recipe"); - assertEquals(recipe.a, 1); - assertEquals(recipe.b, 2); - - recipe = new Recipe(); - assertEquals(recipe.$entity, "Recipe"); - assertEquals(recipe.a, 1); - assertEquals(recipe.b, 2); -}; - -DataStoreTest.prototype.testEntityFactoryNoDefaults = function(){ - var ds = new DataStore(); - var Recipe = ds.entity("Recipe"); - assertEquals(Recipe.title, "Recipe"); - - recipe = new Recipe(); - assertEquals(recipe.$entity, "Recipe"); -}; - -DataStoreTest.prototype.testEntityFactoryWithInitialValues = function(){ - var ds = new DataStore(); - var Recipe = ds.entity("Recipe"); - - var recipe = Recipe({name: "name"}); - assertEquals("name", recipe.name); -}; - -DataStoreTest.prototype.testEntityLoad = function(){ - var ds = new DataStore(); - var Recipe = ds.entity("Recipe", {a:1, b:2}); - ds.load = function(instance, id, callback){ - callback.apply(instance); - return instance; - }; - var instance = null; - var recipe2 = Recipe.load("ID", function(){ - instance = this; - }); - assertTrue(recipe2 === instance); -}; - -DataStoreTest.prototype.testSaveScope = function(){ - var ds = new DataStore(); - var log = ""; - var Person = ds.entity("Person"); - var person1 = Person({name:"A", $entity:"Person", $id:"1", $version:"1"}, ds); - person1.$$anchor = "A"; - var person2 = Person({name:"B", $entity:"Person", $id:"2", $version:"2"}, ds); - person2.$$anchor = "B"; - var anchor = {}; - ds.anchor = anchor; - ds._jsonRequest = function(request, callback){ - log += "save(" + request[2].$id + ");"; - callback({$id:request[2].$id}); - }; - ds.saveScope({person1:person1, person2:person2, - ignoreMe:{name: "ignore", save:function(callback){callback();}}}, function(){ - log += "done();"; - }); - assertEquals("save(1);save(2);done();", log); - assertEquals(1, anchor.A); - assertEquals(2, anchor.B); -}; - -DataStoreTest.prototype.testEntityLoadAllRows = function(){ - var ds = new DataStore(); - var Recipe = ds.entity("Recipe"); - var list = []; - ds.loadAll = function(entity, callback){ - assertTrue(Recipe === entity); - callback.apply(list); - return list; - }; - var items = Recipe.all(function(){ - assertTrue(list === this); - }); - assertTrue(items === list); -}; - -DataStoreTest.prototype.testLoadAll = function(){ - expectAsserts(8); - var post = function(data, callback){ - assertEquals("GET", data[0][0]); - assertEquals("A", data[0][1]); - callback(200, [[{$entity:'A', $id:'1'},{$entity:'A', $id:'2'}]]); - }; - var datastore = new DataStore(post); - var list = datastore.entity("A").all(function(){ - assertTrue(true); - }); - datastore.flush(); - assertEquals(list.length, 2); - assertEquals(list[0].$entity, "A"); - assertEquals(list[0].$id, "1"); - assertEquals(list[1].$entity, "A"); - assertEquals(list[1].$id, "2"); -}; - -DataStoreTest.prototype.testQuery = function(){ - expectAsserts(5); - var post = function(data, callback) { - assertEquals("GET", data[0][0]); - assertEquals("Employee/managerId=123abc", data[0][1]); - callback(200, [[{$entity:"Employee", $id: "456", managerId: "123ABC"}]]); - - }; - var datastore = new DataStore(post); - var Employee = datastore.entity("Employee"); - var list = Employee.query('managerId', "123abc", function(){ - assertTrue(true); - }); - datastore.flush(); - assertJsonEquals([[{$entity:"Employee", $id: "456", managerId: "123ABC"}]], datastore._cache.$collections); - assertEquals(list[0].$id, "456"); -}; - -DataStoreTest.prototype.testLoadingDocumentRefreshesExistingArrays = function() { - expectAsserts(12); - var post; - var datastore = new DataStore(function(r, c){post(r,c);}); - var Book = datastore.entity('Book'); - post = function(req, callback) { - callback(200, [[{$id:1, $entity:"Book", name:"Moby"}, - {$id:2, $entity:"Book", name:"Dick"}]]); - }; - var allBooks = Book.all(); - datastore.flush(); - var queryBooks = Book.query("a", "b"); - datastore.flush(); - assertEquals("Moby", allBooks[0].name); - assertEquals("Dick", allBooks[1].name); - assertEquals("Moby", queryBooks[0].name); - assertEquals("Dick", queryBooks[1].name); - - post = function(req, callback) { - assertEquals('[["GET","Book/1"]]', toJson(req)); - callback(200, [{$id:1, $entity:"Book", name:"Moby Dick"}]); - }; - var book = Book.load(1); - datastore.flush(); - assertEquals("Moby Dick", book.name); - assertEquals("Moby Dick", allBooks[0].name); - assertEquals("Moby Dick", queryBooks[0].name); - - post = function(req, callback) { - assertEquals('POST', req[0][0]); - callback(200, [{$id:1, $entity:"Book", name:"The Big Fish"}]); - }; - book.$save(); - datastore.flush(); - assertEquals("The Big Fish", book.name); - assertEquals("The Big Fish", allBooks[0].name); - assertEquals("The Big Fish", queryBooks[0].name); -}; - -DataStoreTest.prototype.testEntityProperties = function() { - expectAsserts(2); - var datastore = new DataStore(); - var callback = {}; - - datastore._jsonRequest = function(request, callbackFn) { - assertJsonEquals(["GET", "Cheese/$properties"], request); - assertEquals(callback, callbackFn); - }; - - var Cheese = datastore.entity("Cheese"); - Cheese.properties(callback); - -}; - -DataStoreTest.prototype.testLoadInstanceIsNotFromCache = function() { - var post; - var datastore = new DataStore(function(r, c){post(r,c);}); - var Book = datastore.entity('Book'); - - post = function(req, callback) { - assertEquals('[["GET","Book/1"]]', toJson(req)); - callback(200, [{$id:1, $entity:"Book", name:"Moby Dick"}]); - }; - var book = Book.load(1); - datastore.flush(); - assertEquals("Moby Dick", book.name); - assertFalse(book === datastore._cache['Book/1']); -}; - -DataStoreTest.prototype.testLoadStarsIsNewDocument = function() { - var datastore = new DataStore(); - var Book = datastore.entity('Book'); - var book = Book.load('*'); - assertEquals('Book', book.$entity); -}; - -DataStoreTest.prototype.testUndefinedEntityReturnsNullValueObject = function() { - var datastore = new DataStore(); - var Entity = datastore.entity(undefined); - var all = Entity.all(); - assertEquals(0, all.length); -}; - -DataStoreTest.prototype.testFetchEntities = function(){ - expectAsserts(6); - var post = function(data, callback){ - assertJsonEquals(["GET", "$entities"], data[0]); - callback(200, [{A:0, B:0}]); - }; - var datastore = new DataStore(post); - var entities = datastore.entities(function(){ - assertTrue(true); - }); - datastore.flush(); - assertJsonEquals([], datastore.bulkRequest); - assertEquals(2, entities.length); - assertEquals("A", entities[0].title); - assertEquals("B", entities[1].title); -}; - -DataStoreTest.prototype.testItShouldMigrateSchema = function() { - var datastore = new DataStore(); - var Entity = datastore.entity("Entity", {a:[], user:{name:"Misko", email:""}}); - var doc = Entity().$loadFrom({b:'abc', user:{email:"misko@hevery.com"}}); - assertFalse( - toJson({a:[], b:'abc', user:{name:"Misko", email:"misko@hevery.com"}}) == - toJson(doc)); - doc.$migrate(); - assertEquals( - toJson({a:[], b:'abc', user:{name:"Misko", email:"misko@hevery.com"}}), - toJson(doc)); -}; - -DataStoreTest.prototype.testItShouldCollectRequestsForBulk = function() { - var ds = new DataStore(); - var Book = ds.entity("Book"); - var Library = ds.entity("Library"); - Book.all(); - Library.load("123"); - assertEquals(2, ds.bulkRequest.length); - assertJsonEquals(["GET", "Book"], ds.bulkRequest[0]); - assertJsonEquals(["GET", "Library/123"], ds.bulkRequest[1]); -}; - -DataStoreTest.prototype.testEmptyFlushShouldDoNothing = function () { - var ds = new DataStore(function(){ - fail("expecting noop"); - }); - ds.flush(); -}; - -DataStoreTest.prototype.testFlushShouldCallAllCallbacks = function() { - var log = ""; - function post(request, callback){ - log += 'BulkRequest:' + toJson(request) + ';'; - callback(200, [[{$id:'ABC'}], {$id:'XYZ'}]); - } - var ds = new DataStore(post); - var Book = ds.entity("Book"); - var Library = ds.entity("Library"); - Book.all(function(instance){ - log += toJson(instance) + ';'; - }); - Library.load("123", function(instance){ - log += toJson(instance) + ';'; - }); - assertEquals("", log); - ds.flush(); - assertJsonEquals([], ds.bulkRequest); - assertEquals('BulkRequest:[["GET","Book"],["GET","Library/123"]];[{"$id":"ABC"}];{"$id":"XYZ"};', log); -}; - -DataStoreTest.prototype.testSaveOnNotLoggedInRetriesAfterLoggin = function(){ - var log = ""; - var book; - var ds = new DataStore(null, {login:function(c){c();}}); - ds.post = function (request, callback){ - assertJsonEquals([["POST", "", book]], request); - ds.post = function(request, callback){ - assertJsonEquals([["POST", "", book]], request); - ds.post = function(){fail("too much recursion");}; - callback(200, [{saved:"ok"}]); - }; - callback(200, {$status_code:401}); - }; - book = ds.entity("Book")({name:"misko"}); - book.$save(); - ds.flush(); - assertJsonEquals({saved:"ok"}, book); -}; - -DataStoreTest.prototype.testItShouldRemoveItemFromCollectionWhenDeleted = function() { - expectAsserts(6); - var ds = new DataStore(); - ds.post = function(request, callback){ - assertJsonEquals([["GET", "Book"]], request); - callback(200, [[{name:"Moby Dick", $id:123, $entity:'Book'}]]); - }; - var Book = ds.entity("Book"); - var books = Book.all(); - ds.flush(); - assertJsonEquals([[{name:"Moby Dick", $id:123, $entity:'Book'}]], ds._cache.$collections); - assertDefined(ds._cache['Book/123']); - var book = Book({$id:123}); - ds.post = function(request, callback){ - assertJsonEquals([["DELETE", "", book]], request); - callback(200, [book]); - }; - ds.remove(book); - ds.flush(); - assertUndefined(ds._cache['Book/123']); - assertJsonEquals([[]],ds._cache.$collections); -}; - -DataStoreTest.prototype.testItShouldAddToAll = function() { - expectAsserts(8); - var ds = new DataStore(); - ds.post = function(request, callback){ - assertJsonEquals([["GET", "Book"]], request); - callback(200, [[]]); - }; - var Book = ds.entity("Book"); - var books = Book.all(); - assertEquals(0, books.length); - ds.flush(); - var moby = Book({name:'moby'}); - moby.$save(); - ds.post = function(request, callback){ - assertJsonEquals([["POST", "", moby]], request); - moby.$id = '123'; - callback(200, [moby]); - }; - ds.flush(); - assertEquals(1, books.length); - assertEquals(moby, books[0]); - - moby.$save(); - ds.flush(); - assertEquals(1, books.length); - assertEquals(moby, books[0]); -}; - -DataStoreTest.prototype.testItShouldReturnCreatedDocumentCountByUser = function(){ - expectAsserts(2); - var datastore = new DataStore( - function(request, callback){ - assertJsonEquals([["GET", "$users"]], request); - callback(200, [{misko:1, adam:1}]); - }); - var users = datastore.documentCountsByUser(); - assertJsonEquals({misko:1, adam:1}, users); -}; - - -DataStoreTest.prototype.testItShouldReturnDocumentIdsForUeserByEntity = function(){ - expectAsserts(2); - var datastore = new DataStore( - function(request, callback){ - assertJsonEquals([["GET", "$users/misko@hevery.com"]], request); - callback(200, [{Book:["1"], Library:["2"]}]); - }); - var users = datastore.userDocumentIdsByEntity("misko@hevery.com"); - assertJsonEquals({Book:["1"], Library:["2"]}, users); -}; - -DataStoreTest.prototype.testItShouldReturnNewInstanceOn404 = function(){ - expectAsserts(7); - var log = ""; - var datastore = new DataStore( - function(request, callback){ - assertJsonEquals([["GET", "User/misko"]], request); - callback(200, [{$status_code:404}]); - }); - var User = datastore.entity("User", {admin:false}); - var user = User.loadOrCreate('misko', function(i){log+="cb "+i.$id+";";}); - datastore.flush(); - assertEquals("misko", user.$id); - assertEquals("User", user.$entity); - assertEquals(false, user.admin); - assertEquals("undefined", typeof user.$secret); - assertEquals("undefined", typeof user.$version); - assertEquals("cb misko;", log); -}; - -DataStoreTest.prototype.testItShouldReturnNewInstanceOn404 = function(){ - var log = ""; - var datastore = new DataStore( - function(request, callback){ - assertJsonEquals([["GET", "User/misko"],["GET", "User/adam"]], request); - callback(200, [{$id:'misko'},{$id:'adam'}]); - }); - var User = datastore.entity("User"); - var users = User.loadMany(['misko', 'adam'], function(i){log+="cb "+toJson(i)+";";}); - datastore.flush(); - assertEquals("misko", users[0].$id); - assertEquals("adam", users[1].$id); - assertEquals('cb [{"$id":"misko"},{"$id":"adam"}];', log); -}; - -DataStoreTest.prototype.testItShouldCreateJoinAndQuery = function() { - var datastore = new DataStore(); - var Invoice = datastore.entity("Invoice"); - var Customer = datastore.entity("Customer"); - var InvoiceWithCustomer = datastore.join({ - invoice:{join:Invoice}, - customer:{join:Customer, on:"invoice.customer"} - }); - var invoiceWithCustomer = InvoiceWithCustomer.query("invoice.month", 1); - assertEquals([], invoiceWithCustomer); - assertJsonEquals([["GET", "Invoice/month=1"]], datastore.bulkRequest); - var request = datastore.bulkRequest.shift(); - request.$$callback([{$id:1, customer:1},{$id:2, customer:1},{$id:3, customer:3}]); - assertJsonEquals([["GET","Customer/1"],["GET","Customer/3"]], datastore.bulkRequest); - datastore.bulkRequest.shift().$$callback({$id:1}); - datastore.bulkRequest.shift().$$callback({$id:3}); - assertJsonEquals([ - {invoice:{$id:1,customer:1},customer:{$id:1}}, - {invoice:{$id:2,customer:1},customer:{$id:1}}, - {invoice:{$id:3,customer:3},customer:{$id:3}}], invoiceWithCustomer); -}; - -DataStoreTest.prototype.testItShouldThrowIfMoreThanOneEntityIsPrimary = function() { - var datastore = new DataStore(); - var Invoice = datastore.entity("Invoice"); - var Customer = datastore.entity("Customer"); - assertThrows("Exactly one entity needs to be primary.", function(){ - datastore.join({ - invoice:{join:Invoice}, - customer:{join:Customer} - }); - }); -}; - -DataStoreTest.prototype.testItShouldThrowIfLoopInReferences = function() { - var datastore = new DataStore(); - var Invoice = datastore.entity("Invoice"); - var Customer = datastore.entity("Customer"); - assertThrows("Infinite loop in join: invoice -> customer", function(){ - datastore.join({ - invoice:{join:Invoice, on:"customer.invoice"}, - customer:{join:Customer, on:"invoice.customer"} - }); - }); -}; - -DataStoreTest.prototype.testItShouldThrowIfReferenceToNonExistantJoin = function() { - var datastore = new DataStore(); - var Invoice = datastore.entity("Invoice"); - var Customer = datastore.entity("Customer"); - assertThrows("Named entity 'x' is undefined.", function(){ - datastore.join({ - invoice:{join:Invoice, on:"x.invoice"}, - customer:{join:Customer, on:"invoice.customer"} - }); - }); -}; - -DataStoreTest.prototype.testItShouldThrowIfQueryOnNonPrimary = function() { - var datastore = new DataStore(); - var Invoice = datastore.entity("Invoice"); - var Customer = datastore.entity("Customer"); - var InvoiceWithCustomer = datastore.join({ - invoice:{join:Invoice}, - customer:{join:Customer, on:"invoice.customer"} - }); - assertThrows("Named entity 'customer' is not a primary entity.", function(){ - InvoiceWithCustomer.query("customer.month", 1); - }); -}; diff --git a/test/EntityDeclarationTest.js b/test/EntityDeclarationTest.js deleted file mode 100644 index 28986ea8..00000000 --- a/test/EntityDeclarationTest.js +++ /dev/null @@ -1,50 +0,0 @@ -EntityDeclarationTest = TestCase('EntityDeclarationTest'); - -EntityDeclarationTest.prototype.testEntityTypeOnly = function(){ - expectAsserts(2); - var datastore = {entity:function(name){ - assertEquals("Person", name); - }}; - var scope = new Scope(); - var init = scope.entity("Person", datastore); - assertEquals("", init); -}; - -EntityDeclarationTest.prototype.testWithDefaults = function(){ - expectAsserts(4); - var datastore = {entity:function(name, init){ - assertEquals("Person", name); - assertEquals("=a:", init.a); - assertEquals(0, init.b.length); - }}; - var scope = new Scope(); - var init = scope.entity('Person:{a:"=a:", b:[]}', datastore); - assertEquals("", init); -}; - -EntityDeclarationTest.prototype.testWithName = function(){ - expectAsserts(2); - var datastore = {entity:function(name, init){ - assertEquals("Person", name); - return function (){ return {}; }; - }}; - var scope = new Scope(); - var init = scope.entity('friend=Person', datastore); - assertEquals("$anchor.friend:{friend=Person.load($anchor.friend);friend.$$anchor=\"friend\";};", init); -}; - -EntityDeclarationTest.prototype.testMultipleEntities = function(){ - expectAsserts(3); - var expect = ['Person', 'Book']; - var i=0; - var datastore = {entity:function(name, init){ - assertEquals(expect[i], name); - i++; - return function (){ return {}; }; - }}; - var scope = new Scope(); - var init = scope.entity('friend=Person;book=Book;', datastore); - assertEquals("$anchor.friend:{friend=Person.load($anchor.friend);friend.$$anchor=\"friend\";};" + - "$anchor.book:{book=Book.load($anchor.book);book.$$anchor=\"book\";};", - init); -}; diff --git a/test/ModelTest.js b/test/ModelTest.js deleted file mode 100644 index dbd97778..00000000 --- a/test/ModelTest.js +++ /dev/null @@ -1,84 +0,0 @@ -ModelTest = TestCase('ModelTest'); - -ModelTest.prototype.testLoadSaveOperations = function(){ - var m1 = new DataStore().entity('A')(); - m1.a = 1; - - var m2 = {b:1}; - - m1.$loadFrom(m2); - - assertTrue(!m1.a); - assertEquals(m1.b, 1); -}; - -ModelTest.prototype.testLoadfromDoesNotClobberFunctions = function(){ - var m1 = new DataStore().entity('A')(); - m1.id = function(){return 'OK';}; - m1.$loadFrom({id:null}); - assertEquals(m1.id(), 'OK'); - - m1.b = 'OK'; - m1.$loadFrom({b:function(){}}); - assertEquals(m1.b, 'OK'); -}; - -ModelTest.prototype.testDataStoreDoesNotGetClobbered = function(){ - var ds = new DataStore(); - var m = ds.entity('A')(); - assertTrue(m.$$entity.datastore === ds); - m.$loadFrom({}); - assertTrue(m.$$entity.datastore === ds); -}; - -ModelTest.prototype.testManagedModelDelegatesMethodsToDataStore = function(){ - expectAsserts(7); - var datastore = new DataStore(); - var model = datastore.entity("A", {a:1})(); - var fn = {}; - datastore.save = function(instance, callback) { - assertTrue(model === instance); - assertTrue(callback === fn); - }; - datastore.remove = function(instance, callback) { - assertTrue(model === instance); - assertTrue(callback === fn); - }; - datastore.load = function(instance, id, callback) { - assertTrue(model === instance); - assertTrue(id === "123"); - assertTrue(callback === fn); - }; - model.$save(fn); - model.$delete(fn); - model.$loadById("123", fn); -}; - -ModelTest.prototype.testManagedModelCanBeForcedToFlush = function(){ - expectAsserts(6); - var datastore = new DataStore(); - var model = datastore.entity("A", {a:1})(); - - datastore.save = function(instance, callback) { - assertTrue(model === instance); - assertTrue(callback === undefined); - }; - datastore.remove = function(instance, callback) { - assertTrue(model === instance); - assertTrue(callback === undefined); - }; - datastore.flush = function(){ - assertTrue(true); - }; - model.$save(true); - model.$delete(true); -}; - - -ModelTest.prototype.testItShouldMakeDeepCopyOfInitialValues = function (){ - var initial = {a:[]}; - var entity = new DataStore().entity("A", initial); - var model = entity(); - model.a.push(1); - assertEquals(0, entity().a.length); -}; diff --git a/test/ScopeSpec.js b/test/ScopeSpec.js index 0a0b4241..cfae42a8 100644 --- a/test/ScopeSpec.js +++ b/test/ScopeSpec.js @@ -1,13 +1,13 @@ describe('scope/model', function(){ it('should create a scope with parent', function(){ - var model = scope({name:'Misko'}); + var model = createScope({name:'Misko'}); expect(model.name).toEqual('Misko'); }); it('should have $get/set$/parent$', function(){ var parent = {}; - var model = scope(parent); + var model = createScope(parent); model.$set('name', 'adam'); expect(model.name).toEqual('adam'); expect(model.$get('name')).toEqual('adam'); @@ -16,7 +16,7 @@ describe('scope/model', function(){ //$eval it('should eval function with correct this and pass arguments', function(){ - var model = scope(); + var model = createScope(); model.$eval(function(name){ this.name = name; }, 'works'); @@ -24,14 +24,14 @@ describe('scope/model', function(){ }); it('should eval expression with correct this', function(){ - var model = scope(); + var model = createScope(); model.$eval('name="works"'); expect(model.name).toEqual('works'); }); //$onEval it('should watch an expression for change', function(){ - var model = scope(); + var model = createScope(); model.oldValue = ""; var count = 0; model.name = 'adam'; @@ -48,7 +48,7 @@ describe('scope/model', function(){ }); it('should eval with no arguments', function(){ - var model = scope(); + var model = createScope(); var count = 0; model.$onEval(function(){count++;}); model.$eval(); @@ -57,7 +57,7 @@ describe('scope/model', function(){ //$bind it('should curry a function with respect to scope', function(){ - var model = scope(); + var model = createScope(); model.name = 'misko'; expect(model.$bind(function(){return this.name;})()).toEqual('misko'); }); @@ -70,7 +70,7 @@ describe('scope/model', function(){ Printer.prototype.print = function(){ this.printed = true; }; - var model = scope({ name: 'parent' }, Printer, 'hp'); + var model = createScope({ name: 'parent' }, Printer, 'hp'); expect(model.brand).toEqual('hp'); model.print(); expect(model.printed).toEqual(true); diff --git a/test/ScopeTest.js b/test/ScopeTest.js deleted file mode 100644 index 24febf19..00000000 --- a/test/ScopeTest.js +++ /dev/null @@ -1,145 +0,0 @@ -ScopeTest = TestCase('ScopeTest'); - -ScopeTest.prototype.testGetScopeRetrieval = function(){ - var scope = {}; - var form = jQuery(""); - form.data('scope', scope); - var c = form.find('c'); - assertTrue(scope === c.scope()); -}; - -ScopeTest.prototype.testGetScopeRetrievalIntermediateNode = function(){ - var scope = {}; - var form = jQuery(""); - form.find("b").data('scope', scope); - var b = form.find('b'); - assertTrue(scope === b.scope()); -}; - -ScopeTest.prototype.testNoScopeDoesNotCauseInfiniteRecursion = function(){ - var form = jQuery(""); - var c = form.find('c'); - assertTrue(!c.scope()); -}; - -ScopeTest.prototype.testScopeEval = function(){ - var scope = new Scope({b:345}); - assertEquals(scope.eval('b = 123'), 123); - assertEquals(scope.get('b'), 123); -}; - -ScopeTest.prototype.testScopeFromPrototype = function(){ - var scope = new Scope({b:123}); - scope.eval('a = b'); - scope.eval('b = 456'); - assertEquals(scope.get('a'), 123); - assertEquals(scope.get('b'), 456); -}; - -ScopeTest.prototype.testSetScopeGet = function(){ - var scope = new Scope(); - assertEquals(987, scope.set('a', 987)); - assertEquals(scope.get('a'), 987); - assertEquals(scope.eval('a'), 987); -}; - -ScopeTest.prototype.testGetChain = function(){ - var scope = new Scope({a:{b:987}}); - assertEquals(scope.get('a.b'), 987); - assertEquals(scope.eval('a.b'), 987); -}; - -ScopeTest.prototype.testGetUndefinedChain = function(){ - var scope = new Scope(); - assertEquals(typeof scope.get('a.b'), 'undefined'); -}; - -ScopeTest.prototype.testSetChain = function(){ - var scope = new Scope({a:{}}); - scope.set('a.b', 987); - assertEquals(scope.get('a.b'), 987); - assertEquals(scope.eval('a.b'), 987); -}; - -ScopeTest.prototype.testSetGetOnChain = function(){ - var scope = new Scope(); - scope.set('a.b', 987); - assertEquals(scope.get('a.b'), 987); - assertEquals(scope.eval('a.b'), 987); -}; - -ScopeTest.prototype.testGlobalFunctionAccess =function(){ - window['scopeAddTest'] = function (a, b) {return a+b;}; - var scope = new Scope({window:window}); - assertEquals(scope.eval('window.scopeAddTest(1,2)'), 3); - - scope.set('add', function (a, b) {return a+b;}); - assertEquals(scope.eval('add(1,2)'), 3); - - scope.set('math.add', function (a, b) {return a+b;}); - assertEquals(scope.eval('math.add(1,2)'), 3); -}; - -ScopeTest.prototype.testValidationEval = function(){ - expectAsserts(4); - var scope = new Scope(); - scope.set("name", "misko"); - angular.validator.testValidator = function(value, expect){ - assertEquals("misko", this.name); - return value == expect ? null : "Error text"; - }; - - assertEquals("Error text", scope.validate("testValidator:'abc'", 'x')); - assertEquals(null, scope.validate("testValidator:'abc'", 'abc')); - - delete angular.validator['testValidator']; -}; - -ScopeTest.prototype.testCallingNonExistantMethodShouldProduceFriendlyException = function() { - expectAsserts(1); - var scope = new Scope({obj:{}}); - try { - scope.eval("obj.iDontExist()"); - fail(); - } catch (e) { - assertEquals("Expression 'obj.iDontExist' is not a function.", e); - } -}; - -ScopeTest.prototype.testAccessingWithInvalidPathShouldThrowError = function() { - var scope = new Scope(); - try { - scope.get('a.{{b}}'); - fail(); - } catch (e) { - assertEquals("Expression 'a.{{b}}' is not a valid expression for accesing variables.", e); - } -}; - -ScopeTest.prototype.testItShouldHave$parent = function() { - var parent = new Scope({}, "ROOT"); - var child = new Scope(parent.state); - assertSame("parent", child.state.$parent, parent.state); - assertSame("root", child.state.$root, parent.state); -}; - -ScopeTest.prototype.testItShouldHave$root = function() { - var scope = new Scope({}, "ROOT"); - assertSame(scope.state.$root, scope.state); -}; - -ScopeTest.prototype.testItShouldBuildPathOnUndefined = function(){ - var scope = new Scope({}, "ROOT"); - scope.setEval("a.$b.c", 1); - assertJsonEquals({$b:{c:1}}, scope.get("a")); -}; - -ScopeTest.prototype.testItShouldMapUnderscoreFunctions = function(){ - var scope = new Scope({}, "ROOT"); - scope.set("a", [1,2,3]); - assertEquals('function', typeof scope.get("a.$size")); - scope.eval("a.$includeIf(4,true)"); - assertEquals(4, scope.get("a.$size")()); - assertEquals(4, scope.eval("a.$size()")); - assertEquals('undefined', typeof scope.get("a.dontExist")); -}; diff --git a/test/ServerTest.js b/test/ServerTest.js deleted file mode 100644 index 02fab84c..00000000 --- a/test/ServerTest.js +++ /dev/null @@ -1,42 +0,0 @@ -ServerTest = TestCase("ServerTest"); -ServerTest.prototype.testBreakLargeRequestIntoPackets = function() { - var log = ""; - var server = new Server("http://server", function(url){ - log += "|" + url; - }); - server.maxSize = 30; - server.uuid = "uuid"; - server.request("POST", "/data/database", {}, function(code, r){ - assertEquals(200, code); - assertEquals("response", r); - }); - angularCallbacks.uuid0("response"); - assertEquals( - "|http://server/$/uuid0/2/1?h=eyJtIjoiUE9TVCIsInAiOnt9LCJ1Ij" + - "|http://server/$/uuid0/2/2?h=oiL2RhdGEvZGF0YWJhc2UifQ==", - log); -}; - -ServerTest.prototype.testItShouldEncodeUsingUrlRules = function() { - var server = new Server("http://server"); - assertEquals("fn5-fn5-", server.base64url("~~~~~~")); - assertEquals("fn5_fn5_", server.base64url("~~\u007f~~\u007f")); -}; - -FrameServerTest = TestCase("FrameServerTest"); - -FrameServerTest.prototype = { - testRead:function(){ - var window = {name:'$DATASET:"MyData"'}; - var server = new FrameServer(window); - server.read(); - assertEquals("MyData", server.data); - }, - testWrite:function(){ - var window = {}; - var server = new FrameServer(window); - server.data = "TestData"; - server.write(); - assertEquals('$DATASET:"TestData"', window.name); - } -}; diff --git a/test/UsersTest.js b/test/UsersTest.js deleted file mode 100644 index f0ff545a..00000000 --- a/test/UsersTest.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2008,2009 BRAT Tech LLC - -UsersTest = TestCase("UsersTest"); - -UsersTest.prototype = { - setUp:function(){}, - - tearDown:function(){}, - - testItShouldFetchCurrentUser:function(){ - expectAsserts(5); - var user; - var users = new Users({request:function(method, url, request, callback){ - assertEquals("GET", method); - assertEquals("/account.json", url); - assertEquals("{}", toJson(request)); - callback(200, {$status_code:200, user:{name:'misko'}}); - }}); - users.fetchCurrentUser(function(u){ - user = u; - assertEquals("misko", u.name); - assertEquals("misko", users.current.name); - }); - } - -}; diff --git a/test/delete/ScopeTest.js b/test/delete/ScopeTest.js new file mode 100644 index 00000000..24febf19 --- /dev/null +++ b/test/delete/ScopeTest.js @@ -0,0 +1,145 @@ +ScopeTest = TestCase('ScopeTest'); + +ScopeTest.prototype.testGetScopeRetrieval = function(){ + var scope = {}; + var form = jQuery(""); + form.data('scope', scope); + var c = form.find('c'); + assertTrue(scope === c.scope()); +}; + +ScopeTest.prototype.testGetScopeRetrievalIntermediateNode = function(){ + var scope = {}; + var form = jQuery(""); + form.find("b").data('scope', scope); + var b = form.find('b'); + assertTrue(scope === b.scope()); +}; + +ScopeTest.prototype.testNoScopeDoesNotCauseInfiniteRecursion = function(){ + var form = jQuery(""); + var c = form.find('c'); + assertTrue(!c.scope()); +}; + +ScopeTest.prototype.testScopeEval = function(){ + var scope = new Scope({b:345}); + assertEquals(scope.eval('b = 123'), 123); + assertEquals(scope.get('b'), 123); +}; + +ScopeTest.prototype.testScopeFromPrototype = function(){ + var scope = new Scope({b:123}); + scope.eval('a = b'); + scope.eval('b = 456'); + assertEquals(scope.get('a'), 123); + assertEquals(scope.get('b'), 456); +}; + +ScopeTest.prototype.testSetScopeGet = function(){ + var scope = new Scope(); + assertEquals(987, scope.set('a', 987)); + assertEquals(scope.get('a'), 987); + assertEquals(scope.eval('a'), 987); +}; + +ScopeTest.prototype.testGetChain = function(){ + var scope = new Scope({a:{b:987}}); + assertEquals(scope.get('a.b'), 987); + assertEquals(scope.eval('a.b'), 987); +}; + +ScopeTest.prototype.testGetUndefinedChain = function(){ + var scope = new Scope(); + assertEquals(typeof scope.get('a.b'), 'undefined'); +}; + +ScopeTest.prototype.testSetChain = function(){ + var scope = new Scope({a:{}}); + scope.set('a.b', 987); + assertEquals(scope.get('a.b'), 987); + assertEquals(scope.eval('a.b'), 987); +}; + +ScopeTest.prototype.testSetGetOnChain = function(){ + var scope = new Scope(); + scope.set('a.b', 987); + assertEquals(scope.get('a.b'), 987); + assertEquals(scope.eval('a.b'), 987); +}; + +ScopeTest.prototype.testGlobalFunctionAccess =function(){ + window['scopeAddTest'] = function (a, b) {return a+b;}; + var scope = new Scope({window:window}); + assertEquals(scope.eval('window.scopeAddTest(1,2)'), 3); + + scope.set('add', function (a, b) {return a+b;}); + assertEquals(scope.eval('add(1,2)'), 3); + + scope.set('math.add', function (a, b) {return a+b;}); + assertEquals(scope.eval('math.add(1,2)'), 3); +}; + +ScopeTest.prototype.testValidationEval = function(){ + expectAsserts(4); + var scope = new Scope(); + scope.set("name", "misko"); + angular.validator.testValidator = function(value, expect){ + assertEquals("misko", this.name); + return value == expect ? null : "Error text"; + }; + + assertEquals("Error text", scope.validate("testValidator:'abc'", 'x')); + assertEquals(null, scope.validate("testValidator:'abc'", 'abc')); + + delete angular.validator['testValidator']; +}; + +ScopeTest.prototype.testCallingNonExistantMethodShouldProduceFriendlyException = function() { + expectAsserts(1); + var scope = new Scope({obj:{}}); + try { + scope.eval("obj.iDontExist()"); + fail(); + } catch (e) { + assertEquals("Expression 'obj.iDontExist' is not a function.", e); + } +}; + +ScopeTest.prototype.testAccessingWithInvalidPathShouldThrowError = function() { + var scope = new Scope(); + try { + scope.get('a.{{b}}'); + fail(); + } catch (e) { + assertEquals("Expression 'a.{{b}}' is not a valid expression for accesing variables.", e); + } +}; + +ScopeTest.prototype.testItShouldHave$parent = function() { + var parent = new Scope({}, "ROOT"); + var child = new Scope(parent.state); + assertSame("parent", child.state.$parent, parent.state); + assertSame("root", child.state.$root, parent.state); +}; + +ScopeTest.prototype.testItShouldHave$root = function() { + var scope = new Scope({}, "ROOT"); + assertSame(scope.state.$root, scope.state); +}; + +ScopeTest.prototype.testItShouldBuildPathOnUndefined = function(){ + var scope = new Scope({}, "ROOT"); + scope.setEval("a.$b.c", 1); + assertJsonEquals({$b:{c:1}}, scope.get("a")); +}; + +ScopeTest.prototype.testItShouldMapUnderscoreFunctions = function(){ + var scope = new Scope({}, "ROOT"); + scope.set("a", [1,2,3]); + assertEquals('function', typeof scope.get("a.$size")); + scope.eval("a.$includeIf(4,true)"); + assertEquals(4, scope.get("a.$size")()); + assertEquals(4, scope.eval("a.$size()")); + assertEquals('undefined', typeof scope.get("a.dontExist")); +}; diff --git a/test/moveToAngularCom/Base64Test.js b/test/moveToAngularCom/Base64Test.js new file mode 100644 index 00000000..a9353186 --- /dev/null +++ b/test/moveToAngularCom/Base64Test.js @@ -0,0 +1,5 @@ +Base64Test = TestCase('Base64Test'); + +Base64Test.prototype.testEncodeDecode = function(){ + assertEquals(Base64.decode(Base64.encode('hello')), 'hello'); +}; diff --git a/test/moveToAngularCom/DataStoreTest.js b/test/moveToAngularCom/DataStoreTest.js new file mode 100644 index 00000000..87c5be2e --- /dev/null +++ b/test/moveToAngularCom/DataStoreTest.js @@ -0,0 +1,616 @@ +DataStoreTest = TestCase('DataStoreTest'); + +DataStoreTest.prototype.testSavePostsToServer = function(){ + expectAsserts(10); + var response; + var post = function(data, callback){ + var method = data[0][0]; + var posted = data[0][2]; + assertEquals("POST", method); + assertEquals("abc", posted.$entity); + assertEquals("123", posted.$id); + assertEquals("1", posted.$version); + assertFalse('function' == typeof posted.save); + response = fromJson(toJson(posted)); + response.$entity = "abc"; + response.$id = "123"; + response.$version = "2"; + callback(200, [response]); + }; + var datastore = new DataStore(post); + var model = datastore.entity('abc', {name: "value"})(); + model.$id = "123"; + model.$version = "1"; + + datastore.save(model, function(obj){ + assertTrue(obj === model); + assertEquals(obj.$entity, "abc"); + assertEquals(obj.$id, "123"); + assertEquals(obj.$version, "2"); + assertEquals(obj.name, "value"); + obj.after = true; + }); + datastore.flush(); +}; + +DataStoreTest.prototype.testLoadGetsFromServer = function(){ + expectAsserts(12); + var post = function(data, callback){ + var method = data[0][0]; + var path = data[0][1]; + assertEquals("GET", method); + assertEquals("abc/1", path); + response = [{$entity:'abc', $id:'1', $version:'2', key:"value"}]; + callback(200, response); + }; + var datastore = new DataStore(post); + + var model = datastore.entity("abc", {merge:true})(); + assertEquals(datastore.load(model, '1', function(obj){ + assertEquals(obj.$entity, "abc"); + assertEquals(obj.$id, "1"); + assertEquals(obj.$version, "2"); + assertEquals(obj.key, "value"); + }), model); + datastore.flush(); + assertEquals(model.$entity, "abc"); + assertEquals(model.$id, "1"); + assertEquals(model.$version, "2"); + assertEquals(model.key, "value"); + assertEquals(model.merge, true); +}; + +DataStoreTest.prototype.testRemove = function(){ + expectAsserts(8); + var response; + var post = function(data, callback){ + var method = data[0][0]; + var posted = data[0][2]; + assertEquals("DELETE", method); + assertEquals("abc", posted.$entity); + assertEquals("123", posted.$id); + assertEquals("1", posted.$version); + assertFalse('function' == typeof posted.save); + response = fromJson(toJson(posted)); + response.$entity = "abc"; + response.$id = "123"; + response.$version = "2"; + callback(200, [response]); + }; + var model; + var datastore = new DataStore(post); + model = datastore.entity('abc', {name: "value"})(); + model.$id = "123"; + model.$version = "1"; + + datastore.remove(model, function(obj){ + assertEquals(obj.$id, "123"); + assertEquals(obj.$version, "2"); + assertEquals(obj.name, "value"); + obj.after = true; + }); + datastore.flush(); + +}; + + +DataStoreTest.prototype.test401ResponseDoesNotCallCallback = function(){ + expectAsserts(1); + var post = function(data, callback) { + callback(200, {$status_code: 401}); + }; + + var datastore = new DataStore(post, {login:function(){ + assertTrue(true); + }}); + + var onLoadAll = function(){ + assertTrue(false, "onLoadAll should not be called when response is status 401"); + }; + datastore.bulkRequest.push({}); + datastore.flush(); + datastore.loadAll({type: "A"}, onLoadAll); +}; + +DataStoreTest.prototype.test403ResponseDoesNotCallCallback = function(){ + expectAsserts(1); + var post = function(data, callback) { + callback(200, [{$status_code: 403}]); + }; + + var datastore = new DataStore(post, {notAuthorized:function(){ + assertTrue(true); + }}); + + var onLoadAll = function(){ + assertTrue(false, "onLoadAll should not be called when response is status 403"); + }; + datastore.bulkRequest.push({}); + datastore.flush(); + datastore.loadAll({type: "A"}, onLoadAll); +}; + +DataStoreTest.prototype.testLoadCalledWithoutIdShouldBeNoop = function(){ + expectAsserts(2); + var post = function(url, callback){ + assertTrue(false); + }; + var datastore = new DataStore(post); + var model = datastore.entity("abc")(); + assertEquals(datastore.load(model, undefined), model); + assertEquals(model.$entity, "abc"); +}; + +DataStoreTest.prototype.testEntityFactory = function(){ + var ds = new DataStore(); + var Recipe = ds.entity("Recipe", {a:1, b:2}); + assertEquals(Recipe.title, "Recipe"); + assertEquals(Recipe.defaults.a, 1); + assertEquals(Recipe.defaults.b, 2); + + var recipe = Recipe(); + assertEquals(recipe.$entity, "Recipe"); + assertEquals(recipe.a, 1); + assertEquals(recipe.b, 2); + + recipe = new Recipe(); + assertEquals(recipe.$entity, "Recipe"); + assertEquals(recipe.a, 1); + assertEquals(recipe.b, 2); +}; + +DataStoreTest.prototype.testEntityFactoryNoDefaults = function(){ + var ds = new DataStore(); + var Recipe = ds.entity("Recipe"); + assertEquals(Recipe.title, "Recipe"); + + recipe = new Recipe(); + assertEquals(recipe.$entity, "Recipe"); +}; + +DataStoreTest.prototype.testEntityFactoryWithInitialValues = function(){ + var ds = new DataStore(); + var Recipe = ds.entity("Recipe"); + + var recipe = Recipe({name: "name"}); + assertEquals("name", recipe.name); +}; + +DataStoreTest.prototype.testEntityLoad = function(){ + var ds = new DataStore(); + var Recipe = ds.entity("Recipe", {a:1, b:2}); + ds.load = function(instance, id, callback){ + callback.apply(instance); + return instance; + }; + var instance = null; + var recipe2 = Recipe.load("ID", function(){ + instance = this; + }); + assertTrue(recipe2 === instance); +}; + +DataStoreTest.prototype.testSaveScope = function(){ + var ds = new DataStore(); + var log = ""; + var Person = ds.entity("Person"); + var person1 = Person({name:"A", $entity:"Person", $id:"1", $version:"1"}, ds); + person1.$$anchor = "A"; + var person2 = Person({name:"B", $entity:"Person", $id:"2", $version:"2"}, ds); + person2.$$anchor = "B"; + var anchor = {}; + ds.anchor = anchor; + ds._jsonRequest = function(request, callback){ + log += "save(" + request[2].$id + ");"; + callback({$id:request[2].$id}); + }; + ds.saveScope({person1:person1, person2:person2, + ignoreMe:{name: "ignore", save:function(callback){callback();}}}, function(){ + log += "done();"; + }); + assertEquals("save(1);save(2);done();", log); + assertEquals(1, anchor.A); + assertEquals(2, anchor.B); +}; + +DataStoreTest.prototype.testEntityLoadAllRows = function(){ + var ds = new DataStore(); + var Recipe = ds.entity("Recipe"); + var list = []; + ds.loadAll = function(entity, callback){ + assertTrue(Recipe === entity); + callback.apply(list); + return list; + }; + var items = Recipe.all(function(){ + assertTrue(list === this); + }); + assertTrue(items === list); +}; + +DataStoreTest.prototype.testLoadAll = function(){ + expectAsserts(8); + var post = function(data, callback){ + assertEquals("GET", data[0][0]); + assertEquals("A", data[0][1]); + callback(200, [[{$entity:'A', $id:'1'},{$entity:'A', $id:'2'}]]); + }; + var datastore = new DataStore(post); + var list = datastore.entity("A").all(function(){ + assertTrue(true); + }); + datastore.flush(); + assertEquals(list.length, 2); + assertEquals(list[0].$entity, "A"); + assertEquals(list[0].$id, "1"); + assertEquals(list[1].$entity, "A"); + assertEquals(list[1].$id, "2"); +}; + +DataStoreTest.prototype.testQuery = function(){ + expectAsserts(5); + var post = function(data, callback) { + assertEquals("GET", data[0][0]); + assertEquals("Employee/managerId=123abc", data[0][1]); + callback(200, [[{$entity:"Employee", $id: "456", managerId: "123ABC"}]]); + + }; + var datastore = new DataStore(post); + var Employee = datastore.entity("Employee"); + var list = Employee.query('managerId', "123abc", function(){ + assertTrue(true); + }); + datastore.flush(); + assertJsonEquals([[{$entity:"Employee", $id: "456", managerId: "123ABC"}]], datastore._cache.$collections); + assertEquals(list[0].$id, "456"); +}; + +DataStoreTest.prototype.testLoadingDocumentRefreshesExistingArrays = function() { + expectAsserts(12); + var post; + var datastore = new DataStore(function(r, c){post(r,c);}); + var Book = datastore.entity('Book'); + post = function(req, callback) { + callback(200, [[{$id:1, $entity:"Book", name:"Moby"}, + {$id:2, $entity:"Book", name:"Dick"}]]); + }; + var allBooks = Book.all(); + datastore.flush(); + var queryBooks = Book.query("a", "b"); + datastore.flush(); + assertEquals("Moby", allBooks[0].name); + assertEquals("Dick", allBooks[1].name); + assertEquals("Moby", queryBooks[0].name); + assertEquals("Dick", queryBooks[1].name); + + post = function(req, callback) { + assertEquals('[["GET","Book/1"]]', toJson(req)); + callback(200, [{$id:1, $entity:"Book", name:"Moby Dick"}]); + }; + var book = Book.load(1); + datastore.flush(); + assertEquals("Moby Dick", book.name); + assertEquals("Moby Dick", allBooks[0].name); + assertEquals("Moby Dick", queryBooks[0].name); + + post = function(req, callback) { + assertEquals('POST', req[0][0]); + callback(200, [{$id:1, $entity:"Book", name:"The Big Fish"}]); + }; + book.$save(); + datastore.flush(); + assertEquals("The Big Fish", book.name); + assertEquals("The Big Fish", allBooks[0].name); + assertEquals("The Big Fish", queryBooks[0].name); +}; + +DataStoreTest.prototype.testEntityProperties = function() { + expectAsserts(2); + var datastore = new DataStore(); + var callback = {}; + + datastore._jsonRequest = function(request, callbackFn) { + assertJsonEquals(["GET", "Cheese/$properties"], request); + assertEquals(callback, callbackFn); + }; + + var Cheese = datastore.entity("Cheese"); + Cheese.properties(callback); + +}; + +DataStoreTest.prototype.testLoadInstanceIsNotFromCache = function() { + var post; + var datastore = new DataStore(function(r, c){post(r,c);}); + var Book = datastore.entity('Book'); + + post = function(req, callback) { + assertEquals('[["GET","Book/1"]]', toJson(req)); + callback(200, [{$id:1, $entity:"Book", name:"Moby Dick"}]); + }; + var book = Book.load(1); + datastore.flush(); + assertEquals("Moby Dick", book.name); + assertFalse(book === datastore._cache['Book/1']); +}; + +DataStoreTest.prototype.testLoadStarsIsNewDocument = function() { + var datastore = new DataStore(); + var Book = datastore.entity('Book'); + var book = Book.load('*'); + assertEquals('Book', book.$entity); +}; + +DataStoreTest.prototype.testUndefinedEntityReturnsNullValueObject = function() { + var datastore = new DataStore(); + var Entity = datastore.entity(undefined); + var all = Entity.all(); + assertEquals(0, all.length); +}; + +DataStoreTest.prototype.testFetchEntities = function(){ + expectAsserts(6); + var post = function(data, callback){ + assertJsonEquals(["GET", "$entities"], data[0]); + callback(200, [{A:0, B:0}]); + }; + var datastore = new DataStore(post); + var entities = datastore.entities(function(){ + assertTrue(true); + }); + datastore.flush(); + assertJsonEquals([], datastore.bulkRequest); + assertEquals(2, entities.length); + assertEquals("A", entities[0].title); + assertEquals("B", entities[1].title); +}; + +DataStoreTest.prototype.testItShouldMigrateSchema = function() { + var datastore = new DataStore(); + var Entity = datastore.entity("Entity", {a:[], user:{name:"Misko", email:""}}); + var doc = Entity().$loadFrom({b:'abc', user:{email:"misko@hevery.com"}}); + assertFalse( + toJson({a:[], b:'abc', user:{name:"Misko", email:"misko@hevery.com"}}) == + toJson(doc)); + doc.$migrate(); + assertEquals( + toJson({a:[], b:'abc', user:{name:"Misko", email:"misko@hevery.com"}}), + toJson(doc)); +}; + +DataStoreTest.prototype.testItShouldCollectRequestsForBulk = function() { + var ds = new DataStore(); + var Book = ds.entity("Book"); + var Library = ds.entity("Library"); + Book.all(); + Library.load("123"); + assertEquals(2, ds.bulkRequest.length); + assertJsonEquals(["GET", "Book"], ds.bulkRequest[0]); + assertJsonEquals(["GET", "Library/123"], ds.bulkRequest[1]); +}; + +DataStoreTest.prototype.testEmptyFlushShouldDoNothing = function () { + var ds = new DataStore(function(){ + fail("expecting noop"); + }); + ds.flush(); +}; + +DataStoreTest.prototype.testFlushShouldCallAllCallbacks = function() { + var log = ""; + function post(request, callback){ + log += 'BulkRequest:' + toJson(request) + ';'; + callback(200, [[{$id:'ABC'}], {$id:'XYZ'}]); + } + var ds = new DataStore(post); + var Book = ds.entity("Book"); + var Library = ds.entity("Library"); + Book.all(function(instance){ + log += toJson(instance) + ';'; + }); + Library.load("123", function(instance){ + log += toJson(instance) + ';'; + }); + assertEquals("", log); + ds.flush(); + assertJsonEquals([], ds.bulkRequest); + assertEquals('BulkRequest:[["GET","Book"],["GET","Library/123"]];[{"$id":"ABC"}];{"$id":"XYZ"};', log); +}; + +DataStoreTest.prototype.testSaveOnNotLoggedInRetriesAfterLoggin = function(){ + var log = ""; + var book; + var ds = new DataStore(null, {login:function(c){c();}}); + ds.post = function (request, callback){ + assertJsonEquals([["POST", "", book]], request); + ds.post = function(request, callback){ + assertJsonEquals([["POST", "", book]], request); + ds.post = function(){fail("too much recursion");}; + callback(200, [{saved:"ok"}]); + }; + callback(200, {$status_code:401}); + }; + book = ds.entity("Book")({name:"misko"}); + book.$save(); + ds.flush(); + assertJsonEquals({saved:"ok"}, book); +}; + +DataStoreTest.prototype.testItShouldRemoveItemFromCollectionWhenDeleted = function() { + expectAsserts(6); + var ds = new DataStore(); + ds.post = function(request, callback){ + assertJsonEquals([["GET", "Book"]], request); + callback(200, [[{name:"Moby Dick", $id:123, $entity:'Book'}]]); + }; + var Book = ds.entity("Book"); + var books = Book.all(); + ds.flush(); + assertJsonEquals([[{name:"Moby Dick", $id:123, $entity:'Book'}]], ds._cache.$collections); + assertDefined(ds._cache['Book/123']); + var book = Book({$id:123}); + ds.post = function(request, callback){ + assertJsonEquals([["DELETE", "", book]], request); + callback(200, [book]); + }; + ds.remove(book); + ds.flush(); + assertUndefined(ds._cache['Book/123']); + assertJsonEquals([[]],ds._cache.$collections); +}; + +DataStoreTest.prototype.testItShouldAddToAll = function() { + expectAsserts(8); + var ds = new DataStore(); + ds.post = function(request, callback){ + assertJsonEquals([["GET", "Book"]], request); + callback(200, [[]]); + }; + var Book = ds.entity("Book"); + var books = Book.all(); + assertEquals(0, books.length); + ds.flush(); + var moby = Book({name:'moby'}); + moby.$save(); + ds.post = function(request, callback){ + assertJsonEquals([["POST", "", moby]], request); + moby.$id = '123'; + callback(200, [moby]); + }; + ds.flush(); + assertEquals(1, books.length); + assertEquals(moby, books[0]); + + moby.$save(); + ds.flush(); + assertEquals(1, books.length); + assertEquals(moby, books[0]); +}; + +DataStoreTest.prototype.testItShouldReturnCreatedDocumentCountByUser = function(){ + expectAsserts(2); + var datastore = new DataStore( + function(request, callback){ + assertJsonEquals([["GET", "$users"]], request); + callback(200, [{misko:1, adam:1}]); + }); + var users = datastore.documentCountsByUser(); + assertJsonEquals({misko:1, adam:1}, users); +}; + + +DataStoreTest.prototype.testItShouldReturnDocumentIdsForUeserByEntity = function(){ + expectAsserts(2); + var datastore = new DataStore( + function(request, callback){ + assertJsonEquals([["GET", "$users/misko@hevery.com"]], request); + callback(200, [{Book:["1"], Library:["2"]}]); + }); + var users = datastore.userDocumentIdsByEntity("misko@hevery.com"); + assertJsonEquals({Book:["1"], Library:["2"]}, users); +}; + +DataStoreTest.prototype.testItShouldReturnNewInstanceOn404 = function(){ + expectAsserts(7); + var log = ""; + var datastore = new DataStore( + function(request, callback){ + assertJsonEquals([["GET", "User/misko"]], request); + callback(200, [{$status_code:404}]); + }); + var User = datastore.entity("User", {admin:false}); + var user = User.loadOrCreate('misko', function(i){log+="cb "+i.$id+";";}); + datastore.flush(); + assertEquals("misko", user.$id); + assertEquals("User", user.$entity); + assertEquals(false, user.admin); + assertEquals("undefined", typeof user.$secret); + assertEquals("undefined", typeof user.$version); + assertEquals("cb misko;", log); +}; + +DataStoreTest.prototype.testItShouldReturnNewInstanceOn404 = function(){ + var log = ""; + var datastore = new DataStore( + function(request, callback){ + assertJsonEquals([["GET", "User/misko"],["GET", "User/adam"]], request); + callback(200, [{$id:'misko'},{$id:'adam'}]); + }); + var User = datastore.entity("User"); + var users = User.loadMany(['misko', 'adam'], function(i){log+="cb "+toJson(i)+";";}); + datastore.flush(); + assertEquals("misko", users[0].$id); + assertEquals("adam", users[1].$id); + assertEquals('cb [{"$id":"misko"},{"$id":"adam"}];', log); +}; + +DataStoreTest.prototype.testItShouldCreateJoinAndQuery = function() { + var datastore = new DataStore(); + var Invoice = datastore.entity("Invoice"); + var Customer = datastore.entity("Customer"); + var InvoiceWithCustomer = datastore.join({ + invoice:{join:Invoice}, + customer:{join:Customer, on:"invoice.customer"} + }); + var invoiceWithCustomer = InvoiceWithCustomer.query("invoice.month", 1); + assertEquals([], invoiceWithCustomer); + assertJsonEquals([["GET", "Invoice/month=1"]], datastore.bulkRequest); + var request = datastore.bulkRequest.shift(); + request.$$callback([{$id:1, customer:1},{$id:2, customer:1},{$id:3, customer:3}]); + assertJsonEquals([["GET","Customer/1"],["GET","Customer/3"]], datastore.bulkRequest); + datastore.bulkRequest.shift().$$callback({$id:1}); + datastore.bulkRequest.shift().$$callback({$id:3}); + assertJsonEquals([ + {invoice:{$id:1,customer:1},customer:{$id:1}}, + {invoice:{$id:2,customer:1},customer:{$id:1}}, + {invoice:{$id:3,customer:3},customer:{$id:3}}], invoiceWithCustomer); +}; + +DataStoreTest.prototype.testItShouldThrowIfMoreThanOneEntityIsPrimary = function() { + var datastore = new DataStore(); + var Invoice = datastore.entity("Invoice"); + var Customer = datastore.entity("Customer"); + assertThrows("Exactly one entity needs to be primary.", function(){ + datastore.join({ + invoice:{join:Invoice}, + customer:{join:Customer} + }); + }); +}; + +DataStoreTest.prototype.testItShouldThrowIfLoopInReferences = function() { + var datastore = new DataStore(); + var Invoice = datastore.entity("Invoice"); + var Customer = datastore.entity("Customer"); + assertThrows("Infinite loop in join: invoice -> customer", function(){ + datastore.join({ + invoice:{join:Invoice, on:"customer.invoice"}, + customer:{join:Customer, on:"invoice.customer"} + }); + }); +}; + +DataStoreTest.prototype.testItShouldThrowIfReferenceToNonExistantJoin = function() { + var datastore = new DataStore(); + var Invoice = datastore.entity("Invoice"); + var Customer = datastore.entity("Customer"); + assertThrows("Named entity 'x' is undefined.", function(){ + datastore.join({ + invoice:{join:Invoice, on:"x.invoice"}, + customer:{join:Customer, on:"invoice.customer"} + }); + }); +}; + +DataStoreTest.prototype.testItShouldThrowIfQueryOnNonPrimary = function() { + var datastore = new DataStore(); + var Invoice = datastore.entity("Invoice"); + var Customer = datastore.entity("Customer"); + var InvoiceWithCustomer = datastore.join({ + invoice:{join:Invoice}, + customer:{join:Customer, on:"invoice.customer"} + }); + assertThrows("Named entity 'customer' is not a primary entity.", function(){ + InvoiceWithCustomer.query("customer.month", 1); + }); +}; diff --git a/test/moveToAngularCom/EntityDeclarationTest.js b/test/moveToAngularCom/EntityDeclarationTest.js new file mode 100644 index 00000000..28986ea8 --- /dev/null +++ b/test/moveToAngularCom/EntityDeclarationTest.js @@ -0,0 +1,50 @@ +EntityDeclarationTest = TestCase('EntityDeclarationTest'); + +EntityDeclarationTest.prototype.testEntityTypeOnly = function(){ + expectAsserts(2); + var datastore = {entity:function(name){ + assertEquals("Person", name); + }}; + var scope = new Scope(); + var init = scope.entity("Person", datastore); + assertEquals("", init); +}; + +EntityDeclarationTest.prototype.testWithDefaults = function(){ + expectAsserts(4); + var datastore = {entity:function(name, init){ + assertEquals("Person", name); + assertEquals("=a:", init.a); + assertEquals(0, init.b.length); + }}; + var scope = new Scope(); + var init = scope.entity('Person:{a:"=a:", b:[]}', datastore); + assertEquals("", init); +}; + +EntityDeclarationTest.prototype.testWithName = function(){ + expectAsserts(2); + var datastore = {entity:function(name, init){ + assertEquals("Person", name); + return function (){ return {}; }; + }}; + var scope = new Scope(); + var init = scope.entity('friend=Person', datastore); + assertEquals("$anchor.friend:{friend=Person.load($anchor.friend);friend.$$anchor=\"friend\";};", init); +}; + +EntityDeclarationTest.prototype.testMultipleEntities = function(){ + expectAsserts(3); + var expect = ['Person', 'Book']; + var i=0; + var datastore = {entity:function(name, init){ + assertEquals(expect[i], name); + i++; + return function (){ return {}; }; + }}; + var scope = new Scope(); + var init = scope.entity('friend=Person;book=Book;', datastore); + assertEquals("$anchor.friend:{friend=Person.load($anchor.friend);friend.$$anchor=\"friend\";};" + + "$anchor.book:{book=Book.load($anchor.book);book.$$anchor=\"book\";};", + init); +}; diff --git a/test/moveToAngularCom/ModelTest.js b/test/moveToAngularCom/ModelTest.js new file mode 100644 index 00000000..dbd97778 --- /dev/null +++ b/test/moveToAngularCom/ModelTest.js @@ -0,0 +1,84 @@ +ModelTest = TestCase('ModelTest'); + +ModelTest.prototype.testLoadSaveOperations = function(){ + var m1 = new DataStore().entity('A')(); + m1.a = 1; + + var m2 = {b:1}; + + m1.$loadFrom(m2); + + assertTrue(!m1.a); + assertEquals(m1.b, 1); +}; + +ModelTest.prototype.testLoadfromDoesNotClobberFunctions = function(){ + var m1 = new DataStore().entity('A')(); + m1.id = function(){return 'OK';}; + m1.$loadFrom({id:null}); + assertEquals(m1.id(), 'OK'); + + m1.b = 'OK'; + m1.$loadFrom({b:function(){}}); + assertEquals(m1.b, 'OK'); +}; + +ModelTest.prototype.testDataStoreDoesNotGetClobbered = function(){ + var ds = new DataStore(); + var m = ds.entity('A')(); + assertTrue(m.$$entity.datastore === ds); + m.$loadFrom({}); + assertTrue(m.$$entity.datastore === ds); +}; + +ModelTest.prototype.testManagedModelDelegatesMethodsToDataStore = function(){ + expectAsserts(7); + var datastore = new DataStore(); + var model = datastore.entity("A", {a:1})(); + var fn = {}; + datastore.save = function(instance, callback) { + assertTrue(model === instance); + assertTrue(callback === fn); + }; + datastore.remove = function(instance, callback) { + assertTrue(model === instance); + assertTrue(callback === fn); + }; + datastore.load = function(instance, id, callback) { + assertTrue(model === instance); + assertTrue(id === "123"); + assertTrue(callback === fn); + }; + model.$save(fn); + model.$delete(fn); + model.$loadById("123", fn); +}; + +ModelTest.prototype.testManagedModelCanBeForcedToFlush = function(){ + expectAsserts(6); + var datastore = new DataStore(); + var model = datastore.entity("A", {a:1})(); + + datastore.save = function(instance, callback) { + assertTrue(model === instance); + assertTrue(callback === undefined); + }; + datastore.remove = function(instance, callback) { + assertTrue(model === instance); + assertTrue(callback === undefined); + }; + datastore.flush = function(){ + assertTrue(true); + }; + model.$save(true); + model.$delete(true); +}; + + +ModelTest.prototype.testItShouldMakeDeepCopyOfInitialValues = function (){ + var initial = {a:[]}; + var entity = new DataStore().entity("A", initial); + var model = entity(); + model.a.push(1); + assertEquals(0, entity().a.length); +}; diff --git a/test/moveToAngularCom/ServerTest.js b/test/moveToAngularCom/ServerTest.js new file mode 100644 index 00000000..02fab84c --- /dev/null +++ b/test/moveToAngularCom/ServerTest.js @@ -0,0 +1,42 @@ +ServerTest = TestCase("ServerTest"); +ServerTest.prototype.testBreakLargeRequestIntoPackets = function() { + var log = ""; + var server = new Server("http://server", function(url){ + log += "|" + url; + }); + server.maxSize = 30; + server.uuid = "uuid"; + server.request("POST", "/data/database", {}, function(code, r){ + assertEquals(200, code); + assertEquals("response", r); + }); + angularCallbacks.uuid0("response"); + assertEquals( + "|http://server/$/uuid0/2/1?h=eyJtIjoiUE9TVCIsInAiOnt9LCJ1Ij" + + "|http://server/$/uuid0/2/2?h=oiL2RhdGEvZGF0YWJhc2UifQ==", + log); +}; + +ServerTest.prototype.testItShouldEncodeUsingUrlRules = function() { + var server = new Server("http://server"); + assertEquals("fn5-fn5-", server.base64url("~~~~~~")); + assertEquals("fn5_fn5_", server.base64url("~~\u007f~~\u007f")); +}; + +FrameServerTest = TestCase("FrameServerTest"); + +FrameServerTest.prototype = { + testRead:function(){ + var window = {name:'$DATASET:"MyData"'}; + var server = new FrameServer(window); + server.read(); + assertEquals("MyData", server.data); + }, + testWrite:function(){ + var window = {}; + var server = new FrameServer(window); + server.data = "TestData"; + server.write(); + assertEquals('$DATASET:"TestData"', window.name); + } +}; diff --git a/test/moveToAngularCom/UsersTest.js b/test/moveToAngularCom/UsersTest.js new file mode 100644 index 00000000..f0ff545a --- /dev/null +++ b/test/moveToAngularCom/UsersTest.js @@ -0,0 +1,26 @@ +// Copyright (C) 2008,2009 BRAT Tech LLC + +UsersTest = TestCase("UsersTest"); + +UsersTest.prototype = { + setUp:function(){}, + + tearDown:function(){}, + + testItShouldFetchCurrentUser:function(){ + expectAsserts(5); + var user; + var users = new Users({request:function(method, url, request, callback){ + assertEquals("GET", method); + assertEquals("/account.json", url); + assertEquals("{}", toJson(request)); + callback(200, {$status_code:200, user:{name:'misko'}}); + }}); + users.fetchCurrentUser(function(u){ + user = u; + assertEquals("misko", u.name); + assertEquals("misko", users.current.name); + }); + } + +}; -- cgit v1.2.3