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: MIT
  4
  5package test
  6
  7import (
  8	"io/fs"
  9	"os"
 10	"path/filepath"
 11	"testing"
 12)
 13
 14type fakeServer struct {
 15	t        *testing.T
 16	dirGit   string
 17	dirWeb   string
 18	dirCache string
 19	override Override
 20	NbCall   nbCall
 21}
 22
 23type Override struct {
 24	Worktree           func() fs.FS
 25	Webcontent         func() fs.FS
 26	Cache              func() fs.FS
 27	ModifyContent      func(path string, content string)
 28	ModifyWebContent   func(filepath, content string)
 29	ModifyCacheContent func(filepath, content string)
 30	CommitAllIfNeeded  func(message string)
 31	DiffWithParent     func(file string, hash string) (string, error)
 32	Merge              func(from string, to string)
 33}
 34
 35type nbCall struct {
 36	Worktree           int
 37	Webcontent         int
 38	Cache              int
 39	ModifyContent      int
 40	ModifyWebContent   int
 41	ModifyCacheContent int
 42	CommitAllIfNeeded  int
 43	DiffWithParent     int
 44	Log                int
 45	LogError           int
 46	Merge              int
 47}
 48
 49func NewFakeServer(t *testing.T, o Override) *fakeServer {
 50	dirGit, _ := os.MkdirTemp("", "gitrootPluginTestGit*")
 51	dirWeb, _ := os.MkdirTemp("", "gitrootPluginTestWeb*")
 52	dirCache, _ := os.MkdirTemp("", "gitrootPluginTestCache*")
 53	return &fakeServer{
 54		t:        t,
 55		dirGit:   dirGit,
 56		dirWeb:   dirWeb,
 57		dirCache: dirCache,
 58		override: o,
 59		NbCall:   nbCall{},
 60	}
 61}
 62
 63func (s *fakeServer) Worktree() fs.FS {
 64	s.NbCall.Worktree++
 65	if s.override.Worktree != nil {
 66		return s.override.Worktree()
 67	}
 68	return os.DirFS(s.dirGit)
 69}
 70
 71func (s *fakeServer) Webcontent() fs.FS {
 72	s.NbCall.Webcontent++
 73	if s.override.Webcontent != nil {
 74		return s.override.Webcontent()
 75	}
 76	return os.DirFS(s.dirWeb)
 77}
 78
 79func (s *fakeServer) Cache() fs.FS {
 80	s.NbCall.Cache++
 81	if s.override.Cache != nil {
 82		return s.override.Cache()
 83	}
 84	return os.DirFS(s.dirCache)
 85}
 86
 87func (s *fakeServer) ModifyContent(path, content string) {
 88	s.NbCall.ModifyContent++
 89	if s.override.ModifyContent != nil {
 90		s.override.ModifyContent(path, content)
 91	} else {
 92		os.MkdirAll(s.dirGit+"/"+filepath.Dir(path), fs.ModePerm)
 93		if err := os.WriteFile(s.dirGit+"/"+path, []byte(content), fs.ModePerm); err != nil {
 94			s.t.Fatal(err)
 95		}
 96	}
 97}
 98
 99func (s *fakeServer) ModifyWebContent(path, content string) {
100	s.NbCall.ModifyWebContent++
101	if s.override.ModifyWebContent != nil {
102		s.override.ModifyWebContent(path, content)
103	} else {
104		os.MkdirAll(s.dirWeb+"/"+filepath.Dir(path), fs.ModePerm)
105		if err := os.WriteFile(s.dirWeb+"/"+path, []byte(content), fs.ModePerm); err != nil {
106			s.t.Fatal(err)
107		}
108	}
109}
110
111func (s *fakeServer) ModifyCacheContent(path, content string) {
112	s.NbCall.ModifyCacheContent++
113	if s.override.ModifyCacheContent != nil {
114		s.override.ModifyCacheContent(path, content)
115	} else {
116		os.MkdirAll(s.dirCache+"/"+filepath.Dir(path), fs.ModePerm)
117		if err := os.WriteFile(s.dirCache+"/"+path, []byte(content), fs.ModePerm); err != nil {
118			s.t.Fatal(err)
119		}
120	}
121}
122
123func (s *fakeServer) CommitAllIfNeeded(message string) {
124	s.NbCall.CommitAllIfNeeded++
125	if s.override.CommitAllIfNeeded != nil {
126		s.override.CommitAllIfNeeded(message)
127	}
128}
129
130func (s *fakeServer) DiffWithParent(file string, hash string) (string, error) {
131	s.NbCall.DiffWithParent++
132	if s.override.DiffWithParent != nil {
133		return s.override.DiffWithParent(file, hash)
134	}
135	return "", nil
136}
137
138func (s *fakeServer) Log(message string) {
139	s.NbCall.Log++
140}
141
142func (s *fakeServer) LogError(message string, err error) {
143	s.NbCall.LogError++
144}
145
146func (s *fakeServer) Merge(from string, to string) {
147	s.NbCall.Merge++
148	if s.override.Merge != nil {
149		s.override.Merge(from, to)
150	}
151}