diff --git a/src/m365/entra/commands/administrativeunit/administrativeunit-list.spec.ts b/src/m365/entra/commands/administrativeunit/administrativeunit-list.spec.ts index 0528d10b1ac..73a4f930e70 100644 --- a/src/m365/entra/commands/administrativeunit/administrativeunit-list.spec.ts +++ b/src/m365/entra/commands/administrativeunit/administrativeunit-list.spec.ts @@ -1,6 +1,8 @@ import assert from 'assert'; import sinon from 'sinon'; +import { z } from 'zod'; import auth from '../../../../Auth.js'; +import { CommandInfo } from '../../../../cli/CommandInfo.js'; import { Logger } from '../../../../cli/Logger.js'; import { CommandError } from '../../../../Command.js'; import request from '../../../../request.js'; @@ -8,6 +10,7 @@ import { telemetry } from '../../../../telemetry.js'; import { pid } from '../../../../utils/pid.js'; import { session } from '../../../../utils/session.js'; import { sinonUtil } from '../../../../utils/sinonUtil.js'; +import { cli } from '../../../../cli/cli.js'; import commands from '../../commands.js'; import command from './administrativeunit-list.js'; @@ -15,6 +18,8 @@ describe(commands.ADMINISTRATIVEUNIT_LIST, () => { let log: string[]; let logger: Logger; let loggerLogSpy: sinon.SinonSpy; + let commandInfo: CommandInfo; + let commandOptionsSchema: z.ZodTypeAny; before(() => { sinon.stub(auth, 'restoreAuth').resolves(); @@ -22,6 +27,8 @@ describe(commands.ADMINISTRATIVEUNIT_LIST, () => { sinon.stub(pid, 'getProcessName').returns(''); sinon.stub(session, 'getId').returns(''); auth.connection.active = true; + commandInfo = cli.getCommandInfo(command); + commandOptionsSchema = commandInfo.command.getSchemaToParse()!; }); beforeEach(() => { @@ -85,9 +92,7 @@ describe(commands.ADMINISTRATIVEUNIT_LIST, () => { throw 'Invalid request'; }); - await command.action(logger, { - options: {} - }); + await command.action(logger, { options: commandOptionsSchema.parse({}) }); assert( loggerLogSpy.calledWith([ @@ -125,9 +130,7 @@ describe(commands.ADMINISTRATIVEUNIT_LIST, () => { throw 'Invalid request'; }); - await command.action(logger, { - options: { properties: 'id,displayName' } - }); + await command.action(logger, { options: commandOptionsSchema.parse({ properties: 'id,displayName' }) }); assert( loggerLogSpy.calledWith([ @@ -152,7 +155,7 @@ describe(commands.ADMINISTRATIVEUNIT_LIST, () => { }); await assert.rejects( - command.action(logger, { options: {} } as any), + command.action(logger, { options: commandOptionsSchema.parse({}) }), new CommandError('An error has occurred') ); }); diff --git a/src/m365/entra/commands/administrativeunit/administrativeunit-list.ts b/src/m365/entra/commands/administrativeunit/administrativeunit-list.ts index e7d3bcffb00..8183115d8a5 100644 --- a/src/m365/entra/commands/administrativeunit/administrativeunit-list.ts +++ b/src/m365/entra/commands/administrativeunit/administrativeunit-list.ts @@ -1,19 +1,22 @@ +import { z } from 'zod'; import { AdministrativeUnit } from '@microsoft/microsoft-graph-types'; import { Logger } from '../../../../cli/Logger.js'; +import { globalOptionsZod } from '../../../../Command.js'; import { odata } from '../../../../utils/odata.js'; +import { zod } from '../../../../utils/zod.js'; import GraphCommand from '../../../base/GraphCommand.js'; import commands from '../../commands.js'; -import GlobalOptions from '../../../../GlobalOptions.js'; +const options = globalOptionsZod + .extend({ + properties: zod.alias('p', z.string().optional()) + }).strict(); +declare type Options = z.infer; interface CommandArgs { options: Options; } -export interface Options extends GlobalOptions { - properties?: string; -} - class EntraAdministrativeUnitListCommand extends GraphCommand { public get name(): string { return commands.ADMINISTRATIVEUNIT_LIST; @@ -23,29 +26,12 @@ class EntraAdministrativeUnitListCommand extends GraphCommand { return 'Retrieves a list of administrative units'; } - public defaultProperties(): string[] | undefined { - return ['id', 'displayName', 'visibility']; + public get schema(): z.ZodTypeAny | undefined { + return options; } - constructor() { - super(); - - this.#initTelemetry(); - this.#initOptions(); - } - - #initTelemetry(): void { - this.telemetry.push((args: CommandArgs) => { - Object.assign(this.telemetryProperties, { - properties: typeof args.options.properties !== 'undefined' - }); - }); - } - - #initOptions(): void { - this.options.unshift( - { option: '-p, --properties [properties]' } - ); + public defaultProperties(): string[] | undefined { + return ['id', 'displayName', 'visibility']; } public async commandAction(logger: Logger, args: CommandArgs): Promise {