git-module

fork of https://git.lin.moe/gogs/git-module

git clone git://git.lin.moe/fork/git-module.git

  1package git
  2
  3import (
  4	"context"
  5	"testing"
  6
  7	"github.com/stretchr/testify/assert"
  8	"github.com/stretchr/testify/require"
  9)
 10
 11func TestTreeEntry(t *testing.T) {
 12	id := MustIDFromString(testrepoMarks[12].String())
 13	e := &TreeEntry{
 14		mode: EntrySymlink,
 15		typ:  ObjectTree,
 16		id:   id,
 17		name: "go.mod",
 18	}
 19
 20	assert.False(t, e.IsTree())
 21	assert.False(t, e.IsBlob())
 22	assert.False(t, e.IsExec())
 23	assert.True(t, e.IsSymlink())
 24	assert.False(t, e.IsCommit())
 25
 26	assert.Equal(t, ObjectTree, e.Type())
 27	assert.Equal(t, e.id, e.ID())
 28	assert.Equal(t, "go.mod", e.Name())
 29}
 30
 31func TestTreeEntry_Size(t *testing.T) {
 32	ctx := context.Background()
 33	tree, err := testrepo.LsTree(ctx, testrepoMarks[30].String())
 34	require.NoError(t, err)
 35
 36	es, err := tree.Entries(ctx)
 37	require.NoError(t, err)
 38
 39	t.Run("blob", func(t *testing.T) {
 40		var entry *TreeEntry
 41		for _, e := range es {
 42			if e.Name() == "README.txt" {
 43				entry = e
 44				break
 45			}
 46		}
 47		require.NotNil(t, entry, "entry README.txt not found")
 48		assert.Equal(t, int64(795), entry.Size(ctx))
 49	})
 50
 51	t.Run("tree returns zero", func(t *testing.T) {
 52		var entry *TreeEntry
 53		for _, e := range es {
 54			if e.IsTree() {
 55				entry = e
 56				break
 57			}
 58		}
 59		require.NotNil(t, entry, "tree entry not found")
 60		assert.Equal(t, int64(0), entry.Size(ctx))
 61	})
 62}
 63
 64func TestEntries_Sort(t *testing.T) {
 65	ctx := context.Background()
 66	tree, err := testrepo.LsTree(ctx, testrepoMarks[30].String())
 67	if err != nil {
 68		t.Fatal(err)
 69	}
 70
 71	es, err := tree.Entries(ctx)
 72	if err != nil {
 73		t.Fatal(err)
 74	}
 75
 76	es.Sort()
 77
 78	expEntries := []*TreeEntry{
 79		{
 80			mode: EntryTree,
 81			typ:  ObjectTree,
 82			id:   MustIDFromString(testrepoMarks[41].String()),
 83			name: "gogs",
 84		}, {
 85			mode: EntryTree,
 86			typ:  ObjectTree,
 87			id:   MustIDFromString(testrepoMarks[42].String()),
 88			name: "img",
 89		}, {
 90			mode: EntryTree,
 91			typ:  ObjectTree,
 92			id:   MustIDFromString(testrepoMarks[44].String()),
 93			name: "resources",
 94		}, {
 95			mode: EntryTree,
 96			typ:  ObjectTree,
 97			id:   MustIDFromString(testrepoMarks[47].String()),
 98			name: "src",
 99		}, {
100			mode: EntryBlob,
101			typ:  ObjectBlob,
102			id:   MustIDFromString(testrepoMarks[34].String()),
103			name: ".DS_Store",
104		}, {
105			mode: EntryBlob,
106			typ:  ObjectBlob,
107			id:   MustIDFromString(testrepoMarks[35].String()),
108			name: ".gitattributes",
109		}, {
110			mode: EntryBlob,
111			typ:  ObjectBlob,
112			id:   MustIDFromString(testrepoMarks[36].String()),
113			name: ".gitignore",
114		}, {
115			mode: EntryBlob,
116			typ:  ObjectBlob,
117			id:   MustIDFromString(testrepoMarks[37].String()),
118			name: ".gitmodules",
119		}, {
120			mode: EntryBlob,
121			typ:  ObjectBlob,
122			id:   MustIDFromString(testrepoMarks[38].String()),
123			name: ".travis.yml",
124		}, {
125			mode: EntryBlob,
126			typ:  ObjectBlob,
127			id:   MustIDFromString(testrepoMarks[39].String()),
128			name: "README.txt",
129		}, {
130			mode: EntryBlob,
131			typ:  ObjectBlob,
132			id:   MustIDFromString(testrepoMarks[40].String()),
133			name: "build.gradle",
134		}, {
135			mode: EntryBlob,
136			typ:  ObjectBlob,
137			id:   MustIDFromString(testrepoMarks[43].String()),
138			name: "pom.xml",
139		}, {
140			mode: EntryExec,
141			typ:  ObjectBlob,
142			id:   MustIDFromString(testrepoMarks[45].String()),
143			name: "run.sh",
144		},
145	}
146	for i := range expEntries {
147		assert.Equal(t, expEntries[i].Mode(), es[i].Mode(), "idx: %d", i)
148		assert.Equal(t, expEntries[i].Type(), es[i].Type(), "idx: %d", i)
149		assert.Equal(t, expEntries[i].ID().String(), es[i].ID().String(), "idx: %d", i)
150		assert.Equal(t, expEntries[i].Name(), es[i].Name(), "idx: %d", i)
151	}
152}
153
154func TestEntries_CommitsInfo(t *testing.T) {
155	ctx := context.Background()
156	tree, err := testrepo.LsTree(ctx, testrepoMarks[32].String())
157	if err != nil {
158		t.Fatal(err)
159	}
160
161	c, err := testrepo.CatFileCommit(ctx, tree.id.String())
162	if err != nil {
163		t.Fatal(err)
164	}
165
166	t.Run("general directory", func(t *testing.T) {
167		es, err := tree.Entries(ctx)
168		if err != nil {
169			t.Fatal(err)
170		}
171
172		infos, err := es.CommitsInfo(ctx, c)
173		if err != nil {
174			t.Fatal(err)
175		}
176
177		expInfos := []*EntryCommitInfo{
178			{
179				Entry: &TreeEntry{
180					name: ".DS_Store",
181				},
182				Commit: &Commit{
183					ID: MustIDFromString(testrepoMarks[28].String()),
184				},
185			}, {
186				Entry: &TreeEntry{
187					name: ".gitattributes",
188				},
189				Commit: &Commit{
190					ID: MustIDFromString(testrepoMarks[15].String()),
191				},
192			}, {
193				Entry: &TreeEntry{
194					name: ".gitignore",
195				},
196				Commit: &Commit{
197					ID: MustIDFromString(testrepoMarks[16].String()),
198				},
199			}, {
200				Entry: &TreeEntry{
201					name: ".gitmodules",
202				},
203				Commit: &Commit{
204					ID: MustIDFromString(testrepoMarks[29].String()),
205				},
206			}, {
207				Entry: &TreeEntry{
208					name: ".travis.yml",
209				},
210				Commit: &Commit{
211					ID: MustIDFromString(testrepoMarks[23].String()),
212				},
213			}, {
214				Entry: &TreeEntry{
215					name: "README.txt",
216				},
217				Commit: &Commit{
218					ID: MustIDFromString(testrepoMarks[20].String()),
219				},
220			}, {
221				Entry: &TreeEntry{
222					name: "build.gradle",
223				},
224				Commit: &Commit{
225					ID: MustIDFromString(testrepoMarks[17].String()),
226				},
227			}, {
228				Entry: &TreeEntry{
229					name: "gogs",
230				},
231				Commit: &Commit{
232					ID: MustIDFromString(testrepoMarks[29].String()),
233				},
234			}, {
235				Entry: &TreeEntry{
236					name: "img",
237				},
238				Commit: &Commit{
239					ID: MustIDFromString(testrepoMarks[28].String()),
240				},
241			}, {
242				Entry: &TreeEntry{
243					name: "pom.xml",
244				},
245				Commit: &Commit{
246					ID: MustIDFromString(testrepoMarks[26].String()),
247				},
248			}, {
249				Entry: &TreeEntry{
250					name: "resources",
251				},
252				Commit: &Commit{
253					ID: MustIDFromString(testrepoMarks[1].String()),
254				},
255			}, {
256				Entry: &TreeEntry{
257					name: "run.sh",
258				},
259				Commit: &Commit{
260					ID: MustIDFromString(testrepoMarks[30].String()),
261				},
262			}, {
263				Entry: &TreeEntry{
264					name: "sameSHAs",
265				},
266				Commit: &Commit{
267					ID: MustIDFromString(testrepoMarks[32].String()),
268				},
269			}, {
270				Entry: &TreeEntry{
271					name: "src",
272				},
273				Commit: &Commit{
274					ID: MustIDFromString(testrepoMarks[25].String()),
275				},
276			},
277		}
278		for i := range expInfos {
279			assert.Equal(t, expInfos[i].Entry.Name(), infos[i].Entry.Name(), "idx: %d", i)
280			assert.Equal(t, expInfos[i].Commit.ID.String(), infos[i].Commit.ID.String(), "idx: %d", i)
281		}
282	})
283
284	t.Run("directory with submodule", func(t *testing.T) {
285		subtree, err := tree.Subtree(ctx, "gogs")
286		if err != nil {
287			t.Fatal(err)
288		}
289
290		es, err := subtree.Entries(ctx)
291		if err != nil {
292			t.Fatal(err)
293		}
294
295		infos, err := es.CommitsInfo(ctx, c, CommitsInfoOptions{
296			Path: "gogs",
297		})
298		if err != nil {
299			t.Fatal(err)
300		}
301
302		expInfos := []*EntryCommitInfo{
303			{
304				Entry: &TreeEntry{
305					name: "docs-api",
306				},
307				Commit: &Commit{
308					ID: MustIDFromString(testrepoMarks[29].String()),
309				},
310			},
311		}
312		for i := range expInfos {
313			assert.Equal(t, expInfos[i].Entry.Name(), infos[i].Entry.Name(), "idx: %d", i)
314			assert.Equal(t, expInfos[i].Commit.ID.String(), infos[i].Commit.ID.String(), "idx: %d", i)
315		}
316	})
317
318	t.Run("directory with files that have the same SHA", func(t *testing.T) {
319		subtree, err := tree.Subtree(ctx, "sameSHAs")
320		if err != nil {
321			t.Fatal(err)
322		}
323
324		es, err := subtree.Entries(ctx)
325		if err != nil {
326			t.Fatal(err)
327		}
328
329		infos, err := es.CommitsInfo(ctx, c, CommitsInfoOptions{
330			Path: "sameSHAs",
331		})
332		if err != nil {
333			t.Fatal(err)
334		}
335
336		expInfos := []*EntryCommitInfo{
337			{
338				Entry: &TreeEntry{
339					name: "file1.txt",
340				},
341				Commit: &Commit{
342					ID: MustIDFromString(testrepoMarks[32].String()),
343				},
344			}, {
345				Entry: &TreeEntry{
346					name: "file2.txt",
347				},
348				Commit: &Commit{
349					ID: MustIDFromString(testrepoMarks[32].String()),
350				},
351			},
352		}
353		for i := range expInfos {
354			assert.Equal(t, expInfos[i].Entry.Name(), infos[i].Entry.Name(), "idx: %d", i)
355			assert.Equal(t, expInfos[i].Commit.ID.String(), infos[i].Commit.ID.String(), "idx: %d", i)
356		}
357	})
358}