1package imap_test
2
3import (
4	"bytes"
5	"testing"
6
7	"github.com/emersion/go-imap"
8)
9
10func TestStatusResp_WriteTo(t *testing.T) {
11	tests := []struct {
12		input    *imap.StatusResp
13		expected string
14	}{
15		{
16			input: &imap.StatusResp{
17				Tag:  "*",
18				Type: imap.StatusRespOk,
19			},
20			expected: "* OK \r\n",
21		},
22		{
23			input: &imap.StatusResp{
24				Tag:  "*",
25				Type: imap.StatusRespOk,
26				Info: "LOGIN completed",
27			},
28			expected: "* OK LOGIN completed\r\n",
29		},
30		{
31			input: &imap.StatusResp{
32				Tag:  "42",
33				Type: imap.StatusRespBad,
34				Info: "Invalid arguments",
35			},
36			expected: "42 BAD Invalid arguments\r\n",
37		},
38		{
39			input: &imap.StatusResp{
40				Tag:  "a001",
41				Type: imap.StatusRespOk,
42				Code: "READ-ONLY",
43				Info: "EXAMINE completed",
44			},
45			expected: "a001 OK [READ-ONLY] EXAMINE completed\r\n",
46		},
47		{
48			input: &imap.StatusResp{
49				Tag:       "*",
50				Type:      imap.StatusRespOk,
51				Code:      "CAPABILITY",
52				Arguments: []interface{}{imap.RawString("IMAP4rev1")},
53				Info:      "IMAP4rev1 service ready",
54			},
55			expected: "* OK [CAPABILITY IMAP4rev1] IMAP4rev1 service ready\r\n",
56		},
57	}
58
59	for i, test := range tests {
60		b := &bytes.Buffer{}
61		w := imap.NewWriter(b)
62
63		if err := test.input.WriteTo(w); err != nil {
64			t.Errorf("Cannot write status #%v, got error: %v", i, err)
65			continue
66		}
67
68		o := b.String()
69		if o != test.expected {
70			t.Errorf("Invalid output for status #%v: %v", i, o)
71		}
72	}
73}
74
75func TestStatus_Err(t *testing.T) {
76	status := &imap.StatusResp{Type: imap.StatusRespOk, Info: "All green"}
77	if err := status.Err(); err != nil {
78		t.Error("OK status returned error:", err)
79	}
80
81	status = &imap.StatusResp{Type: imap.StatusRespBad, Info: "BAD!"}
82	if err := status.Err(); err == nil {
83		t.Error("BAD status didn't returned error:", err)
84	} else if err.Error() != "BAD!" {
85		t.Error("BAD status returned incorrect error message:", err)
86	}
87
88	status = &imap.StatusResp{Type: imap.StatusRespNo, Info: "NO!"}
89	if err := status.Err(); err == nil {
90		t.Error("NO status didn't returned error:", err)
91	} else if err.Error() != "NO!" {
92		t.Error("NO status returned incorrect error message:", err)
93	}
94}
95