110 lines
2.3 KiB
Go
110 lines
2.3 KiB
Go
|
package fixtures
|
||
|
|
||
|
import (
|
||
|
"net/http"
|
||
|
|
||
|
"github.com/gin-gonic/gin"
|
||
|
)
|
||
|
|
||
|
// Handler returns an http.Handler that is capable of handling a variety of mock
|
||
|
// Bitbucket requests and returning mock responses.
|
||
|
func Handler() http.Handler {
|
||
|
gin.SetMode(gin.TestMode)
|
||
|
|
||
|
e := gin.New()
|
||
|
e.GET("/api/v1/repos/:owner/:name", getRepo)
|
||
|
e.GET("/api/v1/repos/:owner/:name/raw/:commit/:file", getRepoFile)
|
||
|
e.POST("/api/v1/repos/:owner/:name/hooks", createRepoHook)
|
||
|
e.GET("/api/v1/user/repos", getUserRepos)
|
||
|
|
||
|
return e
|
||
|
}
|
||
|
|
||
|
func getRepo(c *gin.Context) {
|
||
|
switch c.Param("name") {
|
||
|
case "repo_not_found":
|
||
|
c.String(404, "")
|
||
|
default:
|
||
|
c.String(200, repoPayload)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func getRepoFile(c *gin.Context) {
|
||
|
switch c.Param("file") {
|
||
|
case "file_not_found":
|
||
|
c.String(404, "")
|
||
|
default:
|
||
|
c.String(200, repoFilePayload)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func createRepoHook(c *gin.Context) {
|
||
|
in := struct {
|
||
|
Type string `json:"type"`
|
||
|
Conf struct {
|
||
|
Type string `json:"content_type"`
|
||
|
URL string `json:"url"`
|
||
|
} `json:"config"`
|
||
|
}{}
|
||
|
c.BindJSON(&in)
|
||
|
if in.Type != "gogs" ||
|
||
|
in.Conf.Type != "json" ||
|
||
|
in.Conf.URL != "http://localhost" {
|
||
|
c.String(500, "")
|
||
|
return
|
||
|
}
|
||
|
|
||
|
c.String(200, "{}")
|
||
|
}
|
||
|
|
||
|
func getUserRepos(c *gin.Context) {
|
||
|
switch c.Request.Header.Get("Authorization") {
|
||
|
case "token repos_not_found":
|
||
|
c.String(404, "")
|
||
|
default:
|
||
|
c.String(200, userRepoPayload)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const repoPayload = `
|
||
|
{
|
||
|
"owner": {
|
||
|
"username": "test_name",
|
||
|
"email": "octocat@github.com",
|
||
|
"avatar_url": "https:\/\/secure.gravatar.com\/avatar\/8c58a0be77ee441bb8f8595b7f1b4e87"
|
||
|
},
|
||
|
"full_name": "test_name\/repo_name",
|
||
|
"private": true,
|
||
|
"html_url": "http:\/\/localhost\/test_name\/repo_name",
|
||
|
"clone_url": "http:\/\/localhost\/test_name\/repo_name.git",
|
||
|
"permissions": {
|
||
|
"admin": true,
|
||
|
"push": true,
|
||
|
"pull": true
|
||
|
}
|
||
|
}
|
||
|
`
|
||
|
|
||
|
const repoFilePayload = `{ platform: linux/amd64 }`
|
||
|
|
||
|
const userRepoPayload = `
|
||
|
[
|
||
|
{
|
||
|
"owner": {
|
||
|
"username": "test_name",
|
||
|
"email": "octocat@github.com",
|
||
|
"avatar_url": "https:\/\/secure.gravatar.com\/avatar\/8c58a0be77ee441bb8f8595b7f1b4e87"
|
||
|
},
|
||
|
"full_name": "test_name\/repo_name",
|
||
|
"private": true,
|
||
|
"html_url": "http:\/\/localhost\/test_name\/repo_name",
|
||
|
"clone_url": "http:\/\/localhost\/test_name\/repo_name.git",
|
||
|
"permissions": {
|
||
|
"admin": true,
|
||
|
"push": true,
|
||
|
"pull": true
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
`
|