go.charczuk.com@v0.0.0-20240327042549-bc490516bd1a/projects/blogctl/pkg/engine/engine_test.go (about) 1 /* 2 3 Copyright (c) 2023 - Present. Will Charczuk. All rights reserved. 4 Use of this source code is governed by a MIT license that can be found in the LICENSE file at the root of the repository. 5 6 */ 7 8 package engine 9 10 import ( 11 "context" 12 "encoding/json" 13 "flag" 14 "os" 15 "testing" 16 "time" 17 18 "github.com/urfave/cli/v2" 19 20 . "go.charczuk.com/sdk/assert" 21 22 "go.charczuk.com/projects/blogctl/pkg/config" 23 "go.charczuk.com/projects/blogctl/pkg/model" 24 ) 25 26 func TestEngineCreateSlugDefaults(t *testing.T) { 27 defaults := config.Config{} 28 29 e := &Engine{Config: defaults} 30 slugTemplate, err := e.ParseSlugTemplate() 31 ItsNil(t, err) 32 33 post := model.Post{ 34 Meta: model.Meta{ 35 Title: "test slug", 36 Posted: time.Date(2018, 12, 11, 10, 9, 8, 7, time.UTC), 37 }, 38 } 39 ItsEqual(t, "2018/12/11/test-slug", e.CreateSlug(slugTemplate, post)) 40 41 post = model.Post{ 42 Meta: model.Meta{ 43 Title: "Mt. Tam", 44 Posted: time.Date(2018, 12, 11, 10, 9, 8, 7, time.UTC), 45 }, 46 } 47 ItsEqual(t, "2018/12/11/mt-tam", e.CreateSlug(slugTemplate, post)) 48 } 49 50 func ref[T any](v T) *T { return &v } 51 52 func mockContext(configPath string, parallelism int) *cli.Context { 53 set := flag.NewFlagSet("test", 0 /*error handling*/) 54 set.String(config.FlagConfig, configPath, "doc") 55 set.Int(config.FlagParallelism, parallelism, "doc") 56 return cli.NewContext(nil, set, nil) 57 } 58 59 func TestEngineBuild(t *testing.T) { 60 t.Cleanup(func() { 61 _ = os.RemoveAll("thumbnails") 62 _ = os.RemoveAll("dist") 63 }) 64 ItsNil(t, os.Chdir("testdata")) 65 66 cfg, flags, paths, err := config.ReadConfig(mockContext("./config.yml", 4)) 67 ItsNil(t, err) 68 ItsEqual(t, []string{"./config.yml", "./config.yml"}, paths) 69 ItsEqual(t, "./config.yml", flags.Config) 70 ItsEqual(t, 4, flags.Parallelism) 71 72 ItsNil(t, MustNew(OptConfig(cfg)).Build(context.TODO())) 73 74 _, err = os.Stat("dist") 75 ItsNil(t, err) 76 _, err = os.Stat("dist/index.html") 77 ItsNil(t, err) 78 _, err = os.Stat("dist/data.json") 79 ItsNil(t, err) 80 _, err = os.Stat("dist/2019/02/10/text-post") 81 ItsNil(t, err) 82 _, err = os.Stat("dist/2019/02/11/image-post") 83 ItsNil(t, err) 84 _, err = os.Stat("dist/2019/02/11/image-post/original.jpg") 85 ItsNil(t, err) 86 _, err = os.Stat("dist/2019/02/11/image-post/2048.jpg") 87 ItsNil(t, err) 88 _, err = os.Stat("dist/2019/02/11/image-post/1024.jpg") 89 ItsNil(t, err) 90 _, err = os.Stat("dist/2019/02/11/image-post/512.jpg") 91 ItsNil(t, err) 92 93 f, err := os.Open("dist/data.json") 94 ItsNil(t, err) 95 defer f.Close() 96 var data model.Data 97 ItsNil(t, json.NewDecoder(f).Decode(&data)) 98 99 ItsLen(t, data.Posts, 2) 100 ItsLen(t, data.Posts[0].Image.Sizes, 4) 101 ItsEmpty(t, data.Posts[1].Image.Sizes) 102 ItsLen(t, data.Tags, 4) 103 }