Skip to content

Migrate outlook message and mail commands to Zod#7374

Open
waldekmastykarz wants to merge 4 commits into
pnp:mainfrom
waldekmastykarz:waldekmastykarz/migrate-outlook-to-zod
Open

Migrate outlook message and mail commands to Zod#7374
waldekmastykarz wants to merge 4 commits into
pnp:mainfrom
waldekmastykarz:waldekmastykarz/migrate-outlook-to-zod

Conversation

@waldekmastykarz
Copy link
Copy Markdown
Member

What's in this PR

Migrates the outlook message and outlook mail commands to use Zod validation schemas, replacing the legacy interface-based validation pattern.

Commands migrated

  • outlook message get
  • outlook message list
  • outlook message move
  • outlook message remove
  • outlook mail send

Changes per command

  • Removed constructor, #initTelemetry(), #initOptions(), #initValidators(), #initTypes(), #initOptionSets()
  • Added exported Zod schema (options) with z.strictObject()
  • Added get schema() and getRefinedSchema() methods
  • Updated test files to use commandOptionsSchema.safeParse() for validation tests

Notes

  • mail-send.ts keeps this.validators for filesystem-dependent attachment validation (file existence/size checks can't be expressed as Zod schemas)
  • mail-searchfolder-add.ts was already migrated and is not part of this PR

Closes #7308

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>
@milanholemans
Copy link
Copy Markdown
Contributor

@waldekmastykarz, seems like not all code is covered by tests.

@milanholemans milanholemans marked this pull request as draft May 28, 2026 15:21
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>
@waldekmastykarz waldekmastykarz marked this pull request as ready for review May 29, 2026 06:39
@MartinM85 MartinM85 requested a review from Copilot June 3, 2026 04:48
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 options Zod schemas (with globalOptionsZod) and schema/getRefinedSchema() hooks for the migrated commands.
  • Replaces legacy validation tests with commandOptionsSchema.safeParse(...) checks derived from getSchemaToParse().
  • 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().

Comment thread src/m365/outlook/commands/mail/mail-send.spec.ts Outdated
Comment thread src/m365/outlook/commands/mail/mail-send.ts Outdated
@MartinM85 MartinM85 marked this pull request as draft June 3, 2026 05:40
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>
@waldekmastykarz
Copy link
Copy Markdown
Member Author

Thanks @milanholemans! Fixed the coverage issues and also moved the attachment validation from this.validators to getRefinedSchema() so it actually runs in the Zod schema-driven validation path.

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>
@waldekmastykarz waldekmastykarz marked this pull request as ready for review June 5, 2026 11:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Migrate outlook message and outlook mail commands to Zod

3 participants