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.
90 lines
2.9 KiB
90 lines
2.9 KiB
// Copyright (c) 2022 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 ( |
|
"sort" |
|
"testing" |
|
|
|
"github.com/ljanyst/peroxide/pkg/pmapi" |
|
"github.com/stretchr/testify/assert" |
|
"github.com/stretchr/testify/require" |
|
) |
|
|
|
func TestLoadSaveSyncState(t *testing.T) { |
|
m, clear := initMocks(t) |
|
defer clear() |
|
|
|
m.newStoreNoEvents(t, true) |
|
insertMessage(t, m, "msg1", "Test message 1", addrID1, false, []string{pmapi.AllMailLabel, pmapi.InboxLabel}) |
|
insertMessage(t, m, "msg2", "Test message 2", addrID1, false, []string{pmapi.AllMailLabel, pmapi.InboxLabel}) |
|
|
|
// Clear everything. |
|
|
|
syncState := m.store.loadSyncState() |
|
syncState.clearFinishTime() |
|
|
|
// Check everything is empty at the beginning. |
|
|
|
syncState = m.store.loadSyncState() |
|
checkSyncStateAfterLoad(t, syncState, false, false, []string{}) |
|
|
|
// Save IDs ranges and check everything is also properly loaded. |
|
|
|
syncState.initIDRanges() |
|
syncState.addIDRange("100") |
|
syncState.addIDRange("200") |
|
syncState.save() |
|
|
|
syncState = m.store.loadSyncState() |
|
checkSyncStateAfterLoad(t, syncState, false, true, []string{}) |
|
|
|
// Save IDs to be deleted and check everything is properly loaded. |
|
|
|
require.Nil(t, syncState.loadMessageIDsToBeDeleted()) |
|
|
|
syncState = m.store.loadSyncState() |
|
checkSyncStateAfterLoad(t, syncState, false, true, []string{"msg1", "msg2"}) |
|
|
|
// Set finish time and check everything is resetted to empty values. |
|
|
|
syncState.setFinishTime() |
|
|
|
syncState = m.store.loadSyncState() |
|
checkSyncStateAfterLoad(t, syncState, true, false, []string{}) |
|
} |
|
|
|
func checkSyncStateAfterLoad(t *testing.T, syncState *syncState, wantIsFinished bool, wantIDRanges bool, wantIDsToBeDeleted []string) { |
|
assert.Equal(t, wantIsFinished, syncState.isFinished()) |
|
|
|
if wantIDRanges { |
|
require.Equal(t, 3, len(syncState.idRanges)) |
|
assert.Equal(t, "", syncState.idRanges[0].StartID) |
|
assert.Equal(t, "100", syncState.idRanges[0].StopID) |
|
assert.Equal(t, "100", syncState.idRanges[1].StartID) |
|
assert.Equal(t, "200", syncState.idRanges[1].StopID) |
|
assert.Equal(t, "200", syncState.idRanges[2].StartID) |
|
assert.Equal(t, "", syncState.idRanges[2].StopID) |
|
} else { |
|
assert.Empty(t, syncState.idRanges) |
|
} |
|
|
|
idsToBeDeleted := syncState.getIDsToBeDeleted() |
|
sort.Strings(idsToBeDeleted) |
|
assert.Equal(t, wantIDsToBeDeleted, idsToBeDeleted) |
|
}
|
|
|