Skip to content

Commit 92c1449

Browse files
smolaajnavarro
authored andcommitted
sql/git: improve tests and fixes #68. (#76)
* sql: add utility functions Schema.CheckRow, RowIterToRows, NodetoRows. * git: homogeneize git tests for different tables, check schema conformance. * git: fix tree entries table. fixes #68. * mem: simplify tests. * sql: change Timestamp type to TimestampWithTimezone. * sql: use time.Time internally for TimestampWithTimezone. * git: adapt git tables for timestamp changes.
1 parent f028104 commit 92c1449

File tree

12 files changed

+293
-161
lines changed

12 files changed

+293
-161
lines changed

git/blobs_test.go

Lines changed: 23 additions & 20 deletions
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
}

git/commits.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ func (commitsTable) Schema() sql.Schema {
2727
sql.Field{"hash", sql.String},
2828
sql.Field{"author_name", sql.String},
2929
sql.Field{"author_email", sql.String},
30-
sql.Field{"author_time", sql.Timestamp},
30+
sql.Field{"author_when", sql.TimestampWithTimezone},
3131
sql.Field{"comitter_name", sql.String},
3232
sql.Field{"comitter_email", sql.String},
33-
sql.Field{"comitter_time", sql.Timestamp},
33+
sql.Field{"comitter_when", sql.TimestampWithTimezone},
3434
sql.Field{"message", sql.String},
3535
}
3636
}
@@ -73,10 +73,10 @@ func commitToRow(c *git.Commit) sql.Row {
7373
c.Hash.String(),
7474
c.Author.Name,
7575
c.Author.Email,
76-
c.Author.When.Unix(),
76+
c.Author.When,
7777
c.Committer.Name,
7878
c.Committer.Email,
79-
c.Committer.When.Unix(),
79+
c.Committer.When,
8080
c.Message,
8181
)
8282
}

git/commits_test.go

Lines changed: 23 additions & 21 deletions
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
}

git/database_test.go

Lines changed: 49 additions & 9 deletions
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
}

git/references_test.go

Lines changed: 24 additions & 26 deletions
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
}

git/tags.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func (tagsTable) Schema() sql.Schema {
2828
sql.Field{"name", sql.String},
2929
sql.Field{"tagger_email", sql.String},
3030
sql.Field{"tagger_name", sql.String},
31-
sql.Field{"tagger_when", sql.Timestamp},
31+
sql.Field{"tagger_when", sql.TimestampWithTimezone},
3232
sql.Field{"message", sql.String},
3333
sql.Field{"target", sql.String},
3434
}

git/tags_test.go

Lines changed: 25 additions & 29 deletions
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
}

git/tree_entries.go

Lines changed: 1 addition & 0 deletions
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)