woodpecker/remote/coding/fixtures/handler.go
2018-03-21 14:02:17 +01:00

327 lines
6.8 KiB
Go

// Copyright 2018 Drone.IO Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
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"
}
]
}
`