mirror of https://git.sr.ht/~rjarry/aerc
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
2.7 KiB
Go
104 lines
2.7 KiB
Go
package middleware
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestFolderMap_Apply(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
mapping map[string]string
|
|
order []string
|
|
input []string
|
|
want []string
|
|
}{
|
|
{
|
|
name: "strict single folder mapping",
|
|
mapping: map[string]string{"Drafts": "INBOX/Drafts"},
|
|
order: []string{"Drafts"},
|
|
input: []string{"INBOX/Drafts"},
|
|
want: []string{"Drafts"},
|
|
},
|
|
{
|
|
name: "prefix mapping with * suffix",
|
|
mapping: map[string]string{"Prefix/": "INBOX/*"},
|
|
order: []string{"Prefix/"},
|
|
input: []string{"INBOX", "INBOX/Test1", "INBOX/Test2", "Archive"},
|
|
want: []string{"INBOX", "Prefix/Test1", "Prefix/Test2", "Archive"},
|
|
},
|
|
{
|
|
name: "remove prefix with * in key",
|
|
mapping: map[string]string{"*": "INBOX/*"},
|
|
order: []string{"*"},
|
|
input: []string{"INBOX", "INBOX/Test1", "INBOX/Test2", "Archive"},
|
|
want: []string{"INBOX", "Test1", "Test2", "Archive"},
|
|
},
|
|
{
|
|
name: "remove two prefixes with * in keys",
|
|
mapping: map[string]string{
|
|
"*": "INBOX/*",
|
|
"**": "PROJECT/*",
|
|
},
|
|
order: []string{"*", "**"},
|
|
input: []string{"INBOX", "INBOX/Test1", "INBOX/Test2", "Archive", "PROJECT/sub1", "PROJECT/sub2"},
|
|
want: []string{"INBOX", "Test1", "Test2", "Archive", "sub1", "sub2"},
|
|
},
|
|
{
|
|
name: "multiple, sequential mappings",
|
|
mapping: map[string]string{
|
|
"Archive/existing": "Archive*",
|
|
"Archive": "Archivum*",
|
|
},
|
|
order: []string{"Archive/existing", "Archive"},
|
|
input: []string{"Archive", "Archive/sub", "Archivum", "Archivum/year1"},
|
|
want: []string{"Archive/existing", "Archive/existing/sub", "Archive", "Archive/year1"},
|
|
},
|
|
}
|
|
|
|
for i, test := range tests {
|
|
fm := &folderMap{
|
|
mapping: test.mapping,
|
|
order: test.order,
|
|
}
|
|
var result []string
|
|
for _, in := range test.input {
|
|
result = append(result, fm.Apply(in))
|
|
}
|
|
if !reflect.DeepEqual(result, test.want) {
|
|
t.Errorf("test (%d: %s) failed: want '%v' but got '%v'",
|
|
i, test.name, test.want, result)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestFolderMap_createFolder(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
table map[string]string
|
|
input string
|
|
want string
|
|
}{
|
|
{
|
|
name: "create normal folder",
|
|
table: map[string]string{"Drafts": "INBOX/Drafts"},
|
|
input: "INBOX/Drafts2",
|
|
want: "INBOX/Drafts2",
|
|
},
|
|
{
|
|
name: "create mapped folder",
|
|
table: map[string]string{"Drafts": "INBOX/Drafts"},
|
|
input: "Drafts/Sub",
|
|
want: "INBOX/Drafts/Sub",
|
|
},
|
|
}
|
|
|
|
for i, test := range tests {
|
|
result := createFolder(test.table, test.input)
|
|
if result != test.want {
|
|
t.Errorf("test (%d: %s) failed: want '%v' but got '%v'",
|
|
i, test.name, test.want, result)
|
|
}
|
|
}
|
|
}
|