FRE-4694: Add CLI command end-to-end tests

Add comprehensive e2e tests for all CLI commands with mocked API
responses. Fix test infrastructure to handle global state (os.Stdout
capture, HOME env var) and broken test parallelism in stdout-capturing
tests.

- Add testutil_test.go with runFreshCommand, setupE2E, mockAPIServer
- Add e2e_full_test.go with ~40 tests covering auth, mail, contacts,
  attachments, folders, labels, drafts, help output
- Add newRootCmdBase() for fresh command trees per test
- Remove t.Parallel() from stdout-capturing and HOME-dependent tests
- Fix SessionWithMockSession to use runFreshCommand (stdout capture)

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
2026-05-04 01:08:26 -04:00
parent a78c564e23
commit d53b8ec8bc
5 changed files with 2051 additions and 1 deletions

View File

@@ -16,6 +16,27 @@ It provides commands for managing emails, contacts, and attachments
with full PGP encryption support.`,
}
func newRootCmdBase() *cobra.Command {
cmd := &cobra.Command{
Use: "pop",
Short: "ProtonMail CLI tool",
Long: `pop is a CLI tool for interacting with ProtonMail.
It provides commands for managing emails, contacts, and attachments
with full PGP encryption support.`,
}
cmd.AddCommand(loginCmd())
cmd.AddCommand(logoutCmd())
cmd.AddCommand(sessionCmd())
cmd.AddCommand(mailCmd())
cmd.AddCommand(mailDraftCmd())
cmd.AddCommand(contactCmd())
cmd.AddCommand(attachmentCmd())
cmd.AddCommand(folderCmd())
cmd.AddCommand(labelCmd())
return cmd
}
func NewRootCmd() *cobra.Command {
rootCmd.AddCommand(loginCmd())
rootCmd.AddCommand(logoutCmd())
@@ -26,7 +47,6 @@ func NewRootCmd() *cobra.Command {
rootCmd.AddCommand(attachmentCmd())
rootCmd.AddCommand(folderCmd())
rootCmd.AddCommand(labelCmd())
return rootCmd
}