GitRoot
craft your forge, build your project, grow your community freely
1// SPDX-FileCopyrightText: 2025 Romain Maneschi <romain@gitroot.dev>
2//
3// SPDX-License-Identifier: EUPL-1.2
4
5package main
6
7import (
8 "embed"
9 "io/fs"
10 "testing"
11
12 "gitroot.dev/libs/golang/plugin/model"
13 "gitroot.dev/libs/golang/plugin/test"
14)
15
16//go:embed test_ressources/*
17var fakeFs embed.FS
18
19type dataTest struct {
20 conf string
21 inputFile string
22 outputFile string
23 nbModify int
24}
25
26var data = []dataTest{{
27 conf: `{"metadata": [{"name": "type", "default": "test", "mandatory": true}]}`,
28 inputFile: "test_ressources/issue.md",
29 outputFile: "test_ressources/issue_res.md",
30 nbModify: 1,
31}, {
32 conf: `{"metadata": [{"name": "type"}]}`,
33 inputFile: "test_ressources/issue.md",
34 outputFile: "test_ressources/issue_nomandatory_res.md",
35 nbModify: 1,
36}, {
37 conf: `{"metadata": [{"name": "type", "default": "autogenerated", "mandatory": true, "type": "crc16"}]}`,
38 inputFile: "test_ressources/issue.md",
39 outputFile: "test_ressources/issue_autogenerated_res.md",
40 nbModify: 1,
41}, {
42 conf: `{"metadata": [{"name": "id", "default": "autogenerated", "mandatory": true, "type": "crc16"}, {"name": "type", "default": "test", "mandatory": "true"}]}`,
43 inputFile: "test_ressources/issue.md",
44 outputFile: "test_ressources/issue_multiple_res.md",
45 nbModify: 1,
46}, {
47 conf: `{"metadata": [{"name": "type", "default": "test", "mandatory": true}]}`,
48 inputFile: "test_ressources/issue_with_break.md",
49 outputFile: "test_ressources/issue_with_break_res.md",
50 nbModify: 1,
51}, {
52 conf: `{"metadata": [{"name": "type", "default": "test", "mandatory": true}]}`,
53 inputFile: "test_ressources/issue_with_break_and_meta.md",
54 outputFile: "test_ressources/issue_with_break_and_meta_res.md",
55 nbModify: 1,
56}, {
57 conf: `{"metadata": [{"name": "fake", "default": "meta", "mandatory": true}]}`,
58 inputFile: "test_ressources/issue_with_break_and_meta_res.md",
59 outputFile: "test_ressources/issue_with_break_and_meta_res.md",
60 nbModify: 0,
61}}
62
63func TestIssue(t *testing.T) {
64 calledModifyContent := ""
65 s := test.NewFakeServer(t)
66 s.SetOverride(test.Override{
67 Worktree: func() *model.GrFs {
68 return model.NewGrFsWithFs(model.FS_BASE_WORKTREE, s, fakeFs)
69 },
70 ModifyContent: func(path, content string) {
71 calledModifyContent = content
72 },
73 })
74 for i, d := range data {
75 p := Build(s)
76 p.Init("repoName", false, d.conf)
77 p.AddFile(model.File{Path: d.inputFile})
78 res, _ := fs.ReadFile(fakeFs, d.outputFile)
79 if calledModifyContent != string(res) {
80 t.Errorf("%s (%d)= \n%s\n\nwant\n\n%s", d.outputFile, i, calledModifyContent, string(res))
81 }
82 if s.NbCall.ModifyContent != i+d.nbModify {
83 t.Errorf("ModifyContent should be called %d but was %d called", d.nbModify, s.NbCall.ModifyContent)
84 }
85 }
86}