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}