diff --git a/models/fixtures/star.yml b/models/fixtures/star.yml
new file mode 100644
index 0000000000..860f26b8e2
--- /dev/null
+++ b/models/fixtures/star.yml
@@ -0,0 +1,9 @@
+-
+  id: 1
+  uid: 2
+  repo_id: 2
+
+-
+  id: 2
+  uid: 2
+  repo_id: 4
diff --git a/models/star_test.go b/models/star_test.go
new file mode 100644
index 0000000000..d9717d9ec9
--- /dev/null
+++ b/models/star_test.go
@@ -0,0 +1,80 @@
+// Copyright 2017 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 TestStarRepo(t *testing.T) {
+	assert.NoError(t, PrepareTestDatabase())
+	const userID = 2
+	const repoID = 1
+	AssertNotExistsBean(t, &Star{UID: userID, RepoID: repoID})
+	assert.NoError(t, StarRepo(userID, repoID, true))
+	AssertExistsAndLoadBean(t, &Star{UID: userID, RepoID: repoID})
+	assert.NoError(t, StarRepo(userID, repoID, true))
+	AssertExistsAndLoadBean(t, &Star{UID: userID, RepoID: repoID})
+	assert.NoError(t, StarRepo(userID, repoID, false))
+	AssertNotExistsBean(t, &Star{UID: userID, RepoID: repoID})
+}
+
+func TestIsStaring(t *testing.T) {
+	assert.NoError(t, PrepareTestDatabase())
+	assert.True(t, IsStaring(2, 4))
+	assert.False(t, IsStaring(3, 4))
+}
+
+func TestRepository_GetStargazers(t *testing.T) {
+	// repo with stargazers
+	assert.NoError(t, PrepareTestDatabase())
+	repo := AssertExistsAndLoadBean(t, &Repository{ID: 4}).(*Repository)
+	gazers, err := repo.GetStargazers(0)
+	assert.NoError(t, err)
+	assert.Len(t, gazers, 1)
+	assert.Equal(t, int64(2), gazers[0].ID)
+}
+
+func TestRepository_GetStargazers2(t *testing.T) {
+	// repo with stargazers
+	assert.NoError(t, PrepareTestDatabase())
+	repo := AssertExistsAndLoadBean(t, &Repository{ID: 3}).(*Repository)
+	gazers, err := repo.GetStargazers(0)
+	assert.NoError(t, err)
+	assert.Len(t, gazers, 0)
+}
+
+func TestUser_GetStarredRepos(t *testing.T) {
+	// user who has starred repos
+	assert.NoError(t, PrepareTestDatabase())
+
+	user := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
+	starred, err := user.GetStarredRepos(false)
+	assert.NoError(t, err)
+	assert.Len(t, starred, 1)
+	assert.Equal(t, int64(4), starred[0].ID)
+
+	starred, err = user.GetStarredRepos(true)
+	assert.NoError(t, err)
+	assert.Len(t, starred, 2)
+	assert.Equal(t, int64(2), starred[0].ID)
+	assert.Equal(t, int64(4), starred[1].ID)
+}
+
+func TestUser_GetStarredRepos2(t *testing.T) {
+	// user who has no starred repos
+	assert.NoError(t, PrepareTestDatabase())
+
+	user := AssertExistsAndLoadBean(t, &User{ID: 1}).(*User)
+	starred, err := user.GetStarredRepos(false)
+	assert.NoError(t, err)
+	assert.Len(t, starred, 0)
+
+	starred, err = user.GetStarredRepos(true)
+	assert.NoError(t, err)
+	assert.Len(t, starred, 0)
+}