added a .sync() method to the json serializer. Changed the tests accordingly. popcorn-port
authorhamidouk
Wed, 12 Oct 2011 14:00:14 +0200
branchpopcorn-port
changeset 69 3f7a2e8a948f
parent 68 5469b2b9743f
child 70 3f86d4126491
added a .sync() method to the json serializer. Changed the tests accordingly.
src/js/data.js
unittests/tests/JSONSerializer.js
--- a/src/js/data.js	Wed Oct 12 13:59:38 2011 +0200
+++ b/src/js/data.js	Wed Oct 12 14:00:14 2011 +0200
@@ -42,6 +42,18 @@
   return JSON.parse(data);
 };
 
+IriSP.JSONSerializer.prototype.sync = function(callback) {
+  /* we don't have to do much because jQuery handles json for us */
+  var wrapper = function(obj) {
+    return function(data) {    
+      obj._data = data;
+      callback(data);
+    }
+  };
+  
+  this._DataLoader.get(this._url, wrapper(this));
+};
+
 IriSP.SerializerFactory = function(DataLoader) {
   this._dataloader = DataLoader;
 };
--- a/unittests/tests/JSONSerializer.js	Wed Oct 12 13:59:38 2011 +0200
+++ b/unittests/tests/JSONSerializer.js	Wed Oct 12 14:00:14 2011 +0200
@@ -1,6 +1,6 @@
 function test_JSONSerializer() {
   module("JSON Serializer tests", 
-    { setup: function() {
+    { setup: function() {      
       this.dt = new IriSP.DataLoader();
       }
     }
@@ -12,5 +12,29 @@
 
       equal(serializer.serialize(arr), JSON.stringify(arr), "assert that the outputted json is correct");
     });
+    
+    test("sync() - callback should get called", function() {
+      this.xhr = this.sandbox.useFakeXMLHttpRequest();
+      this.requests = [];
+      this.xhr.onCreate = function (request) {
+        this.requests.push(request);
+      };
+      
+      var response_array = [{ media: 12, content: "Hey there" }];
+      var response_string = JSON.stringify(response_array);
+  
+      var spy_callback = this.spy();
+      var ser = new IriSP.JSONSerializer(this.dt, "/url");
+      
+      ser.sync(spy_callback);
+      
+      equals(this.xhr.requests.length, 1, "the mock ajax object should have received the request");
+      this.xhr.requests[0].respond(200, { "Content-Type": "application/json" },
+                             response_string);
+        
+      ok(spy_callback.calledOnce, "callback called");
+      ok(spy_callback.calledWith(response_array), "callback called with correct value");
+      deepEqual(ser._data, response_array, "the internal variable is initialized to the correct value");
+    });
 
 };
\ No newline at end of file