mirror of
https://github.com/airlabspl/uptimemonitor.git
synced 2025-08-14 20:29:16 +02:00
initial commit
This commit is contained in:
155
pkg/testutil/assertable_response.go
Normal file
155
pkg/testutil/assertable_response.go
Normal file
@@ -0,0 +1,155 @@
|
||||
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
|
||||
}
|
Reference in New Issue
Block a user