From 64b706884635bcac31710d878bbb5e1b2d96ac0c Mon Sep 17 00:00:00 2001
From: Lunny Xiao <xiaolunwen@gmail.com>
Date: Wed, 23 Aug 2017 17:53:35 +0800
Subject: [PATCH] Add more test for login links and fix a bug on action
 retrieve (#2361)

* add more test for login links and fix a bug on action retrieve
---
 integrations/links_test.go | 97 ++++++++++++++++++++++++++++++++++++++
 models/action.go           |  2 +-
 2 files changed, 98 insertions(+), 1 deletion(-)

diff --git a/integrations/links_test.go b/integrations/links_test.go
index d40c9c24cf..d1f99ca020 100644
--- a/integrations/links_test.go
+++ b/integrations/links_test.go
@@ -5,8 +5,11 @@
 package integrations
 
 import (
+	"fmt"
 	"net/http"
 	"testing"
+
+	api "code.gitea.io/sdk/gitea"
 )
 
 func TestLinksNoLogin(t *testing.T) {
@@ -24,6 +27,8 @@ func TestLinksNoLogin(t *testing.T) {
 		"/user/login",
 		"/user/forgot_password",
 		"/swagger",
+		// TODO: follow this page and test every link
+		"/assets/librejs/librejs.html",
 	}
 
 	for _, link := range links {
@@ -31,3 +36,95 @@ func TestLinksNoLogin(t *testing.T) {
 		MakeRequest(t, req, http.StatusOK)
 	}
 }
+
+func testLinksAsUser(userName string, t *testing.T) {
+	var links = []string{
+		"/explore/repos",
+		"/explore/repos?q=test&tab=",
+		"/explore/users",
+		"/explore/users?q=test&tab=",
+		"/explore/organizations",
+		"/explore/organizations?q=test&tab=",
+		"/",
+		"/user/forgot_password",
+		"/swagger",
+		"/issues",
+		"/issues?type=your_repositories&repo=0&sort=&state=open",
+		"/issues?type=assigned&repo=0&sort=&state=open",
+		"/issues?type=created_by&repo=0&sort=&state=open",
+		"/issues?type=your_repositories&repo=0&sort=&state=closed",
+		"/issues?type=assigned&repo=0&sort=&state=closed",
+		"/issues?type=created_by&repo=0&sort=&state=closed",
+		"/pulls",
+		"/pulls?type=your_repositories&repo=0&sort=&state=open",
+		"/pulls?type=assigned&repo=0&sort=&state=open",
+		"/pulls?type=created_by&repo=0&sort=&state=open",
+		"/pulls?type=your_repositories&repo=0&sort=&state=closed",
+		"/pulls?type=assigned&repo=0&sort=&state=closed",
+		"/pulls?type=created_by&repo=0&sort=&state=closed",
+		"/notifications",
+		"/repo/create",
+		"/repo/migrate",
+		"/org/create",
+		"/user2",
+		"/user2?tab=stars",
+		"/user2?tab=activity",
+		"/user/settings",
+		"/user/settings/avatar",
+		"/user/settings/password",
+		"/user/settings/email",
+		"/user/settings/keys",
+		"/user/settings/applications",
+		"/user/settings/two_factor",
+		"/user/settings/account_link",
+		"/user/settings/organization",
+		"/user/settings/delete",
+	}
+
+	session := loginUser(t, userName)
+	for _, link := range links {
+		req := NewRequest(t, "GET", link)
+		session.MakeRequest(t, req, http.StatusOK)
+	}
+
+	reqAPI := NewRequestf(t, "GET", "/api/v1/users/%s/repos", userName)
+	respAPI := MakeRequest(t, reqAPI, http.StatusOK)
+
+	var apiRepos []api.Repository
+	DecodeJSON(t, respAPI, &apiRepos)
+
+	var repoLinks = []string{
+		"",
+		"/issues",
+		"/pulls",
+		"/commits/master",
+		"/graph",
+		"/settings",
+		"/settings/collaboration",
+		"/settings/branches",
+		"/settings/hooks",
+		// FIXME: below links should return 200 but 404 ??
+		//"/settings/hooks/git",
+		//"/settings/hooks/git/pre-receive",
+		//"/settings/hooks/git/update",
+		//"/settings/hooks/git/post-receive",
+		"/settings/keys",
+		"/releases",
+		"/releases/new",
+		//"/wiki/_pages",
+		"/wiki/_new",
+	}
+
+	for _, repo := range apiRepos {
+		for _, link := range repoLinks {
+			req := NewRequest(t, "GET", fmt.Sprintf("/%s/%s%s", userName, repo.Name, link))
+			session.MakeRequest(t, req, http.StatusOK)
+		}
+	}
+}
+
+func TestLinksLogin(t *testing.T) {
+	prepareTestEnv(t)
+
+	testLinksAsUser("user2", t)
+}
diff --git a/models/action.go b/models/action.go
index 43ed9cc1da..591b992add 100644
--- a/models/action.go
+++ b/models/action.go
@@ -736,7 +736,7 @@ func GetFeeds(opts GetFeedsOptions) ([]*Action, error) {
 	var userIDCond builder.Cond = builder.Eq{"user_id": opts.RequestedUser.ID}
 	if opts.Collaborate {
 		userIDCond = userIDCond.Or(builder.Expr(
-			`repo_id IN (SELECT repo_id FROM "access" WHERE access.user_id = ?)`,
+			"repo_id IN (SELECT repo_id FROM `access` WHERE access.user_id = ?)",
 			opts.RequestedUser.ID))
 	}
 	cond = cond.And(userIDCond)