wandb

Форк
0
/
git_test.go 
117 строк · 2.5 Кб
1
package server_test
2

3
import (
4
	"fmt"
5
	"os"
6
	"path/filepath"
7
	"testing"
8

9
	"github.com/go-git/go-git/v5"
10
	"github.com/go-git/go-git/v5/plumbing/object"
11
	"github.com/stretchr/testify/assert"
12
	"github.com/wandb/wandb/core/pkg/observability"
13
	"github.com/wandb/wandb/core/pkg/server"
14
)
15

16
func setupTestRepo() (string, func(), error) {
17
	repoPath, err := os.MkdirTemp("", "testrepo")
18
	if err != nil {
19
		return "", nil, err
20
	}
21
	repo, err := git.PlainInit(repoPath, false)
22
	if err != nil {
23
		return "", nil, err
24
	}
25

26
	worktree, err := repo.Worktree()
27
	if err != nil {
28
		return "", nil, err
29
	}
30
	tempFile := filepath.Join(repoPath, "temp.txt")
31
	err = os.WriteFile(tempFile, []byte("test content"), 0644)
32
	if err != nil {
33
		return "", nil, err
34
	}
35

36
	_, err = worktree.Add("temp.txt")
37
	if err != nil {
38
		return "", nil, err
39
	}
40

41
	commit, err := worktree.Commit("Initial commit", &git.CommitOptions{
42
		Author: &object.Signature{
43
			Name:  "Test User",
44
			Email: "test@example.com",
45
		},
46
	})
47
	if err != nil {
48
		return "", nil, err
49
	}
50
	fmt.Printf("Commit created: %s\n", commit.String())
51

52
	cleanup := func() {
53
		os.RemoveAll(repoPath)
54
	}
55
	return repoPath, cleanup, nil
56
}
57

58
func TestIsAvailable(t *testing.T) {
59
	repoPath, cleanup, err := setupTestRepo()
60
	if err != nil {
61
		t.Fatal(err)
62
	}
63
	defer cleanup()
64

65
	logger := observability.NewNoOpLogger()
66
	git := server.NewGit(repoPath, logger)
67
	available := git.IsAvailable()
68
	assert.True(t, available)
69
}
70

71
func TestLatestCommit(t *testing.T) {
72
	repoPath, cleanup, err := setupTestRepo()
73
	if err != nil {
74
		t.Fatal(err)
75
	}
76
	defer cleanup()
77

78
	logger := observability.NewNoOpLogger()
79
	git := server.NewGit(repoPath, logger)
80
	latest, err := git.LatestCommit("HEAD")
81
	assert.NoError(t, err)
82
	assert.Len(t, latest, 40)
83
}
84

85
func TestSavePatch(t *testing.T) {
86
	repoPath, cleanup, err := setupTestRepo()
87
	if err != nil {
88
		t.Fatal(err)
89
	}
90
	defer cleanup()
91

92
	// append a line to the temp.txt file
93
	tempFile := filepath.Join(repoPath, "temp.txt")
94
	err = os.WriteFile(tempFile, []byte("test content\n"), 0644)
95
	if err != nil {
96
		t.Fatal(err)
97
	}
98

99
	tempDir, err := os.MkdirTemp("", "temp_output")
100
	if err != nil {
101
		t.Fatal(err)
102
	}
103
	defer os.RemoveAll(tempDir)
104
	outputPath := filepath.Join(tempDir, "diff.patch")
105

106
	logger := observability.NewNoOpLogger()
107
	git := server.NewGit(repoPath, logger)
108
	err = git.SavePatch("HEAD", outputPath)
109
	assert.NoError(t, err)
110
	assert.FileExists(t, outputPath)
111
	// check that the patch file contains the new line
112
	patch, err := os.ReadFile(outputPath)
113
	if err != nil {
114
		t.Fatal(err)
115
	}
116
	assert.Contains(t, string(patch), "+test content")
117
}
118

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.