Skip to content

Commit 0eaa46e

Browse files
committed
sql/git: improve tests and fixes src-d#68.
* sql: add utility functions Schema.CheckRow, RowIterToRows, NodetoRows. * git: homogeneize git tests for different tables, check schema conformance. * git: fix tree entries table. fixes src-d#68. * mem: simplify tests.
1 parent f028104 commit 0eaa46e

10 files changed

+234
-144
lines changed

Diff for: git/blobs_test.go

+23-20
Original file line numberDiff line numberDiff line change
@@ -3,38 +3,41 @@ package git
33
import (
44
"testing"
55

6+
"github.com/gitql/gitql/sql"
7+
68
"github.com/stretchr/testify/assert"
7-
"gopkg.in/src-d/go-git.v4"
89
"gopkg.in/src-d/go-git.v4/fixtures"
910
)
1011

11-
func TestBlobsTable(t *testing.T) {
12+
func TestBlobsTable_Name(t *testing.T) {
1213
assert := assert.New(t)
1314

1415
f := fixtures.Basic().One()
15-
r, err := git.NewFilesystemRepository(f.DotGit().Base())
16-
assert.Nil(err)
16+
table := getTable(assert, f, blobsTableName)
17+
assert.Equal(blobsTableName, table.Name())
18+
}
1719

18-
db := NewDatabase("foo", r)
19-
assert.NotNil(db)
20+
func TestBlobsTable_Children(t *testing.T) {
21+
assert := assert.New(t)
2022

21-
tables := db.Tables()
22-
table, ok := tables[blobsTableName]
23-
assert.True(ok)
24-
assert.NotNil(table)
25-
assert.Equal(blobsTableName, table.Name())
23+
f := fixtures.Basic().One()
24+
table := getTable(assert, f, blobsTableName)
2625
assert.Equal(0, len(table.Children()))
26+
}
2727

28-
iter, err := table.RowIter()
29-
assert.Nil(err)
30-
assert.NotNil(iter)
28+
func TestBlobsTable_RowIter(t *testing.T) {
29+
assert := assert.New(t)
30+
31+
f := fixtures.Basic().One()
32+
table := getTable(assert, f, blobsTableName)
3133

32-
row, err := iter.Next()
34+
rows, err := sql.NodeToRows(table)
3335
assert.Nil(err)
34-
assert.NotNil(row)
36+
assert.Len(rows, 10)
3537

36-
fields := row.Fields()
37-
assert.NotNil(fields)
38-
assert.IsType("", fields[0])
39-
assert.IsType(int64(0), fields[1])
38+
schema := table.Schema()
39+
for idx, row := range rows {
40+
err := schema.CheckRow(row)
41+
assert.Nil(err, "row %d doesn't conform to schema", idx)
42+
}
4043
}

Diff for: git/commits_test.go

+23-21
Original file line numberDiff line numberDiff line change
@@ -3,39 +3,41 @@ package git
33
import (
44
"testing"
55

6+
"github.com/gitql/gitql/sql"
7+
68
"github.com/stretchr/testify/assert"
7-
"gopkg.in/src-d/go-git.v4"
89
"gopkg.in/src-d/go-git.v4/fixtures"
910
)
1011

11-
func TestCommitsTable(t *testing.T) {
12+
func TestCommitsTable_Name(t *testing.T) {
1213
assert := assert.New(t)
1314

1415
f := fixtures.Basic().One()
15-
r, err := git.NewFilesystemRepository(f.DotGit().Base())
16-
assert.Nil(err)
16+
table := getTable(assert, f, commitsTableName)
17+
assert.Equal(commitsTableName, table.Name())
18+
}
1719

18-
db := NewDatabase("foo", r)
19-
assert.NotNil(db)
20+
func TestCommitsTable_Children(t *testing.T) {
21+
assert := assert.New(t)
2022

21-
tables := db.Tables()
22-
table, ok := tables[commitsTableName]
23-
assert.True(ok)
24-
assert.NotNil(table)
25-
assert.Equal(commitsTableName, table.Name())
23+
f := fixtures.Basic().One()
24+
table := getTable(assert, f, commitsTableName)
2625
assert.Equal(0, len(table.Children()))
26+
}
2727

28-
iter, err := table.RowIter()
29-
assert.Nil(err)
30-
assert.NotNil(iter)
28+
func TestCommitsTable_RowIter(t *testing.T) {
29+
assert := assert.New(t)
30+
31+
f := fixtures.Basic().One()
32+
table := getTable(assert, f, commitsTableName)
3133

32-
row, err := iter.Next()
34+
rows, err := sql.NodeToRows(table)
3335
assert.Nil(err)
34-
assert.NotNil(row)
36+
assert.Len(rows, 9)
3537

36-
fields := row.Fields()
37-
assert.NotNil(fields)
38-
assert.IsType("", fields[1])
39-
assert.IsType("", fields[2])
40-
assert.IsType(int64(0), fields[3])
38+
schema := table.Schema()
39+
for idx, row := range rows {
40+
err := schema.CheckRow(row)
41+
assert.Nil(err, "row %d doesn't conform to schema", idx)
42+
}
4143
}

Diff for: git/database_test.go

+49-9
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package git
22

33
import (
4+
"sort"
45
"testing"
56

7+
"github.com/gitql/gitql/sql"
8+
69
"github.com/stretchr/testify/assert"
710
"gopkg.in/src-d/go-git.v4"
811
"gopkg.in/src-d/go-git.v4/fixtures"
@@ -12,29 +15,66 @@ func init() {
1215
fixtures.RootFolder = "../../../../gopkg.in/src-d/go-git.v4/fixtures/"
1316
}
1417

18+
const (
19+
testDBName = "foo"
20+
)
21+
1522
func TestDatabase_Tables(t *testing.T) {
1623
assert := assert.New(t)
1724

1825
f := fixtures.Basic().One()
19-
r, err := git.NewFilesystemRepository(f.DotGit().Base())
20-
assert.Nil(err)
21-
22-
db := NewDatabase("foo", r)
23-
assert.NotNil(db)
26+
db := getDB(assert, f, testDBName)
2427

2528
tables := db.Tables()
26-
_, ok := tables[commitsTableName]
27-
assert.True(ok)
29+
var tableNames []string
30+
for key := range tables {
31+
tableNames = append(tableNames, key)
32+
}
33+
34+
sort.Strings(tableNames)
35+
expected := []string{
36+
commitsTableName,
37+
referencesTableName,
38+
treeEntriesTableName,
39+
tagsTableName,
40+
blobsTableName,
41+
}
42+
sort.Strings(expected)
43+
44+
assert.Equal(expected, tableNames)
2845
}
2946

3047
func TestDatabase_Name(t *testing.T) {
3148
assert := assert.New(t)
3249

3350
f := fixtures.Basic().One()
34-
r, err := git.NewFilesystemRepository(f.DotGit().Base())
51+
db := getDB(assert, f, testDBName)
52+
assert.Equal(testDBName, db.Name())
53+
}
54+
55+
func getDB(assert *assert.Assertions, fixture *fixtures.Fixture,
56+
name string) sql.Database {
57+
58+
r, err := git.NewFilesystemRepository(fixture.DotGit().Base())
3559
assert.Nil(err)
3660

37-
db := NewDatabase("foo", r)
61+
db := NewDatabase(name, r)
62+
assert.NotNil(db)
63+
64+
return db
65+
}
66+
67+
func getTable(assert *assert.Assertions, fixture *fixtures.Fixture,
68+
name string) sql.Table {
69+
70+
db := getDB(assert, fixture, "foo")
3871
assert.NotNil(db)
3972
assert.Equal(db.Name(), "foo")
73+
74+
tables := db.Tables()
75+
table, ok := tables[name]
76+
assert.True(ok, "table %s does not exist", table)
77+
assert.NotNil(table)
78+
79+
return table
4080
}

Diff for: git/references_test.go

+24-26
Original file line numberDiff line numberDiff line change
@@ -3,43 +3,41 @@ package git
33
import (
44
"testing"
55

6+
"github.com/gitql/gitql/sql"
7+
68
"github.com/stretchr/testify/assert"
7-
"gopkg.in/src-d/go-git.v4"
89
"gopkg.in/src-d/go-git.v4/fixtures"
910
)
1011

11-
func TestReferencesTable(t *testing.T) {
12+
func TestReferencesTable_Name(t *testing.T) {
1213
assert := assert.New(t)
1314

1415
f := fixtures.Basic().One()
15-
r, err := git.NewFilesystemRepository(f.DotGit().Base())
16-
assert.Nil(err)
16+
table := getTable(assert, f, referencesTableName)
17+
assert.Equal(referencesTableName, table.Name())
18+
}
1719

18-
db := NewDatabase("foo", r)
19-
assert.NotNil(db)
20+
func TestReferencesTable_Children(t *testing.T) {
21+
assert := assert.New(t)
2022

21-
tables := db.Tables()
22-
table, ok := tables[referencesTableName]
23-
assert.True(ok)
24-
assert.NotNil(table)
25-
assert.Equal(referencesTableName, table.Name())
23+
f := fixtures.Basic().One()
24+
table := getTable(assert, f, referencesTableName)
2625
assert.Equal(0, len(table.Children()))
26+
}
2727

28-
iter, err := table.RowIter()
29-
assert.Nil(err)
30-
assert.NotNil(iter)
28+
func TestReferencesTable_RowIter(t *testing.T) {
29+
assert := assert.New(t)
3130

32-
row, err := iter.Next()
31+
f := fixtures.Basic().One()
32+
table := getTable(assert, f, referencesTableName)
33+
34+
rows, err := sql.NodeToRows(table)
3335
assert.Nil(err)
34-
assert.NotNil(row)
35-
36-
fields := row.Fields()
37-
assert.NotNil(fields)
38-
assert.IsType("", fields[0])
39-
assert.IsType("", fields[1])
40-
assert.IsType(true, fields[2])
41-
assert.IsType(true, fields[3])
42-
assert.IsType(true, fields[4])
43-
assert.IsType(true, fields[5])
44-
assert.IsType("", fields[6])
36+
assert.Len(rows, 5)
37+
38+
schema := table.Schema()
39+
for idx, row := range rows {
40+
err := schema.CheckRow(row)
41+
assert.Nil(err, "row %d doesn't conform to schema", idx)
42+
}
4543
}

Diff for: git/tags_test.go

+25-29
Original file line numberDiff line numberDiff line change
@@ -2,46 +2,42 @@ package git
22

33
import (
44
"testing"
5-
"time"
5+
6+
"github.com/gitql/gitql/sql"
67

78
"github.com/stretchr/testify/assert"
8-
"gopkg.in/src-d/go-git.v4"
99
"gopkg.in/src-d/go-git.v4/fixtures"
1010
)
1111

12-
func TestTagsTable(t *testing.T) {
12+
func TestTagsTable_Name(t *testing.T) {
1313
assert := assert.New(t)
1414

15-
f := fixtures.ByTag("tags").One()
16-
r, err := git.NewFilesystemRepository(f.DotGit().Base())
17-
assert.Nil(err)
15+
f := fixtures.Basic().One()
16+
table := getTable(assert, f, tagsTableName)
17+
assert.Equal(tagsTableName, table.Name())
18+
}
1819

19-
db := NewDatabase("foo", r)
20-
assert.NotNil(db)
20+
func TestTagsTable_Children(t *testing.T) {
21+
assert := assert.New(t)
2122

22-
tables := db.Tables()
23-
table, ok := tables[tagsTableName]
24-
assert.True(ok)
25-
assert.NotNil(table)
26-
assert.Equal(tagsTableName, table.Name())
23+
f := fixtures.Basic().One()
24+
table := getTable(assert, f, tagsTableName)
2725
assert.Equal(0, len(table.Children()))
26+
}
2827

29-
iter, err := table.RowIter()
30-
assert.Nil(err)
31-
assert.NotNil(iter)
28+
func TestTagsTable_RowIter(t *testing.T) {
29+
assert := assert.New(t)
3230

33-
row, err := iter.Next()
31+
f := fixtures.ByURL("https://github.com/git-fixtures/tags.git").One()
32+
table := getTable(assert, f, tagsTableName)
33+
34+
rows, err := sql.NodeToRows(table)
3435
assert.Nil(err)
35-
assert.NotNil(row)
36-
37-
fields := row.Fields()
38-
assert.NotNil(fields)
39-
40-
assert.IsType("", fields[0])
41-
assert.IsType("", fields[1])
42-
assert.IsType("", fields[2])
43-
assert.IsType("", fields[3])
44-
assert.IsType(time.Time{}, fields[4])
45-
assert.IsType("", fields[5])
46-
assert.IsType("", fields[6])
36+
assert.Len(rows, 4)
37+
38+
schema := table.Schema()
39+
for idx, row := range rows {
40+
err := schema.CheckRow(row)
41+
assert.Nil(err, "row %d doesn't conform to schema", idx)
42+
}
4743
}

Diff for: git/tree_entries.go

+1
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ func (i *treeEntryIter) Next() (sql.Row, error) {
7474

7575
if i.ei >= len(i.t.Entries) {
7676
i.t = nil
77+
continue
7778
}
7879

7980
e := i.t.Entries[i.ei]

0 commit comments

Comments
 (0)