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, test.Override{
66		Worktree: func() fs.FS {
67			return fakeFs
68		},
69		ModifyContent: func(path, content string) {
70			calledModifyContent = content
71		},
72	})
73	for i, d := range data {
74		p := Build(s)
75		p.Init("repoName", false, d.conf)
76		p.AddFile(model.File{Path: d.inputFile})
77		res, _ := fs.ReadFile(fakeFs, d.outputFile)
78		if calledModifyContent != string(res) {
79			t.Errorf("%s (%d)= \n%s\n\nwant\n\n%s", d.outputFile, i, calledModifyContent, string(res))
80		}
81		if s.NbCall.ModifyContent != i+d.nbModify {
82			t.Errorf("ModifyContent should be called %d but was %d called", d.nbModify, s.NbCall.ModifyContent)
83		}
84	}
85}