You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
3.7 KiB
126 lines
3.7 KiB
// Copyright (c) 2020 Proton Technologies AG |
|
// |
|
// This file is part of ProtonMail Bridge. |
|
// |
|
// ProtonMail Bridge is free software: you can redistribute it and/or modify |
|
// it under the terms of the GNU General Public License as published by |
|
// the Free Software Foundation, either version 3 of the License, or |
|
// (at your option) any later version. |
|
// |
|
// ProtonMail Bridge is distributed in the hope that it will be useful, |
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
// GNU General Public License for more details. |
|
// |
|
// You should have received a copy of the GNU General Public License |
|
// along with ProtonMail Bridge. If not, see <https://www.gnu.org/licenses/>. |
|
|
|
package store |
|
|
|
import ( |
|
"testing" |
|
|
|
"github.com/ProtonMail/proton-bridge/pkg/pmapi" |
|
a "github.com/stretchr/testify/assert" |
|
) |
|
|
|
func newLabel(order int, id, name string) *pmapi.Label { |
|
return &pmapi.Label{ |
|
ID: id, |
|
Name: name, |
|
Order: order, |
|
} |
|
} |
|
|
|
func TestSortByOrder(t *testing.T) { |
|
want := []*pmapi.Label{ |
|
newLabel(-1000, pmapi.InboxLabel, "INBOX"), |
|
newLabel(-5, pmapi.SentLabel, "Sent"), |
|
newLabel(-4, pmapi.ArchiveLabel, "Archive"), |
|
newLabel(-3, pmapi.SpamLabel, "Spam"), |
|
newLabel(-2, pmapi.TrashLabel, "Trash"), |
|
newLabel(-1, pmapi.AllMailLabel, "All Mail"), |
|
newLabel(100, "labelID1", "custom_label"), |
|
newLabel(1000, "folderID1", "custom_folder"), |
|
} |
|
labels := []*pmapi.Label{ |
|
want[6], |
|
want[4], |
|
want[3], |
|
want[7], |
|
want[5], |
|
want[0], |
|
want[2], |
|
want[1], |
|
} |
|
|
|
sortByOrder(labels) |
|
a.Equal(t, want, labels) |
|
} |
|
|
|
func TestMailboxNames(t *testing.T) { |
|
want := map[string]string{ |
|
pmapi.InboxLabel: "INBOX", |
|
pmapi.SentLabel: "Sent", |
|
pmapi.ArchiveLabel: "Archive", |
|
pmapi.SpamLabel: "Spam", |
|
pmapi.TrashLabel: "Trash", |
|
pmapi.AllMailLabel: "All Mail", |
|
pmapi.DraftLabel: "Drafts", |
|
"labelID1": "Labels/Label1", |
|
"folderID1": "Folders/Folder1", |
|
} |
|
|
|
foldersAndLabels := []*pmapi.Label{ |
|
newLabel(100, "labelID1", "Label1"), |
|
newLabel(1000, "folderID1", "Folder1"), |
|
} |
|
foldersAndLabels[1].Exclusive = 1 |
|
|
|
for _, counts := range getSystemFolders() { |
|
foldersAndLabels = append(foldersAndLabels, counts.getPMLabel()) |
|
} |
|
|
|
got := map[string]string{} |
|
for _, m := range foldersAndLabels { |
|
got[m.ID] = getLabelPrefix(m) + m.Name |
|
} |
|
a.Equal(t, want, got) |
|
} |
|
|
|
func TestAddSystemLabels(t *testing.T) {} |
|
|
|
func checkCounts(t testing.TB, wantCounts []*pmapi.MessagesCount, haveStore *Store) { |
|
nSystemFolders := 7 |
|
haveCounts, err := haveStore.getOnAPICounts() |
|
a.NoError(t, err) |
|
a.Len(t, haveCounts, len(wantCounts)+nSystemFolders) |
|
for iWant, wantCount := range wantCounts { |
|
iHave := iWant + nSystemFolders |
|
haveCount := haveCounts[iHave] |
|
a.Equal(t, wantCount.LabelID, haveCount.LabelID, "iHave:%d\niWant:%d\nHave:%v\nWant:%v", iHave, iWant, haveCount, wantCount) |
|
a.Equal(t, wantCount.Total, int(haveCount.TotalOnAPI), "iHave:%d\niWant:%d\nHave:%v\nWant:%v", iHave, iWant, haveCount, wantCount) |
|
a.Equal(t, wantCount.Unread, int(haveCount.UnreadOnAPI), "iHave:%d\niWant:%d\nHave:%v\nWant:%v", iHave, iWant, haveCount, wantCount) |
|
} |
|
} |
|
|
|
func TestMailboxCountRemove(t *testing.T) { |
|
m, clear := initMocks(t) |
|
defer clear() |
|
m.newStoreNoEvents(true) |
|
|
|
testCounts := []*pmapi.MessagesCount{ |
|
{LabelID: "label1", Total: 100, Unread: 0}, |
|
{LabelID: "label2", Total: 100, Unread: 30}, |
|
{LabelID: "label4", Total: 100, Unread: 100}, |
|
} |
|
a.NoError(t, m.store.createOrUpdateOnAPICounts(testCounts)) |
|
|
|
a.NoError(t, m.store.removeMailboxCount("not existing")) |
|
checkCounts(t, testCounts, m.store) |
|
|
|
var pop *pmapi.MessagesCount |
|
pop, testCounts = testCounts[2], testCounts[0:2] |
|
a.NoError(t, m.store.removeMailboxCount(pop.LabelID)) |
|
checkCounts(t, testCounts, m.store) |
|
}
|
|
|