package repositories_test import ( "testing" "github.com/stretchr/testify/assert" ent "repodiff/entities" repoSQL "repodiff/persistence/sql" "repodiff/repositories" "repodiff/utils" ) func init() { clearTableBeforeAfterTest("project_commit")() } func getCommitRowCount() int { db, _ := repoSQL.GetDBConnectionPool() var count int db.QueryRow("SELECT COUNT(*) FROM project_commit").Scan(&count) return count } func TestInsertCommitRows(t *testing.T) { defer clearTableBeforeAfterTest("project_commit")() assert.Equal(t, 0, getCommitRowCount(), "Rows should start empty") c, err := repositories.NewCommitRepository(fakeMappedTarget) assert.Equal(t, nil, err, "Error should not be nil") fixtures := fakeCommitFixtures() err = c.InsertCommitRows(fixtures) assert.Equal(t, nil, err, "Error should be nil") assert.Equal(t, len(fixtures), getCommitRowCount(), "Rows should be inserted") } func TestCommitGetMostRecentOuterKey(t *testing.T) { defer clearTableBeforeAfterTest("project_commit")() c, _ := repositories.NewCommitRepository(fakeMappedTarget) fixtures := fakeCommitFixtures() err := c.InsertCommitRows(fixtures) assert.Equal(t, nil, err, "Eroror should be nil") var oldTimestamp ent.RepoTimestamp = 1519333790 timestamp, uid, _ := c.GetMostRecentOuterKey() assert.True(t, ent.RepoTimestamp(timestamp) > oldTimestamp, "Insert timestamp should be greater than old") assert.Equal(t, 36, len(uid.String()), "Valid UUID should be generated") } func TestGetMostRecentCommits(t *testing.T) { defer clearTableBeforeAfterTest("project_commit")() c, _ := repositories.NewCommitRepository(fakeMappedTarget) dateNow := utils.TimestampToDate(utils.TimestampSeconds()) fixtures := fakeCommitFixtures() fixtures[0].Date = dateNow c.InsertCommitRows(fixtures) commitRows, err := c.GetMostRecentCommits() assert.Equal(t, nil, err, "Error should not be nil") assert.Equal(t, 1, len(commitRows), "1 result should exist") } func TestGetMostRecentCommitsEmpty(t *testing.T) { c, _ := repositories.NewCommitRepository(testDiffTarget) rows, err := c.GetMostRecentCommits() assert.Equal(t, nil, err, "Error should be nil") assert.Equal(t, 0, len(rows)) } func TestGetFirstSeenTimestamp(t *testing.T) { defer clearTableBeforeAfterTest("project_commit")() c, _ := repositories.NewCommitRepository(fakeMappedTarget) fixtures := fakeCommitFixtures() oldFakeTimestamp := ent.RepoTimestamp(1) c.WithTimestampGenerator( func() ent.RepoTimestamp { return oldFakeTimestamp }, ).InsertCommitRows(fixtures) newFakeTimestamp := ent.RepoTimestamp(2) c.WithTimestampGenerator( func() ent.RepoTimestamp { return newFakeTimestamp }, ).InsertCommitRows(fixtures) commitHashes := []string{ "61d5e61b6b6dfbf52d0d433759da964db31cc106", } nullTimestamp := ent.RepoTimestamp(0) commitToTimestamp, err := c.GetFirstSeenTimestamp(commitHashes, nullTimestamp) assert.Equal(t, nil, err, "Error should be nil") assert.Equal(t, len(commitHashes), len(commitToTimestamp), "Length of returned values") assert.Equal(t, oldFakeTimestamp, commitToTimestamp["61d5e61b6b6dfbf52d0d433759da964db31cc106"], "Expected returned timestamp") } func TestGetFirstSeenTimestampEmpty(t *testing.T) { c, _ := repositories.NewCommitRepository(fakeMappedTarget) nullTimestamp := ent.RepoTimestamp(0) commitToTimestamp, err := c.GetFirstSeenTimestamp([]string{}, nullTimestamp) assert.Equal(t, nil, err, "Error should be nil") assert.Equal(t, 0, len(commitToTimestamp), "Length of returned values") } func TestGetFirstSeenTimestampMutateReturned(t *testing.T) { c, _ := repositories.NewCommitRepository(fakeMappedTarget) nullTimestamp := ent.RepoTimestamp(0) commitToTimestamp, _ := c.GetFirstSeenTimestamp([]string{}, nullTimestamp) commitToTimestamp["some_key"] = ent.RepoTimestamp(0) } func TestGetFirstSeenTimestampNonExistent(t *testing.T) { c, _ := repositories.NewCommitRepository(fakeMappedTarget) nonExistentHash := "ae8e745ba09f61ddfa46ed6bba54c4bd07b2e93b" nullTimestamp := ent.RepoTimestamp(123) nonExistentHashes := []string{nonExistentHash} commitToTimestamp, err := c.GetFirstSeenTimestamp(nonExistentHashes, nullTimestamp) assert.Equal(t, nil, err, "Error should not be generated") assert.Equal(t, len(nonExistentHashes), len(commitToTimestamp), "Fetched results should match the length of the input") assert.Equal(t, nullTimestamp, commitToTimestamp[nonExistentHash], "Populated value should equal the input null timestamp") }