Skip to content

Commit

Permalink
test: add unit test for CardDAV mkcol
Browse files Browse the repository at this point in the history
  • Loading branch information
DeepDiver1975 committed Feb 23, 2024
1 parent c2ad716 commit 89545b3
Showing 1 changed file with 44 additions and 3 deletions.
47 changes: 44 additions & 3 deletions carddav/carddav_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package carddav
import (
"context"
"fmt"
"github.com/stretchr/testify/assert"
"net/http"
"net/http/httptest"
"strings"
Expand All @@ -12,7 +13,9 @@ import (
"github.com/emersion/go-webdav"
)

type testBackend struct{}
type testBackend struct {
addressBooks []AddressBook
}

type contextKey string

Expand Down Expand Up @@ -68,8 +71,9 @@ func (b *testBackend) GetAddressBook(ctx context.Context, path string) (*Address
return nil, webdav.NewHTTPError(404, fmt.Errorf("Not found"))
}

func (*testBackend) CreateAddressBook(ctx context.Context, ab *AddressBook) error {
panic("TODO: implement")
func (b *testBackend) CreateAddressBook(ctx context.Context, ab *AddressBook) error {
b.addressBooks = append(b.addressBooks, *ab)
return nil
}

func (*testBackend) DeleteAddressBook(ctx context.Context, path string) error {
Expand Down Expand Up @@ -190,3 +194,40 @@ func TestAddressBookDiscovery(t *testing.T) {
})
}
}

var mkcolRequestBody = `
<?xml version="1.0" encoding="utf-8" ?>
<D:mkcol xmlns:D="DAV:"
xmlns:C="urn:ietf:params:xml:ns:carddav">
<D:set>
<D:prop>
<D:resourcetype>
<D:collection/>
<C:addressbook/>
</D:resourcetype>
<D:displayname>Lisa's Contacts</D:displayname>
<C:addressbook-description xml:lang="en"
>My primary address book.</C:addressbook-description>
</D:prop>
</D:set>
</D:mkcol>`

func TestCreateAddressbookMinimalBody(t *testing.T) {
tb := testBackend{
addressBooks: nil,
}
b := backend{
Backend: &tb,
Prefix: "/dav",
}
req := httptest.NewRequest("MKCOL", "/dav/addressbooks/user0/test-addressbook", strings.NewReader(mkcolRequestBody))
req.Header.Set("Content-Type", "application/xml")

err := b.Mkcol(req)
assert.NoError(t, err)
assert.Len(t, tb.addressBooks, 1)
c := tb.addressBooks[0]
assert.Equal(t, "Lisa's Contacts", c.Name)
assert.Equal(t, "/dav/addressbooks/user0/test-addressbook", c.Path)
assert.Equal(t, "My primary address book.", c.Description)
}

0 comments on commit 89545b3

Please sign in to comment.