diff --git a/src/m365/commands/docs.spec.ts b/src/m365/commands/docs.spec.ts index 4e9361be668..54952753c46 100644 --- a/src/m365/commands/docs.spec.ts +++ b/src/m365/commands/docs.spec.ts @@ -1,6 +1,8 @@ import assert from 'assert'; import sinon from 'sinon'; +import { z } from 'zod'; import { cli } from '../../cli/cli.js'; +import { CommandInfo } from '../../cli/CommandInfo.js'; import { Logger } from '../../cli/Logger.js'; import { telemetry } from '../../telemetry.js'; import { app } from '../../utils/app.js'; @@ -16,11 +18,15 @@ describe(commands.DOCS, () => { let logger: Logger; let loggerLogSpy: sinon.SinonSpy; let getSettingWithDefaultValueStub: sinon.SinonStub; + let commandInfo: CommandInfo; + let commandOptionsSchema: z.ZodTypeAny; before(() => { sinon.stub(telemetry, 'trackEvent').resolves(); sinon.stub(pid, 'getProcessName').callsFake(() => ''); sinon.stub(session, 'getId').callsFake(() => ''); + commandInfo = cli.getCommandInfo(command); + commandOptionsSchema = commandInfo.command.getSchemaToParse()!; }); beforeEach(() => { @@ -59,8 +65,18 @@ describe(commands.DOCS, () => { assert.notStrictEqual(command.description, null); }); + it('passes validation with no options', () => { + const actual = commandOptionsSchema.safeParse({}); + assert.strictEqual(actual.success, true); + }); + + it('fails validation with unknown options', () => { + const actual = commandOptionsSchema.safeParse({ option: "value" }); + assert.strictEqual(actual.success, false); + }); + it('should log a message and return if autoOpenLinksInBrowser is false', async () => { - await command.action(logger, { options: {} }); + await command.action(logger, { options: commandOptionsSchema.parse({}) }); assert(loggerLogSpy.calledWith(app.packageJson().homepage)); }); @@ -74,7 +90,7 @@ describe(commands.DOCS, () => { } throw 'Invalid url'; }); - await command.action(logger, { options: {} }); + await command.action(logger, { options: commandOptionsSchema.parse({}) }); assert(openStub.calledWith(app.packageJson().homepage)); }); }); \ No newline at end of file diff --git a/src/m365/commands/docs.ts b/src/m365/commands/docs.ts index ab54a58f004..55213e89586 100644 --- a/src/m365/commands/docs.ts +++ b/src/m365/commands/docs.ts @@ -1,11 +1,15 @@ +import { z } from 'zod'; import { cli } from '../../cli/cli.js'; import { Logger } from '../../cli/Logger.js'; +import { globalOptionsZod } from '../../Command.js'; import { settingsNames } from '../../settingsNames.js'; import { app } from '../../utils/app.js'; import { browserUtil } from '../../utils/browserUtil.js'; import AnonymousCommand from '../base/AnonymousCommand.js'; import commands from './commands.js'; +const options = globalOptionsZod.strict(); + class DocsCommand extends AnonymousCommand { public get name(): string { return commands.DOCS; @@ -15,6 +19,10 @@ class DocsCommand extends AnonymousCommand { return 'Returns the CLI for Microsoft 365 docs webpage URL'; } + public get schema(): z.ZodTypeAny | undefined { + return options; + } + public async commandAction(logger: Logger): Promise { await logger.log(app.packageJson().homepage);