Migrate outlook message and mail commands to Zod#7374
Open
waldekmastykarz wants to merge 4 commits into
Open
Conversation
Migrates the following commands to use Zod validation schemas: - outlook message get - outlook message list - outlook message move - outlook message remove - outlook mail send Closes pnp#7308 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
|
@waldekmastykarz, seems like not all code is covered by tests. |
Add explicit tests for schema getters, refined schemas, and Zod error callbacks (invalid GUID/UPN) to reach 100% function coverage. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
Pull request overview
This PR migrates the Outlook message and mail commands from the legacy interface/validator/options pattern to Zod-based schemas, aligning these commands with the CLI’s schema-driven option parsing, prompting, and telemetry model.
Changes:
- Introduces exported
optionsZod schemas (withglobalOptionsZod) andschema/getRefinedSchema()hooks for the migrated commands. - Replaces legacy validation tests with
commandOptionsSchema.safeParse(...)checks derived fromgetSchemaToParse(). - Keeps filesystem-dependent attachment validation in
mail-send, but it currently isn’t executed in the schema-driven runtime path (requires adjustment).
Reviewed changes
Copilot reviewed 10 out of 10 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/m365/outlook/commands/message/message-remove.ts | Adds Zod schema for message remove options and removes legacy option/type/validator setup. |
| src/m365/outlook/commands/message/message-remove.spec.ts | Updates validation tests to use the command’s Zod schema via safeParse. |
| src/m365/outlook/commands/message/message-move.ts | Adds Zod schema + refined schema for option-set rules (source/target folder requirements). |
| src/m365/outlook/commands/message/message-move.spec.ts | Migrates validation tests from command.validate() to Zod safeParse. |
| src/m365/outlook/commands/message/message-list.ts | Adds Zod schema + refined schema for option-set rules and date validation. |
| src/m365/outlook/commands/message/message-list.spec.ts | Migrates validation tests to Zod safeParse and adds schema/refined-schema assertions. |
| src/m365/outlook/commands/message/message-get.ts | Adds Zod schema + refined schema for userId/userName mutual exclusivity. |
| src/m365/outlook/commands/message/message-get.spec.ts | Adds schema/refined-schema assertions and schema-based validation tests. |
| src/m365/outlook/commands/mail/mail-send.ts | Adds Zod schema, but attachment validation remains in legacy validators which won’t run in schema mode. |
| src/m365/outlook/commands/mail/mail-send.spec.ts | Partially migrates validation tests; includes a new attachment validation test that still uses command.validate(). |
The attachment file existence, file type, and size validation in mail-send was in this.validators which doesn't run when a Zod schema is defined. Moved these checks to getRefinedSchema() so they execute during safeParseAsync in the schema-driven validation path. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Member
Author
|
Thanks @milanholemans! Fixed the coverage issues and also moved the attachment validation from |
Zod runs all chained .refine() calls even when earlier ones fail, causing fs.readFileSync to be called on non-existent files. Merged the three separate refine calls into a single one that short-circuits on the first validation failure, matching the original behavior. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What's in this PR
Migrates the
outlook messageandoutlook mailcommands to use Zod validation schemas, replacing the legacy interface-based validation pattern.Commands migrated
outlook message getoutlook message listoutlook message moveoutlook message removeoutlook mail sendChanges per command
constructor,#initTelemetry(),#initOptions(),#initValidators(),#initTypes(),#initOptionSets()options) withz.strictObject()get schema()andgetRefinedSchema()methodscommandOptionsSchema.safeParse()for validation testsNotes
mail-send.tskeepsthis.validatorsfor filesystem-dependent attachment validation (file existence/size checks can't be expressed as Zod schemas)mail-searchfolder-add.tswas already migrated and is not part of this PRCloses #7308