unittests/tests/serializers/JSONSerializer.js
branchpopcorn-port
changeset 234 43b198dc932d
child 317 a3492448fa9a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/unittests/tests/serializers/JSONSerializer.js	Mon Nov 14 12:26:17 2011 +0100
@@ -0,0 +1,140 @@
+function test_JSONSerializer() {
+  module("JSON Serializer tests", 
+    { setup: function() {      
+      this.dt = new IriSP.DataLoader();
+      }
+    }
+    );    
+    
+    test("should return the correct JSON", function() {
+      var arr = ["ab", {"de" : "fg"}, "lp"];
+      var serializer = new IriSP.JSONSerializer(this.dt);
+
+      equal(serializer.serialize(arr), JSON.stringify(arr), "assert that the outputted json is correct");
+    });
+    
+    test("sync()", 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", 
+                             annotations: [{"begin": "32", "end" : 64}, {"begin": "08", "end" : 27},{"begin": "02", "end" : 61}]  };
+
+      /* sorted array is our comparision array */
+      var sorted_array = IriSP.jQuery.extend({}, response_array);
+      sorted_array.annotations.sort(function(a, b) 
+          { var a_begin = +a.begin;
+            var b_begin = +b.begin;
+            return a_begin - b_begin;
+          });
+          
+      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");
+      equals(this.xhr.requests[0].url, "/url", "the requested url is correct");
+
+      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");
+      
+      var order_preserved = true;
+      
+      var i = 0;
+      for(i = 0; i < ser._data.length - 1; i++) {
+        if (ser._data.annotations[i].begin > ser._data.annotations[i+1].begin) {
+            order_preserved = false;
+            break;
+        }
+      }
+      
+      ok(order_preserved, "the annotation sub-array is sorted by begin time");
+    });
+
+    test("currentMedia should return the current media", function() {
+      var ser = new IriSP.JSONSerializer(this.dt, "/url");
+
+      ser._data = {}
+      ser._data.medias = [0];
+      equal(ser.currentMedia(), 0, "currentMedia() returns the correct value");
+    });
+
+    test("test annotation search", function() {
+      var ser = new IriSP.JSONSerializer(this.dt, "../test/test.json");
+            
+      ser._data = { annotations : [
+      {"content": {        
+        "description": "professeur", 
+        "title": "garrigou"
+        }},
+      { "content": {        
+        "description": "interview", 
+        "title": "Revue de presse - Hervé Gardette"
+      }},
+      {"content": {        
+        "description": "concept", 
+        "title": "idée"
+      }},
+      { "content": {        
+        "description": "", 
+        "title": "sans titre"
+      }}
+      ]};
+      
+      equal(ser.searchAnnotations("GarriGOU", "", "").length, 1, "requesting on title works");
+      equal(ser.searchAnnotations("", "IntErView", "").length, 1, "requesting on description works");      
+      equal(ser.searchAnnotations("", "", "").length, 4, "empty request works");
+      equal(ser.searchAnnotations("idée", "concept", "").length, 1, "specific request works");
+      
+      
+    });
+    
+    test("test occurence count", function() {
+    var ser = new IriSP.JSONSerializer(this.dt, "../test/test.json");
+            
+      ser._data = { annotations : [
+      {"content": {        
+        "description": "professeur", 
+        "title": "garrigou"
+        }, "id" : 1 },
+      { "content": {        
+        "description": "interview", 
+        "title": "Revue de presse - Hervé Gardette"
+      }, "id" : 2},
+      {"content": {        
+        "description": "concept", 
+        "title": "idée"
+      }, "id" : 3},
+      { "content": {        
+        "description": "", 
+        "title": "sans titre"
+      }, "id" : 4}
+      ]};
+      
+      // a function to get the number of fields in a dict.
+      function countOccurences(queryString) {
+        var count = 0;
+        for (var i in ser.searchOccurences(queryString)) {
+          count++;
+        };
+        
+        return count;
+      };
+      
+      equal(countOccurences("garrigou"), 1, "first request works");
+      deepEqual(ser.searchOccurences("garrigou"), {1 : 1}, "returned object is correctly defined");
+          
+      equal(countOccurences("garrigou interview"), 2, "second request works");
+      equal(countOccurences("garrigou idée interview"), 3, "third request works");
+    });
+};
\ No newline at end of file