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}