diff --git a/projects/calendar_test.go b/projects/calendar_test.go index f43e9b8..a5de167 100644 --- a/projects/calendar_test.go +++ b/projects/calendar_test.go @@ -15,6 +15,10 @@ func TestCalendarCreate(t *testing.T) { t.Skip("Skipping test because the engine is not initialized") } + // Only one blocked time calendar is allowed per user, so a leftover from an + // interrupted run makes the "all fields" case fail until it is removed. + deleteBlockedTimeCalendar(t) + tests := []struct { name string input projects.CalendarCreateRequest @@ -55,6 +59,35 @@ func TestCalendarCreate(t *testing.T) { } } +// deleteBlockedTimeCalendar removes the user's blocked time calendar if one +// exists, so tests that create one start from a clean slate. +func deleteBlockedTimeCalendar(t *testing.T) { + t.Helper() + + ctx, cancel := context.WithTimeout(t.Context(), 10*time.Second) + t.Cleanup(cancel) + + for request := projects.NewCalendarListRequest(); ; { + response, err := projects.CalendarList(ctx, engine, request) + if err != nil { + t.Fatalf("failed to list calendars: %s", err) + } + for _, calendar := range response.Calendars { + if calendar.Type != projects.CalendarTypeBlockedTime { + continue + } + if _, err := projects.CalendarDelete(ctx, engine, projects.NewCalendarDeleteRequest(calendar.ID)); err != nil { + t.Fatalf("failed to delete leftover blocked time calendar: %s", err) + } + } + next := response.Iterate() + if next == nil { + return + } + request = *next + } +} + func TestCalendarDelete(t *testing.T) { if engine == nil { t.Skip("Skipping test because the engine is not initialized") diff --git a/projects/project.go b/projects/project.go index a57fab5..beebeda 100644 --- a/projects/project.go +++ b/projects/project.go @@ -120,6 +120,10 @@ type Project struct { // "deleted". Status ProjectStatus `json:"status"` + // IsBillable indicates whether time logged to the project is billable by + // default. + IsBillable *bool `json:"isBillable"` + // Type is the type of the project. It can be "normal", "tasklists-template", // "projects-template", "personal", "holder-project", "tentative" or // "global-messages". diff --git a/projects/sparse_fields_gen.go b/projects/sparse_fields_gen.go index 175a74b..518b112 100644 --- a/projects/sparse_fields_gen.go +++ b/projects/sparse_fields_gen.go @@ -349,6 +349,7 @@ const ( ProjectFieldCompletedAt ProjectField = "completedAt" ProjectFieldCompletedBy ProjectField = "completedBy" ProjectFieldStatus ProjectField = "status" + ProjectFieldIsBillable ProjectField = "isBillable" ProjectFieldType ProjectField = "type" )