diamond-orm/testing.go

219 lines
5.3 KiB
Go

package orm
import (
"fmt"
"math/rand/v2"
"strings"
"time"
"github.com/go-loremipsum/loremipsum"
)
type chapter struct {
ChapterID int64 `json:"chapterID" d:"pk:t;"`
Title string `json:"chapterTitle" form:"chapterTitle"`
Index int `json:"index" form:"index"`
Words int `json:"words"`
Notes string `json:"notes" form:"notes"`
Genre []string `json:"genre" form:"genre" d:"type:text[]"`
Bands []band `json:"bands" ref:"band,bands"`
Characters []string `json:"characters" form:"characters" d:"type:text[]"`
Relationships [][]string `json:"relationships" form:"relationships" d:"type:text[][]"`
Adult bool `json:"adult" form:"adult"`
Summary string `json:"summary" form:"summary"`
Hidden bool `json:"hidden" form:"hidden"`
LoggedInOnly bool `json:"loggedInOnly" form:"loggedInOnly"`
Posted time.Time `json:"datePosted"`
FileName string `json:"fileName" d:"-"`
Text string `json:"text" d:"column:content" gridfs:"story_text,/stories/{{.ChapterID}}.txt"`
}
type band struct {
Document `json:",inline" d:"table:bands"`
ID int64 `json:"_id" d:"pk;"`
Name string `json:"name" form:"name"`
Locked bool `json:"locked" form:"locked"`
Characters []string `json:"characters" form:"characters" d:"type:text[]"`
}
type user struct {
Document `json:",inline" d:"table:users"`
ID int64 `json:"_id" d:"pk;"`
Username string `json:"username"`
Favs favs `json:"favs" ref:"user"`
Roles []role
}
type role struct {
ID int64 `d:"pk"`
Name string
Users []user
}
type favs struct {
Stories []story
Authors []user
}
type story struct {
Document `json:",inline" d:"table:stories"`
ID int64 `json:"_id" d:"pk;"`
Title string `json:"title" form:"title"`
Author user `json:"author" ref:"user"`
CoAuthor *user `json:"coAuthor" ref:"user"`
Chapters []chapter `json:"chapters"`
Recs int `json:"recs"`
Favs int `json:"favs"`
Views int `json:"views"`
Completed bool `json:"completed" form:"completed"`
Downloads int `json:"downloads"`
}
type somethingWithNestedChapters struct {
ID int64 `json:"_id"`
Document `json:",inline" coll:"nested_stuff"`
Chapters []chapter `json:"chapters"`
NestedText string `json:"text" gridfs:"nested_text,/nested/{{.ID}}.txt"`
}
var friend = user{
Username: "DarQuiel7",
ID: 83378,
}
var author = user{
Username: "tablet.exe",
ID: 85783,
}
func genChaps(single bool, aceil int) []chapter {
var ret []chapter
var ceil int
if single {
ceil = 1
} else {
ceil = aceil
}
emptyRel := make([][]string, 0)
emptyRel = append(emptyRel, make([]string, 0))
relMap := [][][]string{
{
{"Sean Harris", "Brian Tatler"},
},
{
{"Sean Harris", "Brian Tatler"},
{"Duncan Scott", "Colin Kimberley"},
},
{
{"Duncan Scott", "Colin Kimberley"},
},
emptyRel,
{
{"Sean Harris", "Colin Kimberley", "Brian Tatler"},
},
}
l := loremipsum.New()
for i := 0; i < ceil; i++ {
spf := fmt.Sprintf("%d.md", i+1)
c := chapter{
ChapterID: int64(i + 1),
Title: fmt.Sprintf("-%d-", i+1),
Index: i + 1,
Words: 50,
Notes: "notenotenote !!!",
Genre: []string{"Slash"},
Bands: []band{diamondHead},
Characters: []string{"Sean Harris", "Brian Tatler", "Duncan Scott", "Colin Kimberley"},
Relationships: relMap[i],
Adult: true,
Summary: l.Paragraph(),
Hidden: false,
LoggedInOnly: true,
FileName: spf,
Text: strings.Join(l.ParagraphList(10), "\n\n"),
Posted: time.Now().Add(time.Hour * time.Duration(int64(24*7*i))),
}
{
randMin := max(i+1, 1)
randMax := min(i+1, randMin+1)
mod1 := max(rand.IntN(randMin), 1)
mod2 := max(rand.IntN(randMax+1), 1)
if (mod1%mod2 == 0 || (mod1%mod2) == 2) && i > 0 {
c.Bands = append(c.Bands, bodom)
}
}
ret = append(ret, c)
}
return ret
}
func doSomethingWithNested() somethingWithNestedChapters {
l := loremipsum.New()
swnc := somethingWithNestedChapters{
Chapters: genChaps(false, 7),
NestedText: strings.Join(l.ParagraphList(15), "\n\n"),
}
return swnc
}
func iti_single() *story {
return &story{
Title: "title",
Completed: true,
Author: author,
Chapters: genChaps(true, 0),
}
}
func iti_multi() *story {
return &story{
Title: "Brian Tatler Fucked and Abused Sean Harris",
Completed: false,
Author: author,
Chapters: genChaps(false, 5),
}
}
func iti_blank() *story {
t := iti_single()
t.Chapters = make([]chapter, 0)
return t
}
var metallica = band{
ID: 1,
Name: "Metallica",
Characters: []string{
"James Hetfield",
"Lars Ulrich",
"Kirk Hammett",
"Cliff Burton",
},
Locked: false,
}
var diamondHead = band{
ID: 503,
Name: "Diamond Head",
Locked: false,
Characters: []string{
"Brian Tatler",
"Sean Harris",
"Duncan Scott",
"Colin Kimberley",
},
}
var bodom = band{
ID: 74,
Name: "Children of Bodom",
Locked: false,
Characters: []string{
"Janne Wirman",
"Alexi Laiho",
"Jaska Raatikainen",
"Henkka T. Blacksmith",
"Roope Latvala",
"Daniel Freyberg",
"Alexander Kuoppala",
},
}