forked from src-d/gitbase
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcommit_stats_test.go
113 lines (96 loc) · 3.08 KB
/
commit_stats_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package function
import (
"context"
"os"
"path/filepath"
"testing"
"github.com/src-d/gitbase"
"github.com/src-d/gitbase/internal/commitstats"
"github.com/src-d/go-borges/plain"
"github.com/stretchr/testify/require"
fixtures "github.com/src-d/go-git-fixtures"
"github.com/src-d/go-mysql-server/sql"
"github.com/src-d/go-mysql-server/sql/expression"
"gopkg.in/src-d/go-billy.v4/osfs"
"gopkg.in/src-d/go-git.v4/plumbing/cache"
)
func TestCommitStatsEval(t *testing.T) {
pool, cleanup := setupPool(t)
defer cleanup()
session := gitbase.NewSession(pool)
ctx := sql.NewContext(context.TODO(), sql.WithSession(session))
testCases := []struct {
name string
repo sql.Expression
from sql.Expression
to sql.Expression
row sql.Row
expected interface{}
}{
{
name: "init commit",
repo: expression.NewGetField(0, sql.Text, "repository_id", false),
from: nil,
to: expression.NewGetField(1, sql.Text, "commit_hash", false),
row: sql.NewRow("worktree", "b029517f6300c2da0f4b651b8642506cd6aaf45d"),
expected: &commitstats.CommitStats{
Files: 1,
Other: commitstats.KindStats{Additions: 22, Deletions: 0},
Total: commitstats.KindStats{Additions: 22, Deletions: 0},
},
},
{
name: "invalid repository id",
repo: expression.NewGetField(0, sql.Text, "repository_id", false),
from: nil,
to: expression.NewGetField(1, sql.Text, "commit_hash", false),
row: sql.NewRow("foobar", "b029517f6300c2da0f4b651b8642506cd6aaf45d"),
expected: nil,
},
{
name: "invalid to",
repo: expression.NewGetField(0, sql.Text, "repository_id", false),
from: nil,
to: expression.NewGetField(1, sql.Text, "commit_hash", false),
row: sql.NewRow("worktree", "foobar"),
expected: nil,
},
{
name: "invalid from",
repo: expression.NewGetField(0, sql.Text, "repository_id", false),
from: expression.NewGetField(2, sql.Text, "commit_hash", false),
to: expression.NewGetField(1, sql.Text, "commit_hash", false),
row: sql.NewRow("worktree", "b029517f6300c2da0f4b651b8642506cd6aaf45d", "foobar"),
expected: nil,
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
diff, err := NewCommitStats(tc.repo, tc.from, tc.to)
require.NoError(t, err)
result, err := diff.Eval(ctx, tc.row)
require.NoError(t, err)
require.EqualValues(t, tc.expected, result)
})
}
}
func setupPool(t *testing.T) (*gitbase.RepositoryPool, func()) {
t.Helper()
path := fixtures.ByTag("worktree").One().Worktree().Root()
pathLib := path + "-lib"
pathRepo := filepath.Join(pathLib, "worktree")
cleanup := func() {
require.NoError(t, fixtures.Clean())
require.NoError(t, os.RemoveAll(pathLib))
}
err := os.MkdirAll(pathLib, 0777)
require.NoError(t, err)
err = os.Rename(path, pathRepo)
require.NoError(t, err)
lib := plain.NewLibrary("plain")
loc, err := plain.NewLocation("location", osfs.New(pathLib), nil)
require.NoError(t, err)
lib.AddLocation(loc)
pool := gitbase.NewRepositoryPool(cache.NewObjectLRUDefault(), lib)
return pool, cleanup
}