From 162c49b8b847f60f0bcc64189b9ca8cd7baf0a38 Mon Sep 17 00:00:00 2001
From: Shane Tomlinson <stomlinson@mozilla.com>
Date: Wed, 11 Jul 2012 13:49:51 +0100
Subject: [PATCH] Fix exception being thrown if KPI data is disabled.

issue #1978
---
 .../static/common/js/modules/interaction_data.js | 15 +++++++++++++--
 .../cases/common/js/modules/interaction_data.js  | 16 +++++++++++++---
 2 files changed, 26 insertions(+), 5 deletions(-)

diff --git a/resources/static/common/js/modules/interaction_data.js b/resources/static/common/js/modules/interaction_data.js
index 8f36514da..77267d474 100644
--- a/resources/static/common/js/modules/interaction_data.js
+++ b/resources/static/common/js/modules/interaction_data.js
@@ -155,9 +155,12 @@ BrowserID.Modules.InteractionData = (function() {
   }
 
   function onKPIData(msg, result) {
+    // currentData will be undefined if sampling is disabled.
     var currentData = this.getCurrent();
-    _.extend(currentData, result);
-    model.setCurrent(currentData);
+    if (currentData) {
+      _.extend(currentData, result);
+      model.setCurrent(currentData);
+    }
   }
 
   // At every load, after session_context returns, try to publish the previous
@@ -281,6 +284,14 @@ BrowserID.Modules.InteractionData = (function() {
     ,
     setNameTable: function(table) {
       this.mediatorToKPINameTable = table;
+    },
+
+    enable: function() {
+      this.samplingEnabled = true;
+    },
+
+    disable: function() {
+      this.samplingEnabled = false;
     }
     // END TEST API
   });
diff --git a/resources/static/test/cases/common/js/modules/interaction_data.js b/resources/static/test/cases/common/js/modules/interaction_data.js
index 1beb33008..669b0fe30 100644
--- a/resources/static/test/cases/common/js/modules/interaction_data.js
+++ b/resources/static/test/cases/common/js/modules/interaction_data.js
@@ -14,7 +14,7 @@
       mediator = bid.Mediator,
       controller;
 
-  module("shared/modules/interaction_data", {
+  module("common/js/modules/interaction_data", {
     setup: function() {
       testHelpers.setup();
       localStorage.removeItem("interaction_data");
@@ -246,13 +246,23 @@
     });
   });
 
-  asyncTest("kpi_data message adds fields to current kpi_data", function() {
+  asyncTest("kpi_data message only adds fields to current kpi_data if sampling is enabled", function() {
     createController();
     network.withContext(function() {
+      // number_emails will not be added to KPI data because sampling is
+      // disabled.
+      controller.disable();
       mediator.publish("kpi_data", { number_emails: 1 });
+      testHelpers.testUndefined(controller.getCurrent());
+
+      // number_emails will be added to KPI data because sampling is
+      // disabled.
+      controller.enable();
+      mediator.publish("kpi_data", { number_emails: 2 });
       testHelpers.testObjectValuesEqual(controller.getCurrent(), {
-        number_emails: 1
+        number_emails: 2
       });
+
       start();
     });
   });
-- 
GitLab