summaryrefslogtreecommitdiffstats
path: root/services/sync/modules-testing/fxa_utils.js
diff options
context:
space:
mode:
Diffstat (limited to 'services/sync/modules-testing/fxa_utils.js')
-rw-r--r--services/sync/modules-testing/fxa_utils.js65
1 files changed, 65 insertions, 0 deletions
diff --git a/services/sync/modules-testing/fxa_utils.js b/services/sync/modules-testing/fxa_utils.js
new file mode 100644
index 0000000000..f55e07c4b8
--- /dev/null
+++ b/services/sync/modules-testing/fxa_utils.js
@@ -0,0 +1,65 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+var EXPORTED_SYMBOLS = ["initializeIdentityWithTokenServerResponse"];
+
+const { Log } = ChromeUtils.importESModule(
+ "resource://gre/modules/Log.sys.mjs"
+);
+const { Weave } = ChromeUtils.import("resource://services-sync/main.js");
+const { SyncAuthManager } = ChromeUtils.import(
+ "resource://services-sync/sync_auth.js"
+);
+const { TokenServerClient } = ChromeUtils.import(
+ "resource://services-common/tokenserverclient.js"
+);
+const { configureFxAccountIdentity } = ChromeUtils.import(
+ "resource://testing-common/services/sync/utils.js"
+);
+
+// Create a new sync_auth object and initialize it with a
+// mocked TokenServerClient which always receives the specified response.
+var initializeIdentityWithTokenServerResponse = function(response) {
+ // First create a mock "request" object that well' hack into the token server.
+ // A log for it
+ let requestLog = Log.repository.getLogger("testing.mock-rest");
+ if (!requestLog.appenders.length) {
+ // might as well see what it says :)
+ requestLog.addAppender(new Log.DumpAppender());
+ requestLog.level = Log.Level.Trace;
+ }
+
+ // A mock request object.
+ function MockRESTRequest(url) {}
+ MockRESTRequest.prototype = {
+ _log: requestLog,
+ setHeader() {},
+ async get() {
+ this.response = response;
+ return response;
+ },
+ };
+ // The mocked TokenServer client which will get the response.
+ function MockTSC() {}
+ MockTSC.prototype = new TokenServerClient();
+ MockTSC.prototype.constructor = MockTSC;
+ MockTSC.prototype.newRESTRequest = function(url) {
+ return new MockRESTRequest(url);
+ };
+ // Arrange for the same observerPrefix as sync_auth uses.
+ MockTSC.prototype.observerPrefix = "weave:service";
+
+ // tie it all together.
+ Weave.Status.__authManager = Weave.Service.identity = new SyncAuthManager();
+ let syncAuthManager = Weave.Service.identity;
+ // a sanity check
+ if (!(syncAuthManager instanceof SyncAuthManager)) {
+ throw new Error("sync isn't configured to use sync_auth");
+ }
+ let mockTSC = new MockTSC();
+ configureFxAccountIdentity(syncAuthManager);
+ syncAuthManager._tokenServerClient = mockTSC;
+};