package actions import ( "os" "path/filepath" "strings" "testing" "github.com/spf13/cobra" ) func newPDFCmd() *cobra.Command { cmd := &cobra.Command{} cmd.Flags().String("output", "", "") cmd.Flags().String("tab", "", "") cmd.Flags().Bool("landscape", false, "") cmd.Flags().String("scale", "", "") cmd.Flags().String("paper-width", "", "") cmd.Flags().String("paper-height", "", "") cmd.Flags().String("margin-top", "", "") cmd.Flags().String("margin-bottom", "", "") cmd.Flags().String("margin-left", "", "") cmd.Flags().String("margin-right", "", "") cmd.Flags().String("page-ranges", "", "") cmd.Flags().Bool("prefer-css-page-size", false, "") cmd.Flags().Bool("display-header-footer", false, "") cmd.Flags().String("header-template", "", "") cmd.Flags().String("footer-template", "", "") cmd.Flags().Bool("generate-tagged-pdf", false, "") cmd.Flags().Bool("generate-document-outline", false, "") cmd.Flags().Bool("file-output", false, "") cmd.Flags().String("path", "", "") return cmd } func TestPDF(t *testing.T) { m := newMockServer() m.response = "FAKEPDFDATA" defer m.close() client := m.server.Client() outFile := filepath.Join(t.TempDir(), "test.pdf") cmd := newPDFCmd() _ = cmd.Flags().Set("output", outFile) _ = cmd.Flags().Set("tab", "tab-abc") _ = cmd.Flags().Set("landscape", "true") _ = cmd.Flags().Set("scale", "0.8") PDF(client, m.base(), "", cmd) if m.lastPath != "/tabs/tab-abc/pdf" { t.Errorf("expected /tabs/tab-abc/pdf, got %s", m.lastPath) } if !strings.Contains(m.lastQuery, "landscape=true") { t.Errorf("expected landscape=true, got %s", m.lastQuery) } if !strings.Contains(m.lastQuery, "scale=0.8") { t.Errorf("expected scale=0.8, got %s", m.lastQuery) } data, err := os.ReadFile(outFile) if err != nil { t.Fatalf("file not written: %v", err) } if string(data) != "FAKEPDFDATA" { t.Errorf("unexpected content: %s", string(data)) } } func TestPDFAllOptions(t *testing.T) { m := newMockServer() m.response = "FAKEPDFDATA" defer m.close() client := m.server.Client() outFile := filepath.Join(t.TempDir(), "test.pdf") cmd := newPDFCmd() _ = cmd.Flags().Set("output", outFile) _ = cmd.Flags().Set("tab", "tab-123") _ = cmd.Flags().Set("landscape", "true") _ = cmd.Flags().Set("scale", "1.5") _ = cmd.Flags().Set("paper-width", "11") _ = cmd.Flags().Set("paper-height", "8.5") _ = cmd.Flags().Set("margin-top", "1") _ = cmd.Flags().Set("margin-bottom", "1") _ = cmd.Flags().Set("margin-left", "0.5") _ = cmd.Flags().Set("margin-right", "0.5") _ = cmd.Flags().Set("page-ranges", "1-3,5") _ = cmd.Flags().Set("prefer-css-page-size", "true") _ = cmd.Flags().Set("display-header-footer", "true") _ = cmd.Flags().Set("header-template", "") _ = cmd.Flags().Set("footer-template", "") _ = cmd.Flags().Set("generate-tagged-pdf", "true") _ = cmd.Flags().Set("generate-document-outline", "true") PDF(client, m.base(), "", cmd) if m.lastPath != "/tabs/tab-123/pdf" { t.Errorf("expected /tabs/tab-123/pdf, got %s", m.lastPath) } expectedParams := []string{ "landscape=true", "scale=1.5", "paperWidth=11", "paperHeight=8.5", "marginTop=1", "marginBottom=1", "marginLeft=0.5", "marginRight=0.5", "preferCSSPageSize=true", "displayHeaderFooter=true", "generateTaggedPDF=true", "generateDocumentOutline=true", "raw=true", } for _, expected := range expectedParams { if !strings.Contains(m.lastQuery, expected) { t.Errorf("expected %s in query, got %s", expected, m.lastQuery) } } }