/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

function test() {
  waitForExplicitFinish();
  try {
    let cm = Cc["@mozilla.org/categorymanager;1"].getService(Ci.nsICategoryManager);
    cm.getCategoryEntry("healthreport-js-provider-default", "SearchesProvider");
  } catch (ex) {
    // Health Report disabled, or no SearchesProvider.
    ok(true, "Firefox Health Report is not enabled.");
    finish();
    return;
  }

  let reporter = Cc["@mozilla.org/datareporting/service;1"]
                   .getService()
                   .wrappedJSObject
                   .healthReporter;
  ok(reporter, "Health Reporter available.");
  reporter.onInit().then(function onInit() {
    let provider = reporter.getProvider("org.mozilla.searches");
    ok(provider, "Searches provider is available.");
    let m = provider.getMeasurement("counts", 2);

    m.getValues().then(function onData(data) {
      let now = new Date();
      let oldCount = 0;

      // This will to be need changed if default search engine is not Google.
      let field = "google.urlbar";

      if (data.days.hasDay(now)) {
        let day = data.days.getDay(now);
        if (day.has(field)) {
          oldCount = day.get(field);
        }
      }

      let tab = gBrowser.addTab();
      gBrowser.selectedTab = tab;

      gURLBar.value = "firefox health report";
      gURLBar.handleCommand();

      executeSoon(() => executeSoon(() => {
        gBrowser.removeTab(tab);

        m.getValues().then(function onData(data) {
          ok(data.days.hasDay(now), "FHR has data for today.");
          let day = data.days.getDay(now);
          ok(day.has(field), "FHR has url bar count for today.");

          let newCount = day.get(field);

          is(newCount, oldCount + 1, "Exactly one search has been recorded.");
          finish();
        });
      }));
    });
  });
}

