1package tui
2
3import (
4 "testing"
5)
6
7func TestValidPort(t *testing.T) {
8 tests := []struct {
9 name string
10 input string
11 fallback int
12 want int
13 }{
14 {"empty string returns fallback", "", 993, 993},
15 {"valid port 993", "993", 143, 993},
16 {"valid port 1 (minimum)", "1", 993, 1},
17 {"valid port 65535 (maximum)", "65535", 993, 65535},
18 {"valid port 587", "587", 25, 587},
19 {"valid port 995", "995", 110, 995},
20 {"port 0 is invalid, returns fallback", "0", 993, 993},
21 {"negative port is invalid", "-1", 993, 993},
22 {"port over 65535 is invalid", "70000", 993, 993},
23 {"non-numeric returns fallback", "abc", 993, 993},
24 {"port with spaces returns fallback", " 993 ", 993, 993},
25 {"port 8080", "8080", 993, 8080},
26 {"large negative number", "-99999", 993, 993},
27 {"very large number", "9999999", 993, 993},
28 }
29
30 for _, tt := range tests {
31 t.Run(tt.name, func(t *testing.T) {
32 got := validPort(tt.input, tt.fallback)
33 if got != tt.want {
34 t.Errorf("validPort(%q, %d) = %d, want %d", tt.input, tt.fallback, got, tt.want)
35 }
36 })
37 }
38}
39
40func TestValidPortDifferentFallbacks(t *testing.T) {
41 if got := validPort("", 143); got != 143 {
42 t.Errorf("empty with fallback 143 = %d, want 143", got)
43 }
44 if got := validPort("", 587); got != 587 {
45 t.Errorf("empty with fallback 587 = %d, want 587", got)
46 }
47 if got := validPort("", 995); got != 995 {
48 t.Errorf("empty with fallback 995 = %d, want 995", got)
49 }
50 if got := validPort("bad", 25); got != 25 {
51 t.Errorf("invalid with fallback 25 = %d, want 25", got)
52 }
53}
54
55func TestSubmitFormPortValidation(t *testing.T) {
56 m := NewLogin(true)
57
58 tests := []struct {
59 name string
60 portVal string
61 want int
62 fallback int
63 }{
64 {"valid custom port 143", "143", 143, 993},
65 {"invalid port 0 falls back", "0", 993, 993},
66 {"invalid negative port falls back", "-1", 993, 993},
67 {"invalid overflow port falls back", "70000", 993, 993},
68 {"non-numeric port falls back", "abc", 993, 993},
69 {"empty port uses default", "", 993, 993},
70 {"boundary port 1", "1", 1, 993},
71 {"boundary port 65535", "65535", 65535, 993},
72 }
73
74 for _, tt := range tests {
75 t.Run(tt.name, func(t *testing.T) {
76 m.inputs[inputIMAPPort].SetValue(tt.portVal)
77 fn := m.submitForm()
78 msg := fn().(Credentials)
79 if msg.IMAPPort != tt.want {
80 t.Errorf("IMAPPort for input %q = %d, want %d", tt.portVal, msg.IMAPPort, tt.want)
81 }
82 })
83 }
84}