From b316b2e7406c5011c37db8f1d0b542bae46762ba Mon Sep 17 00:00:00 2001
From: Ethan Koenig <ethantkoenig@gmail.com>
Date: Mon, 9 Jan 2017 13:26:05 -0500
Subject: [PATCH] Unit tests for models/admin

---
 models/admin.go            |   2 +-
 models/admin_test.go       | 111 +++++++++++++++++++++++++++++++++++++
 models/fixtures/notice.yml |  14 +++++
 3 files changed, 126 insertions(+), 1 deletion(-)
 create mode 100644 models/admin_test.go
 create mode 100644 models/fixtures/notice.yml

diff --git a/models/admin.go b/models/admin.go
index 9447ef67ea..94dc9b7a8c 100644
--- a/models/admin.go
+++ b/models/admin.go
@@ -103,7 +103,7 @@ func CountNotices() int64 {
 	return count
 }
 
-// Notices returns number of notices in given page.
+// Notices returns notices in given page.
 func Notices(page, pageSize int) ([]*Notice, error) {
 	notices := make([]*Notice, 0, pageSize)
 	return notices, x.
diff --git a/models/admin_test.go b/models/admin_test.go
new file mode 100644
index 0000000000..7fb8f1d0a0
--- /dev/null
+++ b/models/admin_test.go
@@ -0,0 +1,111 @@
+// 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 TestNotice_TrStr(t *testing.T) {
+	notice := &Notice{
+		Type:        NoticeRepository,
+		Description: "test description",
+	}
+	assert.Equal(t, "admin.notices.type_1", notice.TrStr())
+}
+
+func TestCreateNotice(t *testing.T) {
+	assert.NoError(t, PrepareTestDatabase())
+
+	noticeBean := &Notice{
+		Type:        NoticeRepository,
+		Description: "test description",
+	}
+	AssertNotExistsBean(t, noticeBean)
+	assert.NoError(t, CreateNotice(noticeBean.Type, noticeBean.Description))
+	AssertExistsAndLoadBean(t, noticeBean)
+}
+
+func TestCreateRepositoryNotice(t *testing.T) {
+	assert.NoError(t, PrepareTestDatabase())
+
+	noticeBean := &Notice{
+		Type:        NoticeRepository,
+		Description: "test description",
+	}
+	AssertNotExistsBean(t, noticeBean)
+	assert.NoError(t, CreateRepositoryNotice(noticeBean.Description))
+	AssertExistsAndLoadBean(t, noticeBean)
+}
+
+// TODO TestRemoveAllWithNotice
+
+func TestCountNotices(t *testing.T) {
+	assert.NoError(t, PrepareTestDatabase())
+	assert.Equal(t, int64(3), CountNotices())
+}
+
+func TestNotices(t *testing.T) {
+	assert.NoError(t, PrepareTestDatabase())
+
+	notices, err := Notices(1, 2)
+	assert.NoError(t, err)
+	assert.Len(t, notices, 2)
+	assert.Equal(t, int64(3), notices[0].ID)
+	assert.Equal(t, int64(2), notices[1].ID)
+
+	notices, err = Notices(2, 2)
+	assert.NoError(t, err)
+	assert.Len(t, notices, 1)
+	assert.Equal(t, int64(1), notices[0].ID)
+}
+
+func TestDeleteNotice(t *testing.T) {
+	assert.NoError(t, PrepareTestDatabase())
+
+	AssertExistsAndLoadBean(t, &Notice{ID: 3})
+	assert.NoError(t, DeleteNotice(3))
+	AssertNotExistsBean(t, &Notice{ID: 3})
+}
+
+func TestDeleteNotices(t *testing.T) {
+	// delete a non-empty range
+	assert.NoError(t, PrepareTestDatabase())
+
+	AssertExistsAndLoadBean(t, &Notice{ID: 1})
+	AssertExistsAndLoadBean(t, &Notice{ID: 2})
+	AssertExistsAndLoadBean(t, &Notice{ID: 3})
+	assert.NoError(t, DeleteNotices(1, 2))
+	AssertNotExistsBean(t, &Notice{ID: 1})
+	AssertNotExistsBean(t, &Notice{ID: 2})
+	AssertExistsAndLoadBean(t, &Notice{ID: 3})
+}
+
+func TestDeleteNotices2(t *testing.T) {
+	// delete an empty range
+	assert.NoError(t, PrepareTestDatabase())
+
+	AssertExistsAndLoadBean(t, &Notice{ID: 1})
+	AssertExistsAndLoadBean(t, &Notice{ID: 2})
+	AssertExistsAndLoadBean(t, &Notice{ID: 3})
+	assert.NoError(t, DeleteNotices(3, 2))
+	AssertExistsAndLoadBean(t, &Notice{ID: 1})
+	AssertExistsAndLoadBean(t, &Notice{ID: 2})
+	AssertExistsAndLoadBean(t, &Notice{ID: 3})
+}
+
+func TestDeleteNoticesByIDs(t *testing.T) {
+	assert.NoError(t, PrepareTestDatabase())
+
+	AssertExistsAndLoadBean(t, &Notice{ID: 1})
+	AssertExistsAndLoadBean(t, &Notice{ID: 2})
+	AssertExistsAndLoadBean(t, &Notice{ID: 3})
+	assert.NoError(t, DeleteNoticesByIDs([]int64{1, 3}))
+	AssertNotExistsBean(t, &Notice{ID: 1})
+	AssertExistsAndLoadBean(t, &Notice{ID: 2})
+	AssertNotExistsBean(t, &Notice{ID: 3})
+}
diff --git a/models/fixtures/notice.yml b/models/fixtures/notice.yml
new file mode 100644
index 0000000000..af08f07bfa
--- /dev/null
+++ b/models/fixtures/notice.yml
@@ -0,0 +1,14 @@
+-
+  id: 1
+  type: 1 # NoticeRepository
+  description: description1
+
+-
+  id: 2
+  type: 1 # NoticeRepository
+  description: description2
+
+-
+  id: 3
+  type: 1 # NoticeRepository
+  description: description3