Skip to content

Commit de8b73d

Browse files
ethantkoenigbkcsoft
authored andcommitted
Unit tests for token and update models
1 parent c0904f1 commit de8b73d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+11919
-0
lines changed

models/fixtures/access_token.yml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
-
2+
id: 1
3+
uid: 1
4+
name: Token A
5+
sha1: hash1
6+
created_unix: 946687980
7+
updated_unix: 946687980
8+
9+
-
10+
id: 2
11+
uid: 1
12+
name: Token B
13+
sha1: hash2
14+
created_unix: 946687980
15+
updated_unix: 946687980
16+
17+
-
18+
id: 3
19+
uid: 2
20+
name: Token A
21+
sha1: hash3
22+
created_unix: 946687980
23+
updated_unix: 946687980

models/fixtures/update_task.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
-
2+
id: 1
3+
uuid: uuid1
4+
ref_name: refName1
5+
old_commit_id: oldCommitId1
6+
new_commit_id: newCommitId1
7+
8+
-
9+
id: 2
10+
uuid: uuid2
11+
ref_name: refName2
12+
old_commit_id: oldCommitId2
13+
new_commit_id: newCommitId2
14+
15+
-
16+
id: 3
17+
uuid: uuid3
18+
ref_name: refName3
19+
old_commit_id: oldCommitId3
20+
new_commit_id: newCommitId3

models/setup_for_test.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// Copyright 2016 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package models
6+
7+
import (
8+
"fmt"
9+
"os"
10+
"testing"
11+
12+
"github.com/go-xorm/core"
13+
"github.com/go-xorm/xorm"
14+
_ "github.com/mattn/go-sqlite3" // for the test engine
15+
"gopkg.in/testfixtures.v2"
16+
)
17+
18+
func TestMain(m *testing.M) {
19+
if err := CreateTestEngine(); err != nil {
20+
fmt.Printf("Error creating test engine: %v\n", err)
21+
os.Exit(1)
22+
}
23+
os.Exit(m.Run())
24+
}
25+
26+
var fixtures *testfixtures.Context
27+
28+
// CreateTestEngine create an xorm engine for testing
29+
func CreateTestEngine() error {
30+
testfixtures.SkipDatabaseNameCheck(true)
31+
var err error
32+
x, err = xorm.NewEngine("sqlite3", "file::memory:?cache=shared")
33+
if err != nil {
34+
return err
35+
}
36+
x.SetMapper(core.GonicMapper{})
37+
if err = x.StoreEngine("InnoDB").Sync2(tables...); err != nil {
38+
return err
39+
}
40+
fixtures, err = testfixtures.NewFolder(x.DB().DB, &testfixtures.SQLite{}, "fixtures/")
41+
return err
42+
}
43+
44+
// PrepareTestDatabase load test fixtures into test database
45+
func PrepareTestDatabase() error {
46+
return fixtures.Load()
47+
}

models/token_test.go

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
// Copyright 2016 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package models
6+
7+
import (
8+
"testing"
9+
10+
"github.com/stretchr/testify/assert"
11+
)
12+
13+
func TestNewAccessToken(t *testing.T) {
14+
assert.NoError(t, PrepareTestDatabase())
15+
token := &AccessToken{
16+
UID: 3,
17+
Name: "Token C",
18+
}
19+
assert.NoError(t, NewAccessToken(token))
20+
sess := x.NewSession()
21+
defer sess.Close()
22+
has, err := sess.Get(*token)
23+
assert.NoError(t, err)
24+
assert.True(t, has)
25+
assert.Equal(t, int64(3), token.UID)
26+
assert.Equal(t, "Token C", token.Name)
27+
28+
invalidToken := &AccessToken{
29+
ID: token.ID, // duplicate
30+
UID: 2,
31+
Name: "Token F",
32+
}
33+
assert.Error(t, NewAccessToken(invalidToken))
34+
}
35+
36+
func TestGetAccessTokenBySHA(t *testing.T) {
37+
assert.NoError(t, PrepareTestDatabase())
38+
token, err := GetAccessTokenBySHA("hash1")
39+
assert.NoError(t, err)
40+
assert.Equal(t, int64(1), token.UID)
41+
assert.Equal(t, "Token A", token.Name)
42+
assert.Equal(t, "hash1", token.Sha1)
43+
44+
token, err = GetAccessTokenBySHA("notahash")
45+
assert.Error(t, err)
46+
assert.True(t, IsErrAccessTokenNotExist(err))
47+
48+
token, err = GetAccessTokenBySHA("")
49+
assert.Error(t, err)
50+
assert.True(t, IsErrAccessTokenEmpty(err))
51+
}
52+
53+
func TestListAccessTokens(t *testing.T) {
54+
assert.NoError(t, PrepareTestDatabase())
55+
tokens, err := ListAccessTokens(1)
56+
assert.NoError(t, err)
57+
assert.Len(t, tokens, 2)
58+
assert.Equal(t, int64(1), tokens[0].UID)
59+
assert.Equal(t, int64(1), tokens[1].UID)
60+
assert.Contains(t, []string{tokens[0].Name, tokens[1].Name}, "Token A")
61+
assert.Contains(t, []string{tokens[0].Name, tokens[1].Name}, "Token B")
62+
63+
tokens, err = ListAccessTokens(2)
64+
assert.NoError(t, err)
65+
assert.Len(t, tokens, 1)
66+
assert.Equal(t, int64(2), tokens[0].UID)
67+
assert.Equal(t, "Token A", tokens[0].Name)
68+
69+
tokens, err = ListAccessTokens(100)
70+
assert.NoError(t, err)
71+
assert.Empty(t, tokens)
72+
}
73+
74+
func TestUpdateAccessToken(t *testing.T) {
75+
assert.NoError(t, PrepareTestDatabase())
76+
token, err := GetAccessTokenBySHA("hash2")
77+
assert.NoError(t, err)
78+
token.Name = "Token Z"
79+
80+
assert.NoError(t, UpdateAccessToken(token))
81+
82+
sess := x.NewSession()
83+
defer sess.Close()
84+
has, err := sess.Get(token)
85+
assert.NoError(t, err)
86+
assert.True(t, has)
87+
assert.Equal(t, token.Name, "Token Z")
88+
}
89+
90+
func TestDeleteAccessTokenByID(t *testing.T) {
91+
assert.NoError(t, PrepareTestDatabase())
92+
93+
token, err := GetAccessTokenBySHA("hash2")
94+
assert.NoError(t, err)
95+
assert.Equal(t, int64(1), token.UID)
96+
97+
assert.NoError(t, DeleteAccessTokenByID(token.ID, 1))
98+
sess := x.NewSession()
99+
defer sess.Close()
100+
has, err := sess.Get(token)
101+
assert.NoError(t, err)
102+
assert.False(t, has)
103+
104+
err = DeleteAccessTokenByID(100, 100)
105+
assert.Error(t, err)
106+
assert.True(t, IsErrAccessTokenNotExist(err))
107+
}

models/update_test.go

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
// Copyright 2016 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package models
6+
7+
import (
8+
"container/list"
9+
"testing"
10+
"time"
11+
12+
"code.gitea.io/git"
13+
14+
"github.com/stretchr/testify/assert"
15+
)
16+
17+
func TestAddUpdateTask(t *testing.T) {
18+
assert.NoError(t, PrepareTestDatabase())
19+
task := &UpdateTask{
20+
UUID: "uuid4",
21+
RefName: "refName4",
22+
OldCommitID: "oldCommitId4",
23+
NewCommitID: "newCommitId4",
24+
}
25+
assert.NoError(t, AddUpdateTask(task))
26+
27+
sess := x.NewSession()
28+
defer sess.Close()
29+
has, err := sess.Get(task)
30+
assert.NoError(t, err)
31+
assert.True(t, has)
32+
assert.Equal(t, "uuid4", task.UUID)
33+
}
34+
35+
func TestGetUpdateTaskByUUID(t *testing.T) {
36+
assert.NoError(t, PrepareTestDatabase())
37+
task, err := GetUpdateTaskByUUID("uuid1")
38+
assert.NoError(t, err)
39+
assert.Equal(t, "uuid1", task.UUID)
40+
assert.Equal(t, "refName1", task.RefName)
41+
assert.Equal(t, "oldCommitId1", task.OldCommitID)
42+
assert.Equal(t, "newCommitId1", task.NewCommitID)
43+
}
44+
45+
func TestDeleteUpdateTaskByUUID(t *testing.T) {
46+
assert.NoError(t, PrepareTestDatabase())
47+
assert.NoError(t, DeleteUpdateTaskByUUID("uuid1"))
48+
sess := x.NewSession()
49+
defer sess.Close()
50+
has, err := sess.Get(&UpdateTask{UUID: "uuid1"})
51+
assert.NoError(t, err)
52+
assert.False(t, has)
53+
54+
assert.NoError(t, DeleteUpdateTaskByUUID("invalid"))
55+
}
56+
57+
func TestCommitToPushCommit(t *testing.T) {
58+
now := time.Now()
59+
sig := &git.Signature{
60+
61+
Name: "John Doe",
62+
When: now,
63+
}
64+
const hexString = "0123456789abcdef0123456789abcdef01234567"
65+
sha1, err := git.NewIDFromString(hexString)
66+
assert.NoError(t, err)
67+
pushCommit := CommitToPushCommit(&git.Commit{
68+
ID: sha1,
69+
Author: sig,
70+
Committer: sig,
71+
CommitMessage: "Commit Message",
72+
})
73+
assert.Equal(t, hexString, pushCommit.Sha1)
74+
assert.Equal(t, "Commit Message", pushCommit.Message)
75+
assert.Equal(t, "[email protected]", pushCommit.AuthorEmail)
76+
assert.Equal(t, "John Doe", pushCommit.AuthorName)
77+
assert.Equal(t, "[email protected]", pushCommit.CommitterEmail)
78+
assert.Equal(t, "John Doe", pushCommit.CommitterName)
79+
assert.Equal(t, now, pushCommit.Timestamp)
80+
}
81+
82+
func TestListToPushCommits(t *testing.T) {
83+
now := time.Now()
84+
sig := &git.Signature{
85+
86+
Name: "John Doe",
87+
When: now,
88+
}
89+
90+
const hexString1 = "0123456789abcdef0123456789abcdef01234567"
91+
hash1, err := git.NewIDFromString(hexString1)
92+
assert.NoError(t, err)
93+
const hexString2 = "fedcba9876543210fedcba9876543210fedcba98"
94+
hash2, err := git.NewIDFromString(hexString2)
95+
assert.NoError(t, err)
96+
97+
l := list.New()
98+
l.PushBack(&git.Commit{
99+
ID: hash1,
100+
Author: sig,
101+
Committer: sig,
102+
CommitMessage: "Message1",
103+
})
104+
l.PushBack(&git.Commit{
105+
ID: hash2,
106+
Author: sig,
107+
Committer: sig,
108+
CommitMessage: "Message2",
109+
})
110+
111+
pushCommits := ListToPushCommits(l)
112+
assert.Equal(t, 2, pushCommits.Len)
113+
assert.Equal(t, 2, len(pushCommits.Commits))
114+
115+
assert.Equal(t, "Message1", pushCommits.Commits[0].Message)
116+
assert.Equal(t, hexString1, pushCommits.Commits[0].Sha1)
117+
assert.Equal(t, "[email protected]", pushCommits.Commits[0].AuthorEmail)
118+
assert.Equal(t, now, pushCommits.Commits[0].Timestamp)
119+
120+
assert.Equal(t, "Message2", pushCommits.Commits[1].Message)
121+
assert.Equal(t, hexString2, pushCommits.Commits[1].Sha1)
122+
assert.Equal(t, "[email protected]", pushCommits.Commits[1].AuthorEmail)
123+
assert.Equal(t, now, pushCommits.Commits[1].Timestamp)
124+
}

vendor/github.com/stretchr/testify/require/doc.go

Lines changed: 28 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/stretchr/testify/require/forward_requirements.go

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)