Unit tests for token and update models

This commit is contained in:
Ethan Koenig 2016-12-28 20:03:40 -05:00 committed by Kim "BKC" Carlbäcker
parent c0904f1942
commit de8b73dd92
41 changed files with 11919 additions and 0 deletions

View file

@ -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

View file

@ -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

47
models/setup_for_test.go Normal file
View file

@ -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()
}

107
models/token_test.go Normal file
View file

@ -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))
}

124
models/update_test.go Normal file
View file

@ -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)
}