Test for statistics button vanishing after root modification of VC

Change-Id: I7c5cff90e390d67a53c53559921e93a6171c0437
diff --git a/dev/js/spec/statSpec.js b/dev/js/spec/statSpec.js
index 32a9e36..94be3f2 100644
--- a/dev/js/spec/statSpec.js
+++ b/dev/js/spec/statSpec.js
@@ -2,108 +2,99 @@
  * Test suite for corpus statistic
  * 
  * @author Helge Stallkamp
+ * @author Nils Diewald
  */
 
 
 define(['vc', 'vc/statistic', 'view/corpstatv'], function(vcClass, statClass, corpStatVClass){
 	 
 	var json = {
-   	  "@type":"koral:docGroup",
-   	  "operation":"operation:or",
-   	  "operands":[
-   	    {
-   	      "@type":"koral:docGroup",
-   	      "operation":"operation:and",
-   	      "operands":[
-   	        {
-   	          "@type":"koral:doc",
-   	          "key":"title",
-   	          "value":"Der Birnbaum",
-   	          "match":"match:eq"
-   	        },
-   	        {
-   	          "@type":"koral:doc",
-   	          "key":"pubPlace",
-   	          "value":"Mannheim",
-   	          "type" : "type:regex",
-   	          "match":"match:contains"
-   	        },
-   	        {
-   	          "@type":"koral:docGroup",
-   	          "operation":"operation:or",
-   	          "operands":[
-   	            {
-   	              "@type":"koral:doc",
-   	              "key":"subTitle",
-   	              "value":"Aufzucht und Pflege",
-   	              "match":"match:eq"
-   	            },
-   	            {
-   	              "@type":"koral:doc",
-   	              "key":"subTitle",
-   	              "value":"Gedichte",
-   	              "match":"match:eq",
-   	              "rewrites" : [
-   	                {
-   	                  "@type": "koral:rewrite",
-   	                  "src" : "policy",
-   	                  "operation" : "operation:injection",
-   	                }
-   	              ]
-   	            }
-   	          ]
-   	        }
-   	      ]
-   	    },
-   	    {
-   	      "@type":"koral:doc",
-   	      "key":"pubDate",
-   	      "type":"type:date",
-   	      "value":"2015-03-05",
-   	      "match":"match:geq"
-   	    }
-   	  ]
-   	};
+   	"@type":"koral:docGroup",
+   	"operation":"operation:or",
+   	"operands":[
+   	  {
+   	    "@type":"koral:docGroup",
+   	    "operation":"operation:and",
+   	    "operands":[
+   	      {
+   	        "@type":"koral:doc",
+   	        "key":"title",
+   	        "value":"Der Birnbaum",
+   	        "match":"match:eq"
+   	      },
+   	      {
+   	        "@type":"koral:doc",
+   	        "key":"pubPlace",
+   	        "value":"Mannheim",
+   	        "type" : "type:regex",
+   	        "match":"match:contains"
+   	      },
+   	      {
+   	        "@type":"koral:docGroup",
+   	        "operation":"operation:or",
+   	        "operands":[
+   	          {
+   	            "@type":"koral:doc",
+   	            "key":"subTitle",
+   	            "value":"Aufzucht und Pflege",
+   	            "match":"match:eq"
+   	          },
+   	          {
+   	            "@type":"koral:doc",
+   	            "key":"subTitle",
+   	            "value":"Gedichte",
+   	            "match":"match:eq",
+   	            "rewrites" : [
+   	              {
+   	                "@type": "koral:rewrite",
+   	                "src" : "policy",
+   	                "operation" : "operation:injection",
+   	              }
+   	            ]
+   	          }
+   	        ]
+   	      }
+   	    ]
+   	  },
+   	  {
+   	    "@type":"koral:doc",
+   	    "key":"pubDate",
+   	    "type":"type:date",
+   	    "value":"2015-03-05",
+   	    "match":"match:geq"
+   	  }
+   	]
+  };
 
 	var preDefinedStat={
-  		"documents":12,
-  		"tokens":2323,
-  		"sentences":343434,
-  		"paragraphs":45454545
+  	"documents":12,
+  	"tokens":2323,
+  	"sentences":343434,
+  	"paragraphs":45454545
 	};
 
   KorAP.API.getCorpStat = function(collQu, cb){
   	return cb(preDefinedStat);
-  	}; 
-  	
+  }; 
+  
  	
 	describe('KorAP.CorpusStat', function(){
-	   
-		var vc = vcClass.create([
-	      ['title', 'string'],
-	      ['subTitle', 'string'],
-	      ['pubDate', 'date'],
-	      ['author', 'text']
-	    ]).fromJson(json);
 
-		vcEl = vc.element();
-    
-		var stat = statClass.create(preDefinedStat);
-		var descL = stat.element();
-		
-			
 		it('should be initiable', function(){
+		  var stat = statClass.create(preDefinedStat);		
 	    expect( function() { statClass.create() }).toThrow(new Error("Missing parameter"));
 		});
 		
 		
-		it('should be parsed in a statistic view and displayed as HTML Description List', function(){		
+		it('should be parsed in a statistic view and displayed as HTML Description List', function(){
+		  var stat = statClass.create(preDefinedStat);		
+      var descL = stat.element();
 			expect(descL.tagName).toEqual('DL');		
 			expect(descL.children[0].tagName).toEqual('DIV');
 			expect(descL.children[0].children[0].tagName).toEqual('DT');
 			expect(descL.children[0].children[0].attributes[0].name).toEqual('title');
 			expect(descL.children[0].children[1].tagName).toEqual('DD');
-					
+			
 			expect(descL.children[0].children[0].firstChild.nodeValue).toEqual('documents');
 			expect(descL.children[0].children[1].firstChild.nodeValue).toEqual('12');
 			expect(descL.children[0].children[0].attributes[0].value).toEqual('documents');
@@ -115,9 +106,16 @@
 		
 		
 		it('should display corpus statistic after creating a corpus statistic view', function(){
-		    statView = corpStatVClass.create(vc);
-		    //corpStatVClass.show(vc);
-		    
+		  var vc = vcClass.create([
+	      ['title', 'string'],
+	      ['subTitle', 'string'],
+	      ['pubDate', 'date'],
+	      ['author', 'text']
+	    ]).fromJson(json);
+
+		  statView = corpStatVClass.create(vc);
+		  //corpStatVClass.show(vc);
+		  
 			var testDiv = document.createElement('div');
 			testDiv.appendChild(statView.show());
 			//statClass.showCorpStat(testDiv, vc);
@@ -127,9 +125,112 @@
 			expect(testDiv.children[0].children[0].tagName).toEqual('DL');	
 			expect(testDiv.children[0].children[0].children[0].children[0].firstChild.nodeValue).toEqual('documents');
 			expect(testDiv.children[0].children[0].children[0].children[1].firstChild.nodeValue).toEqual('12');
-
 		});
-		
-	});
-		
+
+    it('should display the statistics button in a panel', function () {
+		  var vc = vcClass.create([
+	      ['title', 'string'],
+	      ['subTitle', 'string'],
+	      ['pubDate', 'date'],
+	      ['author', 'text']
+	    ]).fromJson(json);
+
+      var show = document.createElement('div');
+
+      show.appendChild(vc.element());
+
+      var panel = show.firstChild.lastChild.firstChild;
+      expect(panel.classList.contains('panel')).toBeTruthy();
+      expect(panel.classList.contains('vcinfo')).toBeTruthy();
+      expect(panel.lastChild.classList.contains('button-group')).toBeTruthy();
+      expect(panel.lastChild.classList.contains('vcinfo')).toBeTruthy();
+      expect(panel.lastChild.children[0].tagName).toEqual('SPAN');
+      expect(panel.lastChild.children[0].textContent).toEqual('Statistics');
+    });
+
+    
+    it('should display the statistics button in a panel after VC modification', function () {
+
+		  var vc = vcClass.create([
+	      ['title', 'string'],
+	      ['subTitle', 'string'],
+	      ['pubDate', 'date'],
+	      ['author', 'text']
+	    ]).fromJson(json);
+
+      var show = document.createElement('div');
+
+      show.appendChild(vc.element());
+
+      expect(show.querySelector(".statistic").tagName).toEqual("SPAN");
+
+      var and = vc.element().firstChild.lastChild.firstChild;
+
+      // Click on and() in VC
+      and.click();
+
+      // Check that statistics is there
+      expect(show.querySelector(".statistic").tagName).toEqual("SPAN");
+    });
+
+    
+    it('should display and hide corpus statistics view in the panel', function () {
+
+		  var vc = vcClass.create([
+	      ['title', 'string'],
+	      ['subTitle', 'string'],
+	      ['pubDate', 'date'],
+	      ['author', 'text']
+	    ]).fromJson(json);
+
+      var show = document.createElement('div');
+
+      show.appendChild(vc.element());
+
+      var panel = show.firstChild.lastChild.firstChild;
+
+      // Show statistics
+      panel.lastChild.children[0].click();
+
+      // Statistics view
+      var viewE = panel.firstChild.firstChild;
+
+      expect(viewE.tagName).toEqual("DIV");
+      expect(viewE.classList.contains("view")).toBeTruthy();
+      expect(viewE.classList.contains("vcstatistic")).toBeTruthy();
+
+      expect(viewE.firstChild.classList.contains("stattable")).toBeTruthy();
+      expect(viewE.firstChild.firstChild.tagName).toEqual("DL");
+
+      // List of statistic values
+      var dl = viewE.firstChild.firstChild.firstChild;
+      expect(dl.firstChild.tagName).toEqual("DT");
+      expect(dl.firstChild.textContent).toEqual("documents");
+      expect(dl.lastChild.tagName).toEqual("DD");
+      expect(dl.lastChild.textContent).toEqual("12");
+
+      expect(viewE.children.length).toEqual(2);  
+
+      expect(viewE.lastChild.classList.contains("button-group")).toBeTruthy();
+      expect(viewE.lastChild.children.length).toEqual(1);
+      expect(viewE.lastChild.firstChild.tagName).toEqual("SPAN");
+      expect(viewE.lastChild.firstChild.textContent).toEqual("Close");
+
+      // Close view
+      viewE.lastChild.firstChild.firstChild.click();
+
+      // Is gone
+      expect(panel.firstChild.children.length).toEqual(0);
+
+      // Show statistics
+      panel.lastChild.children[0].click();
+
+      // Is there
+      expect(panel.firstChild.children.length).toEqual(1);
+
+      // Only show once
+      panel.lastChild.children[0].click();
+      expect(panel.firstChild.children.length).toEqual(1);
+    });
+  });		
 });
diff --git a/dev/js/src/view/corpstatv.js b/dev/js/src/view/corpstatv.js
index 9622a5e..9d4da6d 100644
--- a/dev/js/src/view/corpstatv.js
+++ b/dev/js/src/view/corpstatv.js
@@ -107,7 +107,6 @@
      */
     onClose : function() {
       this.vc = undefined;
-    },
-
+    }
   }
 });