File size: 3,580 Bytes
6a7089a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
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", "<span class='title'></span>")
	_ = cmd.Flags().Set("footer-template", "<span class='pageNumber'></span>")
	_ = 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)
		}
	}
}