Major rewrite
* use dep for vendoring * lets encrypt * moved web to transfer.sh-web repo * single command install * added first tests
This commit is contained in:
236
vendor/github.com/golang/gddo/talksapp/main_test.go
generated
vendored
Normal file
236
vendor/github.com/golang/gddo/talksapp/main_test.go
generated
vendored
Normal file
@@ -0,0 +1,236 @@
|
||||
// Copyright 2015 The Go Authors. All rights reserved.
|
||||
//
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file or at
|
||||
// https://developers.google.com/open-source/licenses/bsd.
|
||||
|
||||
package talksapp
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"net/url"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"google.golang.org/appengine"
|
||||
"google.golang.org/appengine/aetest"
|
||||
"google.golang.org/appengine/memcache"
|
||||
|
||||
"github.com/golang/gddo/gosrc"
|
||||
)
|
||||
|
||||
const importPath = "github.com/user/repo/path/to/presentation.slide"
|
||||
|
||||
func TestHome(t *testing.T) {
|
||||
do(t, "GET", "/", func(r *http.Request) {
|
||||
w := httptest.NewRecorder()
|
||||
handlerFunc(serveRoot).ServeHTTP(w, r)
|
||||
|
||||
if w.Code != http.StatusOK {
|
||||
t.Fatalf("expected status: %d, got: %d", http.StatusOK, w.Code)
|
||||
}
|
||||
|
||||
if !strings.Contains(w.Body.String(), "go-talks.appspot.org") {
|
||||
t.Fatal("expected response to contain: go-talks.appspot.org")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestPresentation(t *testing.T) {
|
||||
presentationTitle := "My awesome presentation!"
|
||||
presentationSrc := []byte(presentationTitle + `
|
||||
|
||||
Subtitle
|
||||
|
||||
* Slide 1
|
||||
|
||||
- Foo
|
||||
- Bar
|
||||
- Baz
|
||||
`)
|
||||
|
||||
originalGetPresentation := getPresentation
|
||||
getPresentation = func(client *http.Client, importPath string) (*gosrc.Presentation, error) {
|
||||
return &gosrc.Presentation{
|
||||
Filename: "presentation.slide",
|
||||
Files: map[string][]byte{
|
||||
"presentation.slide": presentationSrc,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
defer func() {
|
||||
getPresentation = originalGetPresentation
|
||||
}()
|
||||
|
||||
do(t, "GET", "/"+importPath, func(r *http.Request) {
|
||||
w := httptest.NewRecorder()
|
||||
handlerFunc(serveRoot).ServeHTTP(w, r)
|
||||
|
||||
if w.Code != http.StatusOK {
|
||||
t.Fatalf("expected status: %d, got: %d", http.StatusOK, w.Code)
|
||||
}
|
||||
|
||||
if !strings.Contains(w.Body.String(), presentationTitle) {
|
||||
t.Fatalf("unexpected response body: %s", w.Body)
|
||||
}
|
||||
|
||||
c := appengine.NewContext(r)
|
||||
_, err := memcache.Get(c, importPath)
|
||||
|
||||
if err == memcache.ErrCacheMiss {
|
||||
t.Fatal("expected result to be cached")
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("expected no error, got: %s", err)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestPresentationCacheHit(t *testing.T) {
|
||||
do(t, "GET", "/"+importPath, func(r *http.Request) {
|
||||
cachedPresentation := "<div>My Presentation</div>"
|
||||
|
||||
c := appengine.NewContext(r)
|
||||
memcache.Add(c, &memcache.Item{
|
||||
Key: importPath,
|
||||
Value: []byte(cachedPresentation),
|
||||
Expiration: time.Hour,
|
||||
})
|
||||
|
||||
w := httptest.NewRecorder()
|
||||
handlerFunc(serveRoot).ServeHTTP(w, r)
|
||||
|
||||
if w.Code != http.StatusOK {
|
||||
t.Fatalf("expected status: %d, got: %d", http.StatusOK, w.Code)
|
||||
}
|
||||
|
||||
if w.Body.String() != cachedPresentation {
|
||||
t.Fatal("response does not matched cached presentation")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestPresentationNotFound(t *testing.T) {
|
||||
originalGetPresentation := getPresentation
|
||||
getPresentation = func(client *http.Client, importPath string) (*gosrc.Presentation, error) {
|
||||
return nil, gosrc.NotFoundError{}
|
||||
}
|
||||
defer func() {
|
||||
getPresentation = originalGetPresentation
|
||||
}()
|
||||
|
||||
do(t, "GET", "/"+importPath, func(r *http.Request) {
|
||||
w := httptest.NewRecorder()
|
||||
handlerFunc(serveRoot).ServeHTTP(w, r)
|
||||
|
||||
if w.Code != http.StatusBadRequest {
|
||||
t.Fatalf("expected status: %d, got: %d", http.StatusBadRequest, w.Code)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestWrongMethod(t *testing.T) {
|
||||
do(t, "POST", "/", func(r *http.Request) {
|
||||
w := httptest.NewRecorder()
|
||||
handlerFunc(serveRoot).ServeHTTP(w, r)
|
||||
|
||||
if w.Code != http.StatusMethodNotAllowed {
|
||||
t.Fatalf("expected status %d", http.StatusMethodNotAllowed)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestCompile(t *testing.T) {
|
||||
version := "2"
|
||||
body := `
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
fmt.fmtPrintln("Hello, playground")
|
||||
}
|
||||
`
|
||||
responseJSON := `{"Errors":"","Events":[{"Message":"Hello, playground\n","Kind":"stdout","Delay":0}]}`
|
||||
|
||||
server := httptest.NewServer(
|
||||
http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
formVersion := r.FormValue("version")
|
||||
formBody := r.FormValue("body")
|
||||
|
||||
if formVersion != version {
|
||||
t.Fatalf("expected version sent to play.golang.org to be: %s, was: %s", version, formVersion)
|
||||
}
|
||||
|
||||
if formBody != body {
|
||||
t.Fatalf("expected body sent to play.golang.org to be: %s, was: %s", body, formBody)
|
||||
}
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(200)
|
||||
|
||||
fmt.Fprintln(w, responseJSON)
|
||||
}),
|
||||
)
|
||||
defer server.Close()
|
||||
|
||||
defer func(old string) { playCompileURL = old }(playCompileURL)
|
||||
playCompileURL = server.URL
|
||||
|
||||
do(t, "POST", "/compile", func(r *http.Request) {
|
||||
r.PostForm = url.Values{
|
||||
"version": []string{version},
|
||||
"body": []string{body},
|
||||
}
|
||||
|
||||
w := httptest.NewRecorder()
|
||||
handlerFunc(serveCompile).ServeHTTP(w, r)
|
||||
|
||||
if w.Code != http.StatusOK {
|
||||
t.Fatalf("expected status: %d, got: %d", http.StatusOK, w.Code)
|
||||
}
|
||||
|
||||
contentType := w.Header().Get("Content-Type")
|
||||
if w.Header().Get("Content-Type") != "application/json" {
|
||||
t.Fatalf("unexpected Content-Type: %s", contentType)
|
||||
}
|
||||
|
||||
if strings.TrimSpace(w.Body.String()) != responseJSON {
|
||||
t.Fatalf("unexpected response body: %s", w.Body)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestBot(t *testing.T) {
|
||||
do(t, "GET", "/bot.html", func(r *http.Request) {
|
||||
w := httptest.NewRecorder()
|
||||
handlerFunc(serveBot).ServeHTTP(w, r)
|
||||
|
||||
if w.Code != http.StatusOK {
|
||||
t.Fatalf("expected status: %d, got: %d", http.StatusOK, w.Code)
|
||||
}
|
||||
|
||||
if !strings.Contains(w.Body.String(), contactEmail) {
|
||||
t.Fatalf("expected body to contain %s", contactEmail)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func do(t *testing.T, method, path string, f func(*http.Request)) {
|
||||
i, err := aetest.NewInstance(nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer i.Close()
|
||||
|
||||
r, err := i.NewRequest(method, path, nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
f(r)
|
||||
}
|
Reference in New Issue
Block a user