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/test"
13)
14
15//go:embed test_ressources/*
16var fakeFs embed.FS
17
18type dataTest struct {
19 conf string
20 inputFile string
21 outputFile string
22 nbModify int
23}
24
25var data = []dataTest{{
26 conf: `{"metadata": [{"name": "type", "default": "test", "mandatory": true}]}`,
27 inputFile: "test_ressources/issue.md",
28 outputFile: "test_ressources/issue_res.md",
29 nbModify: 1,
30}, {
31 conf: `{"metadata": [{"name": "type"}]}`,
32 inputFile: "test_ressources/issue.md",
33 outputFile: "test_ressources/issue_nomandatory_res.md",
34 nbModify: 1,
35}, {
36 conf: `{"metadata": [{"name": "type", "default": "autogenerated", "mandatory": true, "type": "crc16"}]}`,
37 inputFile: "test_ressources/issue.md",
38 outputFile: "test_ressources/issue_autogenerated_res.md",
39 nbModify: 1,
40}, {
41 conf: `{"metadata": [{"name": "id", "default": "autogenerated", "mandatory": true, "type": "crc16"}, {"name": "type", "default": "test", "mandatory": "true"}]}`,
42 inputFile: "test_ressources/issue.md",
43 outputFile: "test_ressources/issue_multiple_res.md",
44 nbModify: 1,
45}, {
46 conf: `{"metadata": [{"name": "type", "default": "test", "mandatory": true}]}`,
47 inputFile: "test_ressources/issue_with_break.md",
48 outputFile: "test_ressources/issue_with_break_res.md",
49 nbModify: 1,
50}, {
51 conf: `{"metadata": [{"name": "type", "default": "test", "mandatory": true}]}`,
52 inputFile: "test_ressources/issue_with_break_and_meta.md",
53 outputFile: "test_ressources/issue_with_break_and_meta_res.md",
54 nbModify: 1,
55}, {
56 conf: `{"metadata": [{"name": "fake", "default": "meta", "mandatory": true}]}`,
57 inputFile: "test_ressources/issue_with_break_and_meta_res.md",
58 outputFile: "test_ressources/issue_with_break_and_meta_res.md",
59 nbModify: 0,
60}}
61
62func TestIssue(t *testing.T) {
63 calledModifyContent := ""
64 s := test.NewFakeServer(t, test.Override{
65 Worktree: func() fs.FS {
66 return fakeFs
67 },
68 ModifyContent: func(path, content string) {
69 calledModifyContent = content
70 },
71 })
72 for i, d := range data {
73 p := Build(s)
74 p.Init("repoName", false, d.conf)
75 p.AddFile(d.inputFile)
76 res, _ := fs.ReadFile(fakeFs, d.outputFile)
77 if calledModifyContent != string(res) {
78 t.Errorf("%s (%d)= \n%s\n\nwant\n\n%s", d.outputFile, i, calledModifyContent, string(res))
79 }
80 if s.NbCall.ModifyContent != i+d.nbModify {
81 t.Errorf("ModifyContent should be called %d but was %d called", d.nbModify, s.NbCall.ModifyContent)
82 }
83 }
84}