- Implement client-side Filter builder with tag, status, due date, and search filters - Add unit tests for Filter with performance benchmark - Add Archive/Unarchive methods to ChecklistService - Add WithRepeat method to TaskBuilder for recurring tasks - Create GoDoc examples for all major functionality
163 lines
4.2 KiB
Go
163 lines
4.2 KiB
Go
package checkvist_test
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"time"
|
|
|
|
"code.beautifulmachines.dev/jakoubek/checkvist-api"
|
|
)
|
|
|
|
// This file contains GoDoc examples that appear in the package documentation.
|
|
// All examples are runnable but require valid credentials to actually work.
|
|
|
|
func Example_basicUsage() {
|
|
// Create a new client with your credentials
|
|
client := checkvist.NewClient("user@example.com", "your-api-key")
|
|
|
|
// List all checklists
|
|
ctx := context.Background()
|
|
checklists, err := client.Checklists().List(ctx)
|
|
if err != nil {
|
|
fmt.Println("Error:", err)
|
|
return
|
|
}
|
|
|
|
for _, cl := range checklists {
|
|
fmt.Printf("Checklist: %s (%d tasks)\n", cl.Name, cl.TaskCount)
|
|
}
|
|
}
|
|
|
|
func ExampleNewClient() {
|
|
// Basic client creation
|
|
client := checkvist.NewClient("user@example.com", "your-api-key")
|
|
_ = client
|
|
|
|
// With custom options
|
|
client = checkvist.NewClient("user@example.com", "your-api-key",
|
|
checkvist.WithTimeout(60*time.Second),
|
|
checkvist.WithRetryConfig(checkvist.RetryConfig{
|
|
MaxRetries: 5,
|
|
BaseDelay: 500 * time.Millisecond,
|
|
MaxDelay: 30 * time.Second,
|
|
}),
|
|
)
|
|
_ = client
|
|
}
|
|
|
|
func ExampleClient_Authenticate() {
|
|
client := checkvist.NewClient("user@example.com", "your-api-key")
|
|
|
|
// Explicit authentication (usually not needed - auto-authenticates on first request)
|
|
ctx := context.Background()
|
|
err := client.Authenticate(ctx)
|
|
if err != nil {
|
|
fmt.Println("Authentication failed:", err)
|
|
return
|
|
}
|
|
fmt.Println("Authenticated successfully")
|
|
}
|
|
|
|
func ExampleChecklistService_List() {
|
|
client := checkvist.NewClient("user@example.com", "your-api-key")
|
|
ctx := context.Background()
|
|
|
|
// List all active checklists
|
|
checklists, err := client.Checklists().List(ctx)
|
|
if err != nil {
|
|
fmt.Println("Error:", err)
|
|
return
|
|
}
|
|
|
|
for _, cl := range checklists {
|
|
fmt.Printf("- %s (ID: %d)\n", cl.Name, cl.ID)
|
|
}
|
|
}
|
|
|
|
func ExampleTaskService_Create() {
|
|
client := checkvist.NewClient("user@example.com", "your-api-key")
|
|
ctx := context.Background()
|
|
|
|
// Create a task using the builder pattern
|
|
task, err := client.Tasks(123).Create(ctx,
|
|
checkvist.NewTask("Buy groceries").
|
|
WithTags("shopping", "urgent").
|
|
WithDueDate(checkvist.DueTomorrow).
|
|
WithPriority(1),
|
|
)
|
|
if err != nil {
|
|
fmt.Println("Error:", err)
|
|
return
|
|
}
|
|
fmt.Printf("Created task: %s (ID: %d)\n", task.Content, task.ID)
|
|
}
|
|
|
|
func ExampleNewTask() {
|
|
// Simple task
|
|
task := checkvist.NewTask("Complete project report")
|
|
|
|
// Task with all options
|
|
task = checkvist.NewTask("Review pull request").
|
|
WithTags("code-review", "urgent").
|
|
WithDueDate(checkvist.DueTomorrow).
|
|
WithPriority(1).
|
|
WithParent(456). // Makes this a subtask
|
|
WithPosition(1) // First position among siblings
|
|
|
|
_ = task
|
|
}
|
|
|
|
func ExampleNewFilter() {
|
|
// Assume we have a list of tasks from the API
|
|
tasks := []checkvist.Task{
|
|
{ID: 1, Content: "Buy groceries", TagsAsText: "shopping", Status: checkvist.StatusOpen},
|
|
{ID: 2, Content: "Call doctor", TagsAsText: "health", Status: checkvist.StatusClosed},
|
|
{ID: 3, Content: "Review PR", TagsAsText: "work, urgent", Status: checkvist.StatusOpen},
|
|
}
|
|
|
|
// Filter to open tasks with "urgent" tag
|
|
filtered := checkvist.NewFilter(tasks).
|
|
WithTag("urgent").
|
|
WithStatus(checkvist.StatusOpen).
|
|
Apply()
|
|
|
|
fmt.Printf("Found %d matching tasks\n", len(filtered))
|
|
// Output: Found 1 matching tasks
|
|
}
|
|
|
|
func ExampleFilter_Apply() {
|
|
// Create sample tasks with due dates
|
|
yesterday := time.Now().AddDate(0, 0, -1)
|
|
tomorrow := time.Now().AddDate(0, 0, 1)
|
|
|
|
tasks := []checkvist.Task{
|
|
{ID: 1, Content: "Overdue task", DueDate: &yesterday, Status: checkvist.StatusOpen},
|
|
{ID: 2, Content: "Future task", DueDate: &tomorrow, Status: checkvist.StatusOpen},
|
|
{ID: 3, Content: "Closed task", DueDate: &yesterday, Status: checkvist.StatusClosed},
|
|
}
|
|
|
|
// Find overdue open tasks
|
|
overdue := checkvist.NewFilter(tasks).
|
|
WithOverdue().
|
|
Apply()
|
|
|
|
for _, t := range overdue {
|
|
fmt.Printf("Overdue: %s\n", t.Content)
|
|
}
|
|
// Output: Overdue: Overdue task
|
|
}
|
|
|
|
func ExampleDueAt() {
|
|
// Set due date to a specific date
|
|
deadline := time.Date(2026, 3, 15, 0, 0, 0, 0, time.UTC)
|
|
task := checkvist.NewTask("Project deadline").
|
|
WithDueDate(checkvist.DueAt(deadline))
|
|
_ = task
|
|
}
|
|
|
|
func ExampleDueInDays() {
|
|
// Set due date to 7 days from now
|
|
task := checkvist.NewTask("Follow up").
|
|
WithDueDate(checkvist.DueInDays(7))
|
|
_ = task
|
|
}
|