From e31c02d4bf055a9d2a107eb89e0d39062d70f606 Mon Sep 17 00:00:00 2001
From: Lunny Xiao <xiaolunwen@gmail.com>
Date: Sat, 29 Apr 2017 13:52:25 +0800
Subject: [PATCH] fix bug on issue view when not login (#1624)

* fix bug on issue view when not login

* hide issue watch when not login

* update the tests

* fix test on issue
---
 integrations/issue_test.go                    | 21 ++++++++++++++++
 models/fixtures/repo_unit.yml                 | 15 ++++++++++++
 routers/repo/issue.go                         | 24 +++++++++++--------
 .../repo/issue/view_content/sidebar.tmpl      |  2 ++
 4 files changed, 52 insertions(+), 10 deletions(-)
 create mode 100644 integrations/issue_test.go
 create mode 100644 models/fixtures/repo_unit.yml

diff --git a/integrations/issue_test.go b/integrations/issue_test.go
new file mode 100644
index 0000000000..61ddc12adb
--- /dev/null
+++ b/integrations/issue_test.go
@@ -0,0 +1,21 @@
+// 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 integrations
+
+import (
+	"net/http"
+	"testing"
+
+	"github.com/stretchr/testify/assert"
+)
+
+func TestNoLoginViewIssue(t *testing.T) {
+	prepareTestEnv(t)
+
+	req, err := http.NewRequest("GET", "/user2/repo1/issues/1", nil)
+	assert.NoError(t, err)
+	resp := MakeRequest(req)
+	assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
+}
diff --git a/models/fixtures/repo_unit.yml b/models/fixtures/repo_unit.yml
new file mode 100644
index 0000000000..a41784db96
--- /dev/null
+++ b/models/fixtures/repo_unit.yml
@@ -0,0 +1,15 @@
+-
+  id: 1
+  repo_id: 1
+  type: 1
+  index: 0
+  config: "{}"
+  created_unix: 946684810
+
+-
+  id: 2
+  repo_id: 1
+  type: 2
+  index: 0
+  config: "{}"
+  created_unix: 946684810
\ No newline at end of file
diff --git a/routers/repo/issue.go b/routers/repo/issue.go
index 61f79a239c..254e182bc7 100644
--- a/routers/repo/issue.go
+++ b/routers/repo/issue.go
@@ -465,16 +465,20 @@ func ViewIssue(ctx *context.Context) {
 	}
 	ctx.Data["Title"] = fmt.Sprintf("#%d - %s", issue.Index, issue.Title)
 
-	iw, exists, err := models.GetIssueWatch(ctx.User.ID, issue.ID)
-	if err != nil {
-		ctx.Handle(500, "GetIssueWatch", err)
-		return
-	}
-	if !exists {
-		iw = &models.IssueWatch{
-			UserID:     ctx.User.ID,
-			IssueID:    issue.ID,
-			IsWatching: models.IsWatching(ctx.User.ID, ctx.Repo.Repository.ID),
+	var iw *models.IssueWatch
+	var exists bool
+	if ctx.User != nil {
+		iw, exists, err = models.GetIssueWatch(ctx.User.ID, issue.ID)
+		if err != nil {
+			ctx.Handle(500, "GetIssueWatch", err)
+			return
+		}
+		if !exists {
+			iw = &models.IssueWatch{
+				UserID:     ctx.User.ID,
+				IssueID:    issue.ID,
+				IsWatching: models.IsWatching(ctx.User.ID, ctx.Repo.Repository.ID),
+			}
 		}
 	}
 	ctx.Data["IssueWatch"] = iw
diff --git a/templates/repo/issue/view_content/sidebar.tmpl b/templates/repo/issue/view_content/sidebar.tmpl
index 28bd755e41..cfb6f183b4 100644
--- a/templates/repo/issue/view_content/sidebar.tmpl
+++ b/templates/repo/issue/view_content/sidebar.tmpl
@@ -99,6 +99,7 @@
 			</div>
 		</div>
 
+		{{if $.IssueWatch}}
 		<div class="ui divider"></div>
 
 		<div class="ui watching">
@@ -119,5 +120,6 @@
 				</form>
 			</div>
 		</div>
+		{{end}}
 	</div>
 </div>