aboutsummaryrefslogtreecommitdiffstats
path: root/models
diff options
context:
space:
mode:
authorEthan Koenig <ethantkoenig@gmail.com>2016-12-28 20:03:40 -0500
committerKim "BKC" Carlbäcker <kim.carlbacker@gmail.com>2016-12-31 10:17:45 +0100
commitde8b73dd9241375d78a08bb01910d2c820b5e481 (patch)
treebfa78d8524398eee3416b1c0cb5e8aaf4bdd0daa /models
parentc0904f1942071ce870ab9d87bd6c7f49f614ee82 (diff)
downloadgitea-de8b73dd9241375d78a08bb01910d2c820b5e481.tar.gz
gitea-de8b73dd9241375d78a08bb01910d2c820b5e481.zip
Unit tests for token and update models
Diffstat (limited to 'models')
-rw-r--r--models/fixtures/access_token.yml23
-rw-r--r--models/fixtures/update_task.yml20
-rw-r--r--models/setup_for_test.go47
-rw-r--r--models/token_test.go107
-rw-r--r--models/update_test.go124
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)
+}