mirror of
https://github.com/airlabspl/uptimemonitor.git
synced 2025-08-15 04:39:15 +02:00
156 lines
3.5 KiB
Go
156 lines
3.5 KiB
Go
package testutil
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/PuerkitoBio/goquery"
|
|
)
|
|
|
|
type AssertableResponse struct {
|
|
T *testing.T
|
|
Response *http.Response
|
|
Document *goquery.Document
|
|
}
|
|
|
|
func NewAssertableResponse(t *testing.T, res *http.Response) *AssertableResponse {
|
|
doc, _ := goquery.NewDocumentFromReader(res.Body)
|
|
|
|
return &AssertableResponse{
|
|
T: t,
|
|
Response: res,
|
|
Document: doc,
|
|
}
|
|
}
|
|
|
|
func (ar *AssertableResponse) AssertStatusCode(expected int) *AssertableResponse {
|
|
ar.T.Helper()
|
|
|
|
if ar.Response.StatusCode != expected {
|
|
ar.T.Fatalf("expected status code %d, got %d", expected, ar.Response.StatusCode)
|
|
}
|
|
|
|
return ar
|
|
}
|
|
|
|
func (ar *AssertableResponse) AssertRedirect(statusCode int, expected string) *AssertableResponse {
|
|
ar.T.Helper()
|
|
|
|
if ar.Response.Request.Response == nil {
|
|
ar.T.Fatalf("no redirect has been made")
|
|
}
|
|
|
|
if ar.Response.Request.Response.StatusCode != statusCode {
|
|
ar.T.Fatalf("expected status code %d, got %d", statusCode, ar.Response.Request.Response.StatusCode)
|
|
}
|
|
|
|
if actual := ar.Response.Request.Response.Header.Get("Location"); actual != expected {
|
|
ar.T.Fatalf("expected redirect to %s, got %s", expected, actual)
|
|
}
|
|
|
|
return ar
|
|
}
|
|
|
|
func (ar *AssertableResponse) AssertNoRedirect() *AssertableResponse {
|
|
ar.T.Helper()
|
|
|
|
if ar.Response.Request.Response != nil {
|
|
ar.T.Fatalf("unexpected redirect: %v", ar.Response.Request.URL)
|
|
}
|
|
|
|
return ar
|
|
}
|
|
|
|
func (ar *AssertableResponse) AssertElementVisible(selector string) *AssertableResponse {
|
|
ar.T.Helper()
|
|
|
|
if ar.Document == nil {
|
|
ar.T.Fatalf("no document available for assertion")
|
|
}
|
|
|
|
if ar.Document.Find(selector).Length() == 0 {
|
|
html, _ := ar.Document.Html()
|
|
ar.T.Fatalf(
|
|
"expected element with selector '%s' to be visible but it was not found in the output: %v",
|
|
selector,
|
|
html,
|
|
)
|
|
}
|
|
|
|
return ar
|
|
}
|
|
|
|
func (ar *AssertableResponse) AssertSeeText(text string) *AssertableResponse {
|
|
ar.T.Helper()
|
|
|
|
if ar.Document == nil {
|
|
ar.T.Fatalf("no document available for assertion")
|
|
}
|
|
|
|
html, _ := ar.Document.Html()
|
|
if !strings.Contains(html, text) {
|
|
ar.T.Fatalf("expected to see text '%s' but it was not found in the output: %v", text, html)
|
|
}
|
|
|
|
return ar
|
|
}
|
|
|
|
func (ar *AssertableResponse) AssertHeader(header string, expected string) *AssertableResponse {
|
|
ar.T.Helper()
|
|
|
|
if value := ar.Response.Header.Get(header); value == "" {
|
|
ar.T.Fatalf(`no header "%s" found`, header)
|
|
}
|
|
|
|
if value := ar.Response.Header.Get(header); value != expected {
|
|
ar.T.Fatalf("expected header '%s' to have value of '%s' but got '%s' instead", header, expected, value)
|
|
}
|
|
|
|
return ar
|
|
}
|
|
|
|
func (ar *AssertableResponse) AssertCookieSet(name string) *AssertableResponse {
|
|
ar.T.Helper()
|
|
|
|
for _, c := range ar.Response.Cookies() {
|
|
if c.Name == name {
|
|
return ar
|
|
}
|
|
}
|
|
|
|
if ar.Response.Request != nil && ar.Response.Request.Response != nil {
|
|
for _, c := range ar.Response.Request.Response.Cookies() {
|
|
if c.Name == name {
|
|
return ar
|
|
}
|
|
}
|
|
}
|
|
|
|
ar.T.Fatalf("expected to find cookie with a name '%s', but none has been found", name)
|
|
|
|
return ar
|
|
}
|
|
|
|
func (ar *AssertableResponse) AssertCookieMissing(name string) *AssertableResponse {
|
|
ar.T.Helper()
|
|
|
|
for _, c := range ar.Response.Cookies() {
|
|
if c.Name == name {
|
|
ar.T.Fatalf("expected not to find cookie with a name '%s'", name)
|
|
return ar
|
|
}
|
|
}
|
|
|
|
if ar.Response.Request != nil && ar.Response.Request.Response != nil {
|
|
for _, c := range ar.Response.Request.Response.Cookies() {
|
|
if c.Name == name {
|
|
ar.T.Fatalf("expected not to find cookie with a name '%s'", name)
|
|
return ar
|
|
}
|
|
}
|
|
}
|
|
|
|
return ar
|
|
}
|