mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-01-23 05:20:15 -05:00
153 lines
4.5 KiB
Go
153 lines
4.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 TestUnmarshallingUnknown(t *testing.T) {
|
|
require := require.New(t)
|
|
|
|
const text = `{
|
|
"subject": "aaa",
|
|
"bodyStructure": {
|
|
"type": "a",
|
|
"partId": "b",
|
|
"header:x": "yz",
|
|
"header:a": "bc"
|
|
}
|
|
}`
|
|
|
|
var target EmailCreate
|
|
err := json.Unmarshal([]byte(text), &target)
|
|
|
|
require.NoError(err)
|
|
require.Equal("aaa", target.Subject)
|
|
bs := target.BodyStructure
|
|
require.Equal("a", bs.Type)
|
|
require.Equal("b", bs.PartId)
|
|
require.Contains(bs.Other, "header:x")
|
|
require.Equal(bs.Other["header:x"], "yz")
|
|
require.Contains(bs.Other, "header:a")
|
|
require.Equal(bs.Other["header:a"], "bc")
|
|
}
|
|
|
|
func TestMarshallingUnknown(t *testing.T) {
|
|
require := require.New(t)
|
|
|
|
source := EmailCreate{
|
|
Subject: "aaa",
|
|
BodyStructure: EmailBodyStructure{
|
|
Type: "a",
|
|
PartId: "b",
|
|
Other: map[string]any{
|
|
"header:x": "yz",
|
|
"header:a": "bc",
|
|
},
|
|
},
|
|
}
|
|
|
|
result, err := json.Marshal(source)
|
|
require.NoError(err)
|
|
require.Equal(`{"subject":"aaa","bodyStructure":{"header:a":"bc","header:x":"yz","partId":"b","type":"a"}}`, string(result))
|
|
}
|
|
|
|
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)
|
|
}
|