services/sync/tests/unit/test_declined.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/services/sync/tests/unit/test_declined.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,153 @@
     1.4 +/* Any copyright is dedicated to the Public Domain.
     1.5 +   http://creativecommons.org/publicdomain/zero/1.0/ */
     1.6 +
     1.7 +Cu.import("resource://services-sync/stages/declined.js");
     1.8 +Cu.import("resource://services-sync/stages/enginesync.js");
     1.9 +Cu.import("resource://services-sync/engines.js");
    1.10 +Cu.import("resource://services-sync/service.js");
    1.11 +Cu.import("resource://services-common/observers.js");
    1.12 +
    1.13 +function run_test() {
    1.14 +  run_next_test();
    1.15 +}
    1.16 +
    1.17 +function PetrolEngine() {}
    1.18 +PetrolEngine.prototype.name = "petrol";
    1.19 +
    1.20 +function DieselEngine() {}
    1.21 +DieselEngine.prototype.name = "diesel";
    1.22 +
    1.23 +function DummyEngine() {}
    1.24 +DummyEngine.prototype.name = "dummy";
    1.25 +
    1.26 +function ActualEngine() {}
    1.27 +ActualEngine.prototype = {__proto__: Engine.prototype,
    1.28 +                          name: 'actual'};
    1.29 +
    1.30 +function getEngineManager() {
    1.31 +  let manager = new EngineManager(Service);
    1.32 +  Service.engineManager = manager;
    1.33 +  manager._engines = {
    1.34 +    "petrol": new PetrolEngine(),
    1.35 +    "diesel": new DieselEngine(),
    1.36 +    "dummy": new DummyEngine(),
    1.37 +    "actual": new ActualEngine(),
    1.38 +  };
    1.39 +  return manager;
    1.40 +}
    1.41 +
    1.42 +/**
    1.43 + * 'Fetch' a meta/global record that doesn't mention declined.
    1.44 + *
    1.45 + * Push it into the EngineSynchronizer to set enabled; verify that those are
    1.46 + * correct.
    1.47 + *
    1.48 + * Then push it into DeclinedEngines to set declined; verify that none are
    1.49 + * declined, and a notification is sent for our locally disabled-but-not-
    1.50 + * declined engines.
    1.51 + */
    1.52 +add_test(function testOldMeta() {
    1.53 +  let meta = {
    1.54 +    payload: {
    1.55 +      engines: {
    1.56 +        "petrol": 1,
    1.57 +        "diesel": 2,
    1.58 +        "nonlocal": 3,             // Enabled but not supported.
    1.59 +      },
    1.60 +    },
    1.61 +  };
    1.62 +
    1.63 +  _("Record: " + JSON.stringify(meta));
    1.64 +
    1.65 +  let manager = getEngineManager();
    1.66 +
    1.67 +  // Update enabled from meta/global.
    1.68 +  let engineSync = new EngineSynchronizer(Service);
    1.69 +  engineSync._updateEnabledFromMeta(meta, 3, manager);
    1.70 +
    1.71 +  Assert.ok(manager._engines["petrol"].enabled, "'petrol' locally enabled.");
    1.72 +  Assert.ok(manager._engines["diesel"].enabled, "'diesel' locally enabled.");
    1.73 +  Assert.ok(!("nonlocal" in manager._engines), "We don't know anything about the 'nonlocal' engine.");
    1.74 +  Assert.ok(!manager._engines["actual"].enabled, "'actual' not locally enabled.");
    1.75 +  Assert.ok(!manager.isDeclined("actual"), "'actual' not declined, though.");
    1.76 +
    1.77 +  let declinedEngines = new DeclinedEngines(Service);
    1.78 +
    1.79 +  function onNotDeclined(subject, topic, data) {
    1.80 +    Observers.remove("weave:engines:notdeclined", onNotDeclined);
    1.81 +    Assert.ok(subject.undecided.has("actual"), "EngineManager observed that 'actual' was undecided.");
    1.82 +
    1.83 +    let declined = manager.getDeclined();
    1.84 +    _("Declined: " + JSON.stringify(declined));
    1.85 +
    1.86 +    Assert.ok(!meta.changed, "No need to upload a new meta/global.");
    1.87 +    run_next_test();
    1.88 +  }
    1.89 +
    1.90 +  Observers.add("weave:engines:notdeclined", onNotDeclined);
    1.91 +
    1.92 +  declinedEngines.updateDeclined(meta, manager);
    1.93 +});
    1.94 +
    1.95 +/**
    1.96 + * 'Fetch' a meta/global that declines an engine we don't
    1.97 + * recognize. Ensure that we track that declined engine along
    1.98 + * with any we locally declined, and that the meta/global
    1.99 + * record is marked as changed and includes all declined
   1.100 + * engines.
   1.101 + */
   1.102 +add_test(function testDeclinedMeta() {
   1.103 +  let meta = {
   1.104 +    payload: {
   1.105 +      engines: {
   1.106 +        "petrol": 1,
   1.107 +        "diesel": 2,
   1.108 +        "nonlocal": 3,             // Enabled but not supported.
   1.109 +      },
   1.110 +      declined: ["nonexistent"],   // Declined and not supported.
   1.111 +    },
   1.112 +  };
   1.113 +
   1.114 +  _("Record: " + JSON.stringify(meta));
   1.115 +
   1.116 +  let manager = getEngineManager();
   1.117 +  manager._engines["petrol"].enabled = true;
   1.118 +  manager._engines["diesel"].enabled = true;
   1.119 +  manager._engines["dummy"].enabled = true;
   1.120 +  manager._engines["actual"].enabled = false;   // Disabled but not declined.
   1.121 +
   1.122 +  manager.decline(["localdecline"]);            // Declined and not supported.
   1.123 +
   1.124 +  let declinedEngines = new DeclinedEngines(Service);
   1.125 +
   1.126 +  function onNotDeclined(subject, topic, data) {
   1.127 +    Observers.remove("weave:engines:notdeclined", onNotDeclined);
   1.128 +    Assert.ok(subject.undecided.has("actual"), "EngineManager observed that 'actual' was undecided.");
   1.129 +
   1.130 +    let declined = manager.getDeclined();
   1.131 +    _("Declined: " + JSON.stringify(declined));
   1.132 +
   1.133 +    Assert.equal(declined.indexOf("actual"), -1, "'actual' is locally disabled, but not marked as declined.");
   1.134 +
   1.135 +    Assert.equal(declined.indexOf("clients"), -1, "'clients' is enabled and not remotely declined.");
   1.136 +    Assert.equal(declined.indexOf("petrol"), -1, "'petrol' is enabled and not remotely declined.");
   1.137 +    Assert.equal(declined.indexOf("diesel"), -1, "'diesel' is enabled and not remotely declined.");
   1.138 +    Assert.equal(declined.indexOf("dummy"), -1, "'dummy' is enabled and not remotely declined.");
   1.139 +
   1.140 +    Assert.ok(0 <= declined.indexOf("nonexistent"), "'nonexistent' was declined on the server.");
   1.141 +
   1.142 +    Assert.ok(0 <= declined.indexOf("localdecline"), "'localdecline' was declined locally.");
   1.143 +
   1.144 +    // The meta/global is modified, too.
   1.145 +    Assert.ok(0 <= meta.payload.declined.indexOf("nonexistent"), "meta/global's declined contains 'nonexistent'.");
   1.146 +    Assert.ok(0 <= meta.payload.declined.indexOf("localdecline"), "meta/global's declined contains 'localdecline'.");
   1.147 +    Assert.strictEqual(true, meta.changed, "meta/global was changed.");
   1.148 +
   1.149 +    run_next_test();
   1.150 +  }
   1.151 +
   1.152 +  Observers.add("weave:engines:notdeclined", onNotDeclined);
   1.153 +
   1.154 +  declinedEngines.updateDeclined(meta, manager);
   1.155 +});
   1.156 +

mercurial