text: /* Any copyright is dedicated to the Public Domain.
     http://creativecommons.org/publicdomain/zero/1.0/ */
  
  Cu.import("resource://services-sync/record.js");
  Cu.import("resource://services-sync/identity.js");
  Cu.import("resource://services-sync/resource.js");
  Cu.import("resource://services-sync/service.js");
  Cu.import("resource://services-sync/util.js");
  Cu.import("resource://testing-common/services/sync/utils.js");
  
  
  function test_toJSON() {
    _("Create a record, for now without a TTL.");
    let wbo = new WBORecord("coll", "a_record");
    wbo.modified = 12345;
    wbo.sortindex = 42;
    wbo.payload = {};
  
    _("Verify that the JSON representation contains the WBO properties, but not TTL.");
    let json = JSON.parse(JSON.stringify(wbo));
    do_check_eq(json.modified, 12345);
    do_check_eq(json.sortindex, 42);
    do_check_eq(json.payload, "{}");
    do_check_false("ttl" in json);
  
    _("Set a TTL, make sure it's present in the JSON representation.");
    wbo.ttl = 30*60;
    json = JSON.parse(JSON.stringify(wbo));
    do_check_eq(json.ttl, 30*60);
  }
  
  
  function test_fetch() {
    let record = {id: "asdf-1234-asdf-1234",
                  modified: 2454725.98283,
                  payload: JSON.stringify({cheese: "roquefort"})};
    let record2 = {id: "record2",
                   modified: 2454725.98284,
                   payload: JSON.stringify({cheese: "gruyere"})};
    let coll = [{id: "record2",
                 modified: 2454725.98284,
                 payload: JSON.stringify({cheese: "gruyere"})}];
  
    _("Setting up server.");
    let server = httpd_setup({
      "/record":  httpd_handler(200, "OK", JSON.stringify(record)),
      "/record2": httpd_handler(200, "OK", JSON.stringify(record2)),
      "/coll":    httpd_handler(200, "OK", JSON.stringify(coll))
    });
    do_test_pending();
  
    try {
      _("Fetching a WBO record");
      let rec = new WBORecord("coll", "record");
      rec.fetch(Service.resource(server.baseURI + "/record"));
      do_check_eq(rec.id, "asdf-1234-asdf-1234"); // NOT "record"!
  
      do_check_eq(rec.modified, 2454725.98283);
      do_check_eq(typeof(rec.payload), "object");
      do_check_eq(rec.payload.cheese, "roquefort");
  
      _("Fetching a WBO record using the record manager");
      let rec2 = Service.recordManager.get(server.baseURI + "/record2");
      do_check_eq(rec2.id, "record2");
      do_check_eq(rec2.modified, 2454725.98284);
      do_check_eq(typeof(rec2.payload), "object");
      do_check_eq(rec2.payload.cheese, "gruyere");
      do_check_eq(Service.recordManager.response.status, 200);
  
      // Testing collection extraction.
      _("Extracting collection.");
      let rec3 = new WBORecord("tabs", "foo");   // Create through constructor.
      do_check_eq(rec3.collection, "tabs");
  
    } finally {
      server.stop(do_test_finished);
    }
  }
  
  function run_test() {
    initTestLogging("Trace");
    ensureLegacyIdentityManager();
  
    test_toJSON();
    test_fetch();
  }
  