Files
opencloud/pkg/jmap/jmap_tools_test.go
2026-01-22 09:42:23 +01:00

106 lines
3.5 KiB
Go

package jmap
import (
"encoding/json"
"testing"
"github.com/stretchr/testify/require"
)
func TestDeserializeMailboxGetResponse(t *testing.T) {
require := require.New(t)
jsonBytes, _, jmapErr := serveTestFile(t, "mailboxes1.json")
require.NoError(jmapErr)
var data Response
err := json.Unmarshal(jsonBytes, &data)
require.NoError(err)
require.Empty(data.CreatedIds)
require.Equal("3e25b2a0", data.SessionState)
require.Len(data.MethodResponses, 1)
resp := data.MethodResponses[0]
require.Equal(CommandMailboxGet, resp.Command)
require.Equal("0", resp.Tag)
require.IsType(MailboxGetResponse{}, resp.Parameters)
mgr := resp.Parameters.(MailboxGetResponse)
require.Equal("cs", mgr.AccountId)
require.Len(mgr.List, 5)
require.Equal("n", mgr.State)
require.Empty(mgr.NotFound)
var folders = []struct {
id string
name string
role string
total int
unread int
}{
{"a", "Inbox", "inbox", 10, 8},
{"b", "Deleted Items", "trash", 20, 0},
{"c", "Junk Mail", "junk", 0, 0},
{"d", "Drafts", "drafts", 0, 0},
{"e", "Sent Items", "sent", 0, 0},
}
for i, expected := range folders {
folder := mgr.List[i]
require.Equal(expected.id, folder.Id)
require.Equal(expected.name, folder.Name)
require.Equal(expected.role, folder.Role)
require.Equal(expected.total, folder.TotalEmails)
require.Equal(expected.total, folder.TotalThreads)
require.Equal(expected.unread, folder.UnreadEmails)
require.Equal(expected.unread, folder.UnreadThreads)
require.Empty(folder.ParentId)
require.Zero(folder.SortOrder)
require.True(folder.IsSubscribed)
require.True(folder.MyRights.MayReadItems)
require.True(folder.MyRights.MayAddItems)
require.True(folder.MyRights.MayRemoveItems)
require.True(folder.MyRights.MaySetSeen)
require.True(folder.MyRights.MaySetKeywords)
require.True(folder.MyRights.MayCreateChild)
require.True(folder.MyRights.MayRename)
require.True(folder.MyRights.MayDelete)
require.True(folder.MyRights.MaySubmit)
}
}
func TestDeserializeEmailGetResponse(t *testing.T) {
require := require.New(t)
jsonBytes, _, jmapErr := serveTestFile(t, "mails1.json")
require.NoError(jmapErr)
var data Response
err := json.Unmarshal(jsonBytes, &data)
require.NoError(err)
require.Empty(data.CreatedIds)
require.Equal("3e25b2a0", data.SessionState)
require.Len(data.MethodResponses, 2)
resp := data.MethodResponses[1]
require.Equal(CommandEmailGet, resp.Command)
require.Equal("1", resp.Tag)
require.IsType(EmailGetResponse{}, resp.Parameters)
egr := resp.Parameters.(EmailGetResponse)
require.Equal("d", egr.AccountId)
require.Len(egr.List, 3)
require.Equal("suqmq", egr.State)
require.Empty(egr.NotFound)
email := egr.List[0]
require.Equal("moyaaaddw", email.Id)
require.Equal("cbejozsk1fgcviw7thwzsvtgmf1ep0a3izjoimj02jmtsunpeuwmsaya1yma", email.BlobId)
}
func TestUnmarshallingError(t *testing.T) {
require := require.New(t)
responseBody := `{"methodResponses":[["error",{"type":"forbidden","description":"You do not have access to account a"},"a:0"]],"sessionState":"3e25b2a0"}`
var response Response
err := json.Unmarshal([]byte(responseBody), &response)
require.NoError(err)
require.Len(response.MethodResponses, 1)
require.Equal(ErrorCommand, response.MethodResponses[0].Command)
require.Equal("a:0", response.MethodResponses[0].Tag)
require.IsType(ErrorResponse{}, response.MethodResponses[0].Parameters)
er, _ := response.MethodResponses[0].Parameters.(ErrorResponse)
require.Equal("forbidden", er.Type)
require.Equal("You do not have access to account a", er.Description)
}