diff options
author | Ethan Koenig <ethantkoenig@gmail.com> | 2016-12-28 20:03:40 -0500 |
---|---|---|
committer | Kim "BKC" Carlbäcker <kim.carlbacker@gmail.com> | 2016-12-31 10:17:45 +0100 |
commit | de8b73dd9241375d78a08bb01910d2c820b5e481 (patch) | |
tree | bfa78d8524398eee3416b1c0cb5e8aaf4bdd0daa /models | |
parent | c0904f1942071ce870ab9d87bd6c7f49f614ee82 (diff) | |
download | gitea-de8b73dd9241375d78a08bb01910d2c820b5e481.tar.gz gitea-de8b73dd9241375d78a08bb01910d2c820b5e481.zip |
Unit tests for token and update models
Diffstat (limited to 'models')
-rw-r--r-- | models/fixtures/access_token.yml | 23 | ||||
-rw-r--r-- | models/fixtures/update_task.yml | 20 | ||||
-rw-r--r-- | models/setup_for_test.go | 47 | ||||
-rw-r--r-- | models/token_test.go | 107 | ||||
-rw-r--r-- | models/update_test.go | 124 |
5 files changed, 321 insertions, 0 deletions
diff --git a/models/fixtures/access_token.yml b/models/fixtures/access_token.yml new file mode 100644 index 0000000000..9572709dd9 --- /dev/null +++ b/models/fixtures/access_token.yml @@ -0,0 +1,23 @@ +- + id: 1 + uid: 1 + name: Token A + sha1: hash1 + created_unix: 946687980 + updated_unix: 946687980 + +- + id: 2 + uid: 1 + name: Token B + sha1: hash2 + created_unix: 946687980 + updated_unix: 946687980 + +- + id: 3 + uid: 2 + name: Token A + sha1: hash3 + created_unix: 946687980 + updated_unix: 946687980 diff --git a/models/fixtures/update_task.yml b/models/fixtures/update_task.yml new file mode 100644 index 0000000000..ffcd5fd6fa --- /dev/null +++ b/models/fixtures/update_task.yml @@ -0,0 +1,20 @@ +- + id: 1 + uuid: uuid1 + ref_name: refName1 + old_commit_id: oldCommitId1 + new_commit_id: newCommitId1 + +- + id: 2 + uuid: uuid2 + ref_name: refName2 + old_commit_id: oldCommitId2 + new_commit_id: newCommitId2 + +- + id: 3 + uuid: uuid3 + ref_name: refName3 + old_commit_id: oldCommitId3 + new_commit_id: newCommitId3 diff --git a/models/setup_for_test.go b/models/setup_for_test.go new file mode 100644 index 0000000000..b585a7490e --- /dev/null +++ b/models/setup_for_test.go @@ -0,0 +1,47 @@ +// Copyright 2016 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package models + +import ( + "fmt" + "os" + "testing" + + "github.com/go-xorm/core" + "github.com/go-xorm/xorm" + _ "github.com/mattn/go-sqlite3" // for the test engine + "gopkg.in/testfixtures.v2" +) + +func TestMain(m *testing.M) { + if err := CreateTestEngine(); err != nil { + fmt.Printf("Error creating test engine: %v\n", err) + os.Exit(1) + } + os.Exit(m.Run()) +} + +var fixtures *testfixtures.Context + +// CreateTestEngine create an xorm engine for testing +func CreateTestEngine() error { + testfixtures.SkipDatabaseNameCheck(true) + var err error + x, err = xorm.NewEngine("sqlite3", "file::memory:?cache=shared") + if err != nil { + return err + } + x.SetMapper(core.GonicMapper{}) + if err = x.StoreEngine("InnoDB").Sync2(tables...); err != nil { + return err + } + fixtures, err = testfixtures.NewFolder(x.DB().DB, &testfixtures.SQLite{}, "fixtures/") + return err +} + +// PrepareTestDatabase load test fixtures into test database +func PrepareTestDatabase() error { + return fixtures.Load() +} diff --git a/models/token_test.go b/models/token_test.go new file mode 100644 index 0000000000..15207ceb65 --- /dev/null +++ b/models/token_test.go @@ -0,0 +1,107 @@ +// Copyright 2016 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package models + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestNewAccessToken(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + token := &AccessToken{ + UID: 3, + Name: "Token C", + } + assert.NoError(t, NewAccessToken(token)) + sess := x.NewSession() + defer sess.Close() + has, err := sess.Get(*token) + assert.NoError(t, err) + assert.True(t, has) + assert.Equal(t, int64(3), token.UID) + assert.Equal(t, "Token C", token.Name) + + invalidToken := &AccessToken{ + ID: token.ID, // duplicate + UID: 2, + Name: "Token F", + } + assert.Error(t, NewAccessToken(invalidToken)) +} + +func TestGetAccessTokenBySHA(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + token, err := GetAccessTokenBySHA("hash1") + assert.NoError(t, err) + assert.Equal(t, int64(1), token.UID) + assert.Equal(t, "Token A", token.Name) + assert.Equal(t, "hash1", token.Sha1) + + token, err = GetAccessTokenBySHA("notahash") + assert.Error(t, err) + assert.True(t, IsErrAccessTokenNotExist(err)) + + token, err = GetAccessTokenBySHA("") + assert.Error(t, err) + assert.True(t, IsErrAccessTokenEmpty(err)) +} + +func TestListAccessTokens(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + tokens, err := ListAccessTokens(1) + assert.NoError(t, err) + assert.Len(t, tokens, 2) + assert.Equal(t, int64(1), tokens[0].UID) + assert.Equal(t, int64(1), tokens[1].UID) + assert.Contains(t, []string{tokens[0].Name, tokens[1].Name}, "Token A") + assert.Contains(t, []string{tokens[0].Name, tokens[1].Name}, "Token B") + + tokens, err = ListAccessTokens(2) + assert.NoError(t, err) + assert.Len(t, tokens, 1) + assert.Equal(t, int64(2), tokens[0].UID) + assert.Equal(t, "Token A", tokens[0].Name) + + tokens, err = ListAccessTokens(100) + assert.NoError(t, err) + assert.Empty(t, tokens) +} + +func TestUpdateAccessToken(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + token, err := GetAccessTokenBySHA("hash2") + assert.NoError(t, err) + token.Name = "Token Z" + + assert.NoError(t, UpdateAccessToken(token)) + + sess := x.NewSession() + defer sess.Close() + has, err := sess.Get(token) + assert.NoError(t, err) + assert.True(t, has) + assert.Equal(t, token.Name, "Token Z") +} + +func TestDeleteAccessTokenByID(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + + token, err := GetAccessTokenBySHA("hash2") + assert.NoError(t, err) + assert.Equal(t, int64(1), token.UID) + + assert.NoError(t, DeleteAccessTokenByID(token.ID, 1)) + sess := x.NewSession() + defer sess.Close() + has, err := sess.Get(token) + assert.NoError(t, err) + assert.False(t, has) + + err = DeleteAccessTokenByID(100, 100) + assert.Error(t, err) + assert.True(t, IsErrAccessTokenNotExist(err)) +} diff --git a/models/update_test.go b/models/update_test.go new file mode 100644 index 0000000000..141eb2fd51 --- /dev/null +++ b/models/update_test.go @@ -0,0 +1,124 @@ +// Copyright 2016 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package models + +import ( + "container/list" + "testing" + "time" + + "code.gitea.io/git" + + "github.com/stretchr/testify/assert" +) + +func TestAddUpdateTask(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + task := &UpdateTask{ + UUID: "uuid4", + RefName: "refName4", + OldCommitID: "oldCommitId4", + NewCommitID: "newCommitId4", + } + assert.NoError(t, AddUpdateTask(task)) + + sess := x.NewSession() + defer sess.Close() + has, err := sess.Get(task) + assert.NoError(t, err) + assert.True(t, has) + assert.Equal(t, "uuid4", task.UUID) +} + +func TestGetUpdateTaskByUUID(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + task, err := GetUpdateTaskByUUID("uuid1") + assert.NoError(t, err) + assert.Equal(t, "uuid1", task.UUID) + assert.Equal(t, "refName1", task.RefName) + assert.Equal(t, "oldCommitId1", task.OldCommitID) + assert.Equal(t, "newCommitId1", task.NewCommitID) +} + +func TestDeleteUpdateTaskByUUID(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + assert.NoError(t, DeleteUpdateTaskByUUID("uuid1")) + sess := x.NewSession() + defer sess.Close() + has, err := sess.Get(&UpdateTask{UUID: "uuid1"}) + assert.NoError(t, err) + assert.False(t, has) + + assert.NoError(t, DeleteUpdateTaskByUUID("invalid")) +} + +func TestCommitToPushCommit(t *testing.T) { + now := time.Now() + sig := &git.Signature{ + Email: "example@example.com", + Name: "John Doe", + When: now, + } + const hexString = "0123456789abcdef0123456789abcdef01234567" + sha1, err := git.NewIDFromString(hexString) + assert.NoError(t, err) + pushCommit := CommitToPushCommit(&git.Commit{ + ID: sha1, + Author: sig, + Committer: sig, + CommitMessage: "Commit Message", + }) + assert.Equal(t, hexString, pushCommit.Sha1) + assert.Equal(t, "Commit Message", pushCommit.Message) + assert.Equal(t, "example@example.com", pushCommit.AuthorEmail) + assert.Equal(t, "John Doe", pushCommit.AuthorName) + assert.Equal(t, "example@example.com", pushCommit.CommitterEmail) + assert.Equal(t, "John Doe", pushCommit.CommitterName) + assert.Equal(t, now, pushCommit.Timestamp) +} + +func TestListToPushCommits(t *testing.T) { + now := time.Now() + sig := &git.Signature{ + Email: "example@example.com", + Name: "John Doe", + When: now, + } + + const hexString1 = "0123456789abcdef0123456789abcdef01234567" + hash1, err := git.NewIDFromString(hexString1) + assert.NoError(t, err) + const hexString2 = "fedcba9876543210fedcba9876543210fedcba98" + hash2, err := git.NewIDFromString(hexString2) + assert.NoError(t, err) + + l := list.New() + l.PushBack(&git.Commit{ + ID: hash1, + Author: sig, + Committer: sig, + CommitMessage: "Message1", + }) + l.PushBack(&git.Commit{ + ID: hash2, + Author: sig, + Committer: sig, + CommitMessage: "Message2", + }) + + pushCommits := ListToPushCommits(l) + assert.Equal(t, 2, pushCommits.Len) + assert.Equal(t, 2, len(pushCommits.Commits)) + + assert.Equal(t, "Message1", pushCommits.Commits[0].Message) + assert.Equal(t, hexString1, pushCommits.Commits[0].Sha1) + assert.Equal(t, "example@example.com", pushCommits.Commits[0].AuthorEmail) + assert.Equal(t, now, pushCommits.Commits[0].Timestamp) + + assert.Equal(t, "Message2", pushCommits.Commits[1].Message) + assert.Equal(t, hexString2, pushCommits.Commits[1].Sha1) + assert.Equal(t, "example@example.com", pushCommits.Commits[1].AuthorEmail) + assert.Equal(t, now, pushCommits.Commits[1].Timestamp) +} |