mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-11-19 00:11:16 +00:00
314 lines
6.2 KiB
Go
314 lines
6.2 KiB
Go
|
package fixtures
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"net/http"
|
||
|
|
||
|
"github.com/gin-gonic/gin"
|
||
|
)
|
||
|
|
||
|
// Handler returns an http.Handler that is capable of handing a variety of mock
|
||
|
// Coding requests and returns mock responses.
|
||
|
func Handler() http.Handler {
|
||
|
gin.SetMode(gin.TestMode)
|
||
|
|
||
|
e := gin.New()
|
||
|
e.POST("/api/oauth/access_token_v2", getToken)
|
||
|
e.GET("/api/account/current_user", getUser)
|
||
|
e.GET("/api/user/:gk/project/:prj", getProject)
|
||
|
e.GET("/api/user/:gk/project/:prj/git", getDepot)
|
||
|
e.GET("/api/user/:gk/project/:prj/git/blob/:ref/:path", getFile)
|
||
|
e.GET("/api/user/:gk/project/:prj/git/hooks", getHooks)
|
||
|
e.POST("/api/user/:gk/project/:prj/git/hook", postHook)
|
||
|
e.PUT("/api/user/:gk/project/:prj/git/hook/:id", putHook)
|
||
|
e.DELETE("/api/user/:gk/project/:prj/git/hook/:id", deleteHook)
|
||
|
|
||
|
return e
|
||
|
}
|
||
|
|
||
|
func getToken(c *gin.Context) {
|
||
|
c.Header("Content-Type", "application/json;charset=UTF-8")
|
||
|
switch c.PostForm("grant_type") {
|
||
|
case "refresh_token":
|
||
|
switch c.PostForm("refresh_token") {
|
||
|
case "i9i0HQqNR8bTY4rALYEF2itayFJNbnzC1eMFppwT":
|
||
|
c.String(200, refreshedTokenPayload)
|
||
|
default:
|
||
|
c.String(200, invalidRefreshTokenPayload)
|
||
|
}
|
||
|
case "authorization_code":
|
||
|
fallthrough
|
||
|
default:
|
||
|
switch c.PostForm("code") {
|
||
|
case "code":
|
||
|
c.String(200, tokenPayload)
|
||
|
default:
|
||
|
c.String(200, invalidCodePayload)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func getUser(c *gin.Context) {
|
||
|
c.Header("Content-Type", "application/json;charset=UTF-8")
|
||
|
switch c.Query("access_token") {
|
||
|
case "KTNF2ALdm3ofbtxLh6IbV95Ro5AKWJUP":
|
||
|
c.String(200, userPayload)
|
||
|
default:
|
||
|
c.String(200, userNotFoundPayload)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func getProject(c *gin.Context) {
|
||
|
c.Header("Content-Type", "application/json;charset=UTF-8")
|
||
|
switch fmt.Sprintf("%s/%s", c.Param("gk"), c.Param("prj")) {
|
||
|
case "demo1/test1":
|
||
|
c.String(200, fakeProjectPayload)
|
||
|
case "demo1/perm_owner":
|
||
|
c.String(200, fakePermOwnerPayload)
|
||
|
case "demo1/perm_admin":
|
||
|
c.String(200, fakePermAdminPayload)
|
||
|
case "demo1/perm_member":
|
||
|
c.String(200, fakePermMemberPayload)
|
||
|
case "demo1/perm_guest":
|
||
|
c.String(200, fakePermGuestPayload)
|
||
|
default:
|
||
|
c.String(200, projectNotFoundPayload)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func getDepot(c *gin.Context) {
|
||
|
c.Header("Content-Type", "application/json;charset=UTF-8")
|
||
|
switch fmt.Sprintf("%s/%s", c.Param("gk"), c.Param("prj")) {
|
||
|
case "demo1/test1":
|
||
|
c.String(200, fakeDepotPayload)
|
||
|
default:
|
||
|
c.String(200, projectNotFoundPayload)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func getProjects(c *gin.Context) {
|
||
|
c.Header("Content-Type", "application/json;charset=UTF-8")
|
||
|
c.String(200, fakeProjectsPayload)
|
||
|
}
|
||
|
|
||
|
func getFile(c *gin.Context) {
|
||
|
c.Header("Content-Type", "application/json;charset=UTF-8")
|
||
|
switch fmt.Sprintf("%s/%s/%s/%s", c.Param("gk"), c.Param("prj"), c.Param("ref"), c.Param("path")) {
|
||
|
case "demo1/test1/master/.drone.yml", "demo1/test1/4504a072cc/.drone.yml":
|
||
|
c.String(200, fakeFilePayload)
|
||
|
default:
|
||
|
c.String(200, fileNotFoundPayload)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func getHooks(c *gin.Context) {
|
||
|
c.Header("Content-Type", "application/json;charset=UTF-8")
|
||
|
c.String(200, fakeHooksPayload)
|
||
|
}
|
||
|
|
||
|
func postHook(c *gin.Context) {
|
||
|
c.Header("Content-Type", "application/json;charset=UTF-8")
|
||
|
switch c.PostForm("hook_url") {
|
||
|
case "http://127.0.0.1":
|
||
|
c.String(200, `{"code":0}`)
|
||
|
default:
|
||
|
c.String(200, `{"code":1}`)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func putHook(c *gin.Context) {
|
||
|
c.Header("Content-Type", "application/json;charset=UTF-8")
|
||
|
switch c.Param("id") {
|
||
|
case "2":
|
||
|
c.String(200, `{"code":0}`)
|
||
|
default:
|
||
|
c.String(200, `{"code":1}`)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func deleteHook(c *gin.Context) {
|
||
|
c.Header("Content-Type", "application/json;charset=UTF-8")
|
||
|
switch c.Param("id") {
|
||
|
case "3":
|
||
|
c.String(200, `{"code":0}`)
|
||
|
default:
|
||
|
c.String(200, `{"code":1}`)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const tokenPayload = `
|
||
|
{
|
||
|
"access_token":"KTNF2ALdm3ofbtxLh6IbV95Ro5AKWJUP",
|
||
|
"refresh_token":"zVtxJrKhNhBcNyqCz1NggNAAmehAxnRO3Z0fXmCp",
|
||
|
"expires_in":36000
|
||
|
}
|
||
|
`
|
||
|
|
||
|
const refreshedTokenPayload = `
|
||
|
{
|
||
|
"access_token":"VDZupx0usVRV4oOd1FCu4xUxgk8SY0TK",
|
||
|
"refresh_token":"BenBQq7TWZ7Cp0aUM47nQjTz2QHNmTWcPctB609n",
|
||
|
"expires_in":36000
|
||
|
}
|
||
|
`
|
||
|
|
||
|
const invalidRefreshTokenPayload = `
|
||
|
{
|
||
|
"code":3006,
|
||
|
"msg":{
|
||
|
"oauth_refresh_token_error":"Token校验失败"
|
||
|
}
|
||
|
}
|
||
|
`
|
||
|
|
||
|
const invalidCodePayload = `
|
||
|
{
|
||
|
"code":3003,
|
||
|
"msg":{
|
||
|
"oauth_validate_code_error":"code校验失败"
|
||
|
}
|
||
|
}
|
||
|
`
|
||
|
|
||
|
const userPayload = `
|
||
|
{
|
||
|
"code":0,
|
||
|
"data":{
|
||
|
"global_key":"demo1",
|
||
|
"email":"demo1@gmail.com",
|
||
|
"avatar":"/static/fruit_avatar/Fruit-20.png"
|
||
|
}
|
||
|
}
|
||
|
`
|
||
|
|
||
|
const userNotFoundPayload = `
|
||
|
{
|
||
|
"code":1,
|
||
|
"msg":{
|
||
|
"user_not_login":"用户未登录"
|
||
|
}
|
||
|
}
|
||
|
`
|
||
|
|
||
|
const fakeProjectPayload = `
|
||
|
{
|
||
|
"code":0,
|
||
|
"data":{
|
||
|
"owner_user_name":"demo1",
|
||
|
"name":"test1",
|
||
|
"depot_path":"/u/gilala/p/abp/git",
|
||
|
"https_url":"https://git.coding.net/demo1/test1.git",
|
||
|
"is_public": false,
|
||
|
"icon":"/static/project_icon/scenery-5.png",
|
||
|
"current_user_role":"owner"
|
||
|
}
|
||
|
}
|
||
|
`
|
||
|
|
||
|
const fakePermOwnerPayload = `
|
||
|
{
|
||
|
"code":0,
|
||
|
"data":{
|
||
|
"current_user_role":"owner"
|
||
|
}
|
||
|
}
|
||
|
`
|
||
|
|
||
|
const fakePermAdminPayload = `
|
||
|
{
|
||
|
"code":0,
|
||
|
"data":{
|
||
|
"current_user_role":"admin"
|
||
|
}
|
||
|
}
|
||
|
`
|
||
|
|
||
|
const fakePermMemberPayload = `
|
||
|
{
|
||
|
"code":0,
|
||
|
"data":{
|
||
|
"current_user_role":"member"
|
||
|
}
|
||
|
}
|
||
|
`
|
||
|
|
||
|
const fakePermGuestPayload = `
|
||
|
{
|
||
|
"code":0,
|
||
|
"data":{
|
||
|
"current_user_role":"guest"
|
||
|
}
|
||
|
}
|
||
|
`
|
||
|
|
||
|
const fakeDepotPayload = `
|
||
|
{
|
||
|
"code":0,
|
||
|
"data":{
|
||
|
"default_branch":"master"
|
||
|
}
|
||
|
}
|
||
|
`
|
||
|
|
||
|
const projectNotFoundPayload = `
|
||
|
{
|
||
|
"code":1100,
|
||
|
"msg":{
|
||
|
"project_not_exists":"项目不存在"
|
||
|
}
|
||
|
}
|
||
|
`
|
||
|
|
||
|
const fakeProjectsPayload = `
|
||
|
{
|
||
|
"code":0,
|
||
|
"data":{
|
||
|
"list":{
|
||
|
"owner_user_name":"demo1",
|
||
|
"name":"test1",
|
||
|
"icon":"/static/project_icon/scenery-5.png",
|
||
|
},
|
||
|
"page":1,
|
||
|
"pageSize":1,
|
||
|
"totalPage":1,
|
||
|
"totalRow":1
|
||
|
}
|
||
|
}
|
||
|
`
|
||
|
|
||
|
const fakeFilePayload = `
|
||
|
{
|
||
|
"code":0,
|
||
|
"data":{
|
||
|
"file":{
|
||
|
"data":"pipeline:\n test:\n image: golang:1.6\n commands:\n - go test\n"
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
`
|
||
|
|
||
|
const fileNotFoundPayload = `
|
||
|
{
|
||
|
"code":0,
|
||
|
"data":{
|
||
|
"ref":"master"
|
||
|
}
|
||
|
}
|
||
|
`
|
||
|
|
||
|
const fakeHooksPayload = `
|
||
|
{
|
||
|
"code":0,
|
||
|
"data":[
|
||
|
{
|
||
|
"id":2,
|
||
|
"hook_url":"http://127.0.0.2"
|
||
|
},
|
||
|
{
|
||
|
"id":3,
|
||
|
"hook_url":"http://127.0.0.3"
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
`
|