Files
summercms/docs/examples/blog/models/post_test.go
Jakub Zych 41a3190956 feat(11.1-05): add the acme.blog walkthrough plugin with its model, migration and posts route
- docs/examples/blog: scaffolder output for acme.blog (make:plugin, make:model)
  in the root module, with a Post model, a fill allow-list and NewPost, the
  create migration and GET /api/blog/posts paginated through lagoon
- short tests activate the plugin, check the route with surf, the fill
  allow-list and the migration order
- docs/setup/porting-a-plugin.md: registration, model, migrations and routes
  sections with src= copies of the plugin
- TestDocsRequiredPages requires setup/porting-a-plugin
2026-09-30 23:28:41 +02:00

45 lines
1.4 KiB
Go

package models_test
import (
"slices"
"testing"
"git.golem15.com/golem15/summercms/docs/examples/blog/models"
"git.golem15.com/golem15/summercms/modules/lagoon"
)
var _ lagoon.HasFillable = models.Post{}
func TestPostTableAndFill(t *testing.T) {
if got := (models.Post{}).TableName(); got != "acme_blog_posts" {
t.Fatalf("TableName = %q, want acme_blog_posts", got)
}
if got, want := (models.Post{}).Fillable(), []string{"title", "slug", "body"}; !slices.Equal(got, want) {
t.Fatalf("Fillable = %v, want %v", got, want)
}
input := map[string]any{"id": 99, "title": "Hello", "slug": "hello-world", "body": "First post.", "created_at": "2020-01-01"}
post, err := models.NewPost(input)
if err != nil {
t.Fatalf("NewPost: %v", err)
}
if post.ID != 0 {
t.Errorf("ID = %d, want 0: id is not fillable", post.ID)
}
if !post.CreatedAt.IsZero() {
t.Errorf("CreatedAt = %v, want zero: created_at is not fillable", post.CreatedAt)
}
if post.Title != "Hello" || post.Slug != "hello-world" || post.Body != "First post." {
t.Errorf("post = %+v, want the title, slug and body from input", post)
}
// lagoon.Fill with the same allow-list, as NewPost does, drops id too.
var direct models.Post
if err := lagoon.Fill(&direct, direct.Fillable(), map[string]any{"id": 7, "title": "Direct"}, true); err != nil {
t.Fatalf("Fill: %v", err)
}
if direct.ID != 0 || direct.Title != "Direct" {
t.Errorf("Fill result = %+v, want ID 0 and title Direct", direct)
}
}