Tests: typed columns, null, and the load check that every render parses as its datatype

This commit is contained in:
2026-09-15 11:17:21 +02:00
parent 7e789d470f
commit 044294dd90
4 changed files with 252 additions and 14 deletions
+41
View File
@@ -1,6 +1,7 @@
package fejkdata
import (
"encoding/json"
"os"
"regexp"
"strings"
@@ -87,3 +88,43 @@ func TestReadmeSQLExampleOutput(t *testing.T) {
t.Errorf("README SQL example with seed 1 = %q, README prints %q", got, want[1])
}
}
func TestReadmeDatatypeExample(t *testing.T) {
src := readme(t)
i := strings.Index(src, "### Datatype")
if i < 0 {
t.Fatal("README lost the Datatype section")
}
block := jsonBlock.FindStringSubmatch(src[i:])
f, err := New(WithDataPath(writeData(t, map[string]string{"order": block[1]})), WithSeed(1))
if err != nil {
t.Fatal(err)
}
r, err := f.FakeRecord("order")
if err != nil {
t.Fatal(err)
}
var m map[string]any
if err := json.Unmarshal([]byte(r.JSON()), &m); err != nil {
t.Fatalf("JSON() = %s: %v", r.JSON(), err)
}
shown := map[DataType]bool{}
for _, c := range r.Columns() {
shown[c.DataType] = true
var ok bool
switch c.DataType {
case DataTypeBoolean:
_, ok = m[c.Name].(bool)
case DataTypeInteger, DataTypeNumber:
_, ok = m[c.Name].(float64)
default:
_, ok = m[c.Name].(string)
}
if !ok {
t.Errorf("column %q, datatype %s, written as %s", c.Name, c.DataType, r.JSON())
}
}
if !shown[DataTypeInteger] || !shown[DataTypeNumber] || !shown[DataTypeBoolean] {
t.Errorf("README Datatype example shows %v, want an integer, a number and a boolean column", shown)
}
}