summaryrefslogtreecommitdiffstats
path: root/services/sync/tests/unit/test_password_tracker.js
blob: ddfc524ab044c51a075cbdd6a89c93e490e64203 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

Cu.import("resource://services-sync/constants.js");
Cu.import("resource://services-sync/engines/passwords.js");
Cu.import("resource://services-sync/engines.js");
Cu.import("resource://services-sync/service.js");
Cu.import("resource://services-sync/util.js");

Service.engineManager.register(PasswordEngine);
let engine = Service.engineManager.get("passwords");
let store  = engine._store;
let tracker = engine._tracker;

// Don't do asynchronous writes.
tracker.persistChangedIDs = false;

function run_test() {
  initTestLogging("Trace");
  run_next_test();
}

add_test(function test_tracking() {
  let recordNum = 0;

  _("Verify we've got an empty tracker to work with.");
  do_check_empty(tracker.changedIDs);

  function createPassword() {
    _("RECORD NUM: " + recordNum);
    let record = {id: "GUID" + recordNum,
                  hostname: "http://foo.bar.com",
                  formSubmitURL: "http://foo.bar.com/baz",
                  username: "john" + recordNum,
                  password: "smith",
                  usernameField: "username",
                  passwordField: "password"};
    recordNum++;
    let login = store._nsLoginInfoFromRecord(record);
    Services.logins.addLogin(login);
  }

  try {
    _("Create a password record. Won't show because we haven't started tracking yet");
    createPassword();
    do_check_empty(tracker.changedIDs);
    do_check_eq(tracker.score, 0);

    _("Tell the tracker to start tracking changes.");
    Svc.Obs.notify("weave:engine:start-tracking");
    createPassword();
    do_check_attribute_count(tracker.changedIDs, 1);
    do_check_eq(tracker.score, SCORE_INCREMENT_XLARGE);

    _("Notifying twice won't do any harm.");
    Svc.Obs.notify("weave:engine:start-tracking");
    createPassword();
    do_check_attribute_count(tracker.changedIDs, 2);
    do_check_eq(tracker.score, SCORE_INCREMENT_XLARGE * 2);

    _("Let's stop tracking again.");
    tracker.clearChangedIDs();
    tracker.resetScore();
    Svc.Obs.notify("weave:engine:stop-tracking");
    createPassword();
    do_check_empty(tracker.changedIDs);
    do_check_eq(tracker.score, 0);

    _("Notifying twice won't do any harm.");
    Svc.Obs.notify("weave:engine:stop-tracking");
    createPassword();
    do_check_empty(tracker.changedIDs);
    do_check_eq(tracker.score, 0);

  } finally {
    _("Clean up.");
    store.wipe();
    tracker.clearChangedIDs();
    tracker.resetScore();
    Svc.Obs.notify("weave:engine:stop-tracking");
    run_next_test();
  }
});

add_test(function test_onWipe() {
  _("Verify we've got an empty tracker to work with.");
  do_check_empty(tracker.changedIDs);
  do_check_eq(tracker.score, 0);

  try {
    _("A store wipe should increment the score");
    Svc.Obs.notify("weave:engine:start-tracking");
    store.wipe();

    do_check_eq(tracker.score, SCORE_INCREMENT_XLARGE);
  } finally {
    tracker.resetScore();
    Svc.Obs.notify("weave:engine:stop-tracking");
    run_next_test();
  }
});