62 lines
1.6 KiB
Go
62 lines
1.6 KiB
Go
// SPDX-License-Identifier: MPL-2.0
|
|
package cmssqlite_test
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"fmt"
|
|
|
|
"gamertan.com/web/cms"
|
|
"gamertan.com/web/cmssqlite"
|
|
_ "modernc.org/sqlite"
|
|
)
|
|
|
|
func Example() {
|
|
ctx := context.Background()
|
|
db, err := sql.Open("sqlite", ":memory:?_pragma=foreign_keys(1)")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer db.Close()
|
|
db.SetMaxOpenConns(1)
|
|
tx, err := db.BeginTx(ctx, nil)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer tx.Rollback()
|
|
if err = cmssqlite.CreateSchema(ctx, tx); err != nil {
|
|
panic(err)
|
|
}
|
|
const scope = "my-site"
|
|
if err = cmssqlite.PutTaxonomy(ctx, tx, scope, cms.Taxonomy{ID: "topics", Slug: "topics", Name: "Topics", Revision: 1, Active: true}, 0); err != nil {
|
|
panic(err)
|
|
}
|
|
if err = cmssqlite.PutTerm(ctx, tx, scope, cms.Term{ID: "go", TaxonomyID: "topics", Slug: "go", Name: "Go", Revision: 1, Active: true}, 0); err != nil {
|
|
panic(err)
|
|
}
|
|
ref := cms.Reference{Kind: "article", ID: "first-post"}
|
|
// The application authorizes the writer and stores its content/audit in this
|
|
// same transaction. Only publication advances the public association pointer.
|
|
if err = cmssqlite.PutRevision(ctx, tx, scope, ref, 1, cms.Associations{Terms: []string{"go"}}); err != nil {
|
|
panic(err)
|
|
}
|
|
if err = cmssqlite.SetPublished(ctx, tx, scope, ref, 1); err != nil {
|
|
panic(err)
|
|
}
|
|
if err = tx.Commit(); err != nil {
|
|
panic(err)
|
|
}
|
|
reader, err := cmssqlite.New(db, scope)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
page, err := reader.Members(ctx, "go", nil, 20)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
for _, item := range page.Items {
|
|
fmt.Println(item.Kind, item.ID, item.Revision)
|
|
}
|
|
// Output: article first-post 1
|
|
}
|