2017-08-03 08:09:16 +03:00
// 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 test
import (
"net/http"
"net/url"
"testing"
2017-12-08 08:22:02 +03:00
"code.gitea.io/git"
2017-11-30 18:52:15 +03:00
"code.gitea.io/gitea/models"
2017-08-03 08:09:16 +03:00
"code.gitea.io/gitea/modules/context"
2017-11-30 18:52:15 +03:00
"github.com/go-macaron/session"
2017-08-03 08:09:16 +03:00
"github.com/stretchr/testify/assert"
2017-11-30 18:52:15 +03:00
"gopkg.in/macaron.v1"
2017-12-16 00:11:02 +03:00
"net/http/httptest"
2017-08-03 08:09:16 +03:00
)
// MockContext mock context for unit tests
2017-11-30 18:52:15 +03:00
func MockContext ( t * testing . T , path string ) * context . Context {
var macaronContext macaron . Context
macaronContext . ReplaceAllParams ( macaron . Params { } )
2017-08-03 08:09:16 +03:00
macaronContext . Locale = & mockLocale { }
2017-11-30 18:52:15 +03:00
requestURL , err := url . Parse ( path )
assert . NoError ( t , err )
macaronContext . Req = macaron . Request { Request : & http . Request {
URL : requestURL ,
Form : url . Values { } ,
} }
2017-08-03 08:09:16 +03:00
macaronContext . Resp = & mockResponseWriter { }
macaronContext . Render = & mockRender { ResponseWriter : macaronContext . Resp }
2017-11-30 18:52:15 +03:00
macaronContext . Data = map [ string ] interface { } { }
2017-08-03 08:09:16 +03:00
return & context . Context {
2017-11-30 18:52:15 +03:00
Context : & macaronContext ,
2017-12-02 20:11:22 +03:00
Flash : & session . Flash {
Values : make ( url . Values ) ,
} ,
2017-08-03 08:09:16 +03:00
}
}
2017-11-30 18:52:15 +03:00
// LoadRepo load a repo into a test context.
func LoadRepo ( t * testing . T , ctx * context . Context , repoID int64 ) {
ctx . Repo = & context . Repository { }
ctx . Repo . Repository = models . AssertExistsAndLoadBean ( t , & models . Repository { ID : repoID } ) . ( * models . Repository )
2017-12-16 00:11:02 +03:00
ctx . Repo . RepoLink = ctx . Repo . Repository . Link ( )
2017-11-30 18:52:15 +03:00
}
// LoadUser load a user into a test context.
func LoadUser ( t * testing . T , ctx * context . Context , userID int64 ) {
ctx . User = models . AssertExistsAndLoadBean ( t , & models . User { ID : userID } ) . ( * models . User )
}
2017-12-08 08:22:02 +03:00
// LoadGitRepo load a git repo into a test context. Requires that ctx.Repo has
// already been populated.
func LoadGitRepo ( t * testing . T , ctx * context . Context ) {
assert . NoError ( t , ctx . Repo . Repository . GetOwner ( ) )
var err error
ctx . Repo . GitRepo , err = git . OpenRepository ( ctx . Repo . Repository . RepoPath ( ) )
assert . NoError ( t , err )
}
2017-08-03 08:09:16 +03:00
type mockLocale struct { }
func ( l mockLocale ) Language ( ) string {
return "en"
}
func ( l mockLocale ) Tr ( s string , _ ... interface { } ) string {
2017-11-30 18:52:15 +03:00
return s
2017-08-03 08:09:16 +03:00
}
type mockResponseWriter struct {
2017-12-16 00:11:02 +03:00
httptest . ResponseRecorder
size int
2017-08-03 08:09:16 +03:00
}
func ( rw * mockResponseWriter ) Write ( b [ ] byte ) ( int , error ) {
rw . size += len ( b )
2017-12-16 00:11:02 +03:00
return rw . ResponseRecorder . Write ( b )
2017-08-03 08:09:16 +03:00
}
func ( rw * mockResponseWriter ) Status ( ) int {
2017-12-16 00:11:02 +03:00
return rw . ResponseRecorder . Code
2017-08-03 08:09:16 +03:00
}
func ( rw * mockResponseWriter ) Written ( ) bool {
2017-12-16 00:11:02 +03:00
return rw . ResponseRecorder . Code > 0
2017-08-03 08:09:16 +03:00
}
func ( rw * mockResponseWriter ) Size ( ) int {
return rw . size
}
func ( rw * mockResponseWriter ) Before ( b macaron . BeforeFunc ) {
b ( rw )
}
type mockRender struct {
http . ResponseWriter
}
func ( tr * mockRender ) SetResponseWriter ( rw http . ResponseWriter ) {
tr . ResponseWriter = rw
}
2017-11-30 18:52:15 +03:00
func ( tr * mockRender ) JSON ( status int , _ interface { } ) {
tr . Status ( status )
2017-08-03 08:09:16 +03:00
}
func ( tr * mockRender ) JSONString ( interface { } ) ( string , error ) {
return "" , nil
}
func ( tr * mockRender ) RawData ( status int , _ [ ] byte ) {
tr . Status ( status )
}
func ( tr * mockRender ) PlainText ( status int , _ [ ] byte ) {
tr . Status ( status )
}
func ( tr * mockRender ) HTML ( status int , _ string , _ interface { } , _ ... macaron . HTMLOptions ) {
tr . Status ( status )
}
func ( tr * mockRender ) HTMLSet ( status int , _ string , _ string , _ interface { } , _ ... macaron . HTMLOptions ) {
tr . Status ( status )
}
func ( tr * mockRender ) HTMLSetString ( string , string , interface { } , ... macaron . HTMLOptions ) ( string , error ) {
return "" , nil
}
func ( tr * mockRender ) HTMLString ( string , interface { } , ... macaron . HTMLOptions ) ( string , error ) {
return "" , nil
}
func ( tr * mockRender ) HTMLSetBytes ( string , string , interface { } , ... macaron . HTMLOptions ) ( [ ] byte , error ) {
return nil , nil
}
func ( tr * mockRender ) HTMLBytes ( string , interface { } , ... macaron . HTMLOptions ) ( [ ] byte , error ) {
return nil , nil
}
func ( tr * mockRender ) XML ( status int , _ interface { } ) {
tr . Status ( status )
}
func ( tr * mockRender ) Error ( status int , _ ... string ) {
tr . Status ( status )
}
func ( tr * mockRender ) Status ( status int ) {
tr . ResponseWriter . WriteHeader ( status )
}
func ( tr * mockRender ) SetTemplatePath ( string , string ) {
}
func ( tr * mockRender ) HasTemplateSet ( string ) bool {
return true
}