diff --git a/carddav/carddav_test.go b/carddav/carddav_test.go index f4f6b26..3527a3e 100644 --- a/carddav/carddav_test.go +++ b/carddav/carddav_test.go @@ -12,7 +12,9 @@ import ( "github.com/emersion/go-webdav" ) -type testBackend struct{} +type testBackend struct { + addressBooks []AddressBook +} type contextKey string @@ -68,8 +70,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 { @@ -190,3 +193,50 @@ func TestAddressBookDiscovery(t *testing.T) { }) } } + +var mkcolRequestBody = ` + + + + + + + + + Lisa's Contacts + My primary address book. + + + ` + +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) + if err != nil { + t.Fatalf("Unexpcted error in Mkcol: %s", err) + } + if len(tb.addressBooks) != 1 { + t.Fatalf("Found %d address books, expected 1", len(tb.addressBooks)) + } + c := tb.addressBooks[0] + if c.Name != "Lisa's Contacts" { + t.Fatalf("Address book name is '%s', expected 'Lisa's Contacts'", c.Name) + } + if c.Path != "/dav/addressbooks/user0/test-addressbook" { + t.Fatalf("Address book path is '%s', expected '/dav/addressbooks/user0/test-addressbook'", c.Path) + } + if c.Description != "My primary address book." { + t.Fatalf("Address book sdscription is '%s', expected 'My primary address book.'", c.Description) + } +}