diff --git a/test/extension/commands/reloadApp.test.ts b/test/extension/commands/reloadApp.test.ts new file mode 100644 index 000000000..6cd98abfd --- /dev/null +++ b/test/extension/commands/reloadApp.test.ts @@ -0,0 +1,49 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for details. + +import assert = require("assert"); +import Sinon = require("sinon"); +import proxyquire = require("proxyquire"); + +suite("reloadAppCommand", function () { + function createCommandModule(sendMessageToMetroStub: Sinon.SinonStub) { + class FakeCommand { + static formInstance(): any { + return new this(); + } + } + + const module = proxyquire.noCallThru()("../../../src/extension/commands/reloadApp", { + "./util": { + sendMessageToMetro: sendMessageToMetroStub, + }, + "./util/command": { + Command: FakeCommand, + }, + }) as typeof import("../../../src/extension/commands/reloadApp"); + + return module.ReloadApp; + } + + test("should send the reload message to Metro for the current project", async function () { + const sendMessageToMetroStub = Sinon.stub().returns(Promise.resolve()); + const ReloadApp = createCommandModule(sendMessageToMetroStub); + const command = ReloadApp.formInstance(); + const project = {}; + (command as any).project = project; + + await command.baseFn(); + + assert.strictEqual(sendMessageToMetroStub.calledWithExactly("reload", project), true); + }); + + test("should propagate errors from Metro", async function () { + const error = new Error("Metro connection failed"); + const sendMessageToMetroStub = Sinon.stub().returns(Promise.reject(error)); + const ReloadApp = createCommandModule(sendMessageToMetroStub); + const command = ReloadApp.formInstance(); + (command as any).project = {}; + + await assert.rejects(() => command.baseFn(), error); + }); +}); diff --git a/test/extension/commands/showDevMenu.test.ts b/test/extension/commands/showDevMenu.test.ts new file mode 100644 index 000000000..9994e0a87 --- /dev/null +++ b/test/extension/commands/showDevMenu.test.ts @@ -0,0 +1,49 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for details. + +import assert = require("assert"); +import Sinon = require("sinon"); +import proxyquire = require("proxyquire"); + +suite("showDevMenuCommand", function () { + function createCommandModule(sendMessageToMetroStub: Sinon.SinonStub) { + class FakeCommand { + static formInstance(): any { + return new this(); + } + } + + const module = proxyquire.noCallThru()("../../../src/extension/commands/showDevMenu", { + "./util": { + sendMessageToMetro: sendMessageToMetroStub, + }, + "./util/command": { + Command: FakeCommand, + }, + }) as typeof import("../../../src/extension/commands/showDevMenu"); + + return module.ShowDevMenu; + } + + test("should send the devMenu message to Metro for the current project", async function () { + const sendMessageToMetroStub = Sinon.stub().returns(Promise.resolve()); + const ShowDevMenu = createCommandModule(sendMessageToMetroStub); + const command = ShowDevMenu.formInstance(); + const project = {}; + (command as any).project = project; + + await command.baseFn(); + + assert.strictEqual(sendMessageToMetroStub.calledWithExactly("devMenu", project), true); + }); + + test("should propagate errors from Metro", async function () { + const error = new Error("Metro connection failed"); + const sendMessageToMetroStub = Sinon.stub().returns(Promise.reject(error)); + const ShowDevMenu = createCommandModule(sendMessageToMetroStub); + const command = ShowDevMenu.formInstance(); + (command as any).project = {}; + + await assert.rejects(() => command.baseFn(), error); + }); +});