Migrate outlook message and mail commands to Zod#7374
Merged
MartinM85 merged 5 commits intoJun 17, 2026
Conversation
Contributor
|
@waldekmastykarz, seems like not all code is covered by tests. |
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(). |
Member
Author
|
Thanks @milanholemans! Fixed the coverage issues and also moved the attachment validation from |
MartinM85
requested changes
Jun 12, 2026
MartinM85
left a comment
Contributor
There was a problem hiding this comment.
Hi @waldekmastykarz , I have a couple of comments, great job otherwise. 👍
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 <[email protected]>
Add explicit tests for schema getters, refined schemas, and Zod error callbacks (invalid GUID/UPN) to reach 100% function coverage. Co-authored-by: Copilot <[email protected]>
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 <[email protected]>
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 <[email protected]>
Address review comments: - Wrap all command.action() options with commandOptionsSchema.parse() - Convert remaining command.validate() to commandOptionsSchema.safeParse() - Add fs stubs for attachment tests that go through Zod refinements - Use base options.parse() for tests that intentionally bypass refinements Co-authored-by: Copilot <[email protected]>
6a8350f to
9879df6
Compare
MartinM85
approved these changes
Jun 17, 2026
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