package models_test import ( "slices" "testing" "git.golem15.com/golem15/sm-faq-plugin/models" ) // TestFaqModel pins the FAQ model contract: the PHP class string and table, // the fillable list (no id or timestamps), the required name and slug, and // the stored content read back as rows from the JSON column. func TestFaqModel(t *testing.T) { var f models.FAQ if f.TableName() != "golem15_faq_faqs" || f.MorphName() != `Golem15\FAQ\Models\FAQ` { t.Fatal("table or morph name changed") } if fill := f.Fillable(); !slices.Equal(fill, []string{"name", "slug", "locale_id", "is_active", "description", "content"}) { t.Fatalf("Fillable = %v", fill) } if rules := f.Rules(); len(rules) != 2 || rules["name"] != "required" || rules["slug"] != "required" { t.Fatalf("Rules = %v", rules) } if err := f.Content.Scan([]byte(`[{"question":"Q","answer":"
A
"},{"question":"Q2","answer":3}]`)); err != nil { t.Fatal(err) } items := f.Items() if len(items) != 2 || items[0]["question"] != "Q" || items[1]["answer"] != float64(3) { t.Fatalf("items = %v", items) } var empty models.FAQ if err := empty.Content.Scan(nil); err != nil || len(empty.Items()) != 0 { t.Fatalf("null content = %v %v", empty.Items(), err) } }