|
package web |
|
|
|
import ( |
|
"fmt" |
|
"testing" |
|
"time" |
|
|
|
"github.com/mgutz/ansi" |
|
|
|
_ "github.com/GoAdminGroup/go-admin/adapter/gin" |
|
_ "github.com/GoAdminGroup/go-admin/modules/db/drivers/mysql" |
|
_ "github.com/GoAdminGroup/themes/adminlte" |
|
|
|
"github.com/sclevine/agouti" |
|
) |
|
|
|
type Testers func(t *testing.T, page *Page) |
|
type ServerStarter func(quit chan struct{}) |
|
|
|
|
|
|
|
|
|
func UserAcceptanceTestSuit(t *testing.T, testers Testers, serverStarter ServerStarter, local bool, options ...string) { |
|
var quit = make(chan struct{}) |
|
go serverStarter(quit) |
|
|
|
if len(options) == 0 { |
|
options = []string{ |
|
"--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36", |
|
"--window-size=1500,900", |
|
"--incognito", |
|
"--blink-settings=imagesEnabled=true", |
|
"--no-default-browser-check", |
|
"--ignore-ssl-errors=true", |
|
"--ssl-protocol=any", |
|
"--no-sandbox", |
|
"--disable-breakpad", |
|
"--disable-gpu", |
|
"--disable-logging", |
|
"--no-zygote", |
|
"--allow-running-insecure-content", |
|
} |
|
if !local { |
|
options = append(options, "--headless") |
|
} |
|
} |
|
|
|
driver := agouti.ChromeDriver( |
|
agouti.ChromeOptions("args", options), |
|
agouti.Desired( |
|
agouti.Capabilities{ |
|
"loggingPrefs": map[string]string{ |
|
"performance": "ALL", |
|
}, |
|
"acceptSslCerts": true, |
|
"acceptInsecureCerts": true, |
|
}, |
|
)) |
|
err := driver.Start() |
|
if err != nil { |
|
panic("failed to start driver, error: " + err.Error()) |
|
} |
|
|
|
page, err := driver.NewPage() |
|
if err != nil { |
|
panic("failed to open page, error: " + err.Error()) |
|
} |
|
|
|
fmt.Println() |
|
fmt.Println("============================================") |
|
printlnWithColor("User Acceptance Testing", "blue") |
|
fmt.Println("============================================") |
|
fmt.Println() |
|
|
|
testers(t, &Page{T: t, Page: page, Driver: driver, Quit: quit}) |
|
|
|
wait(2) |
|
|
|
if !local { |
|
err = page.CloseWindow() |
|
if err != nil { |
|
fmt.Println("failed to close page, error: ", err) |
|
} |
|
|
|
err = page.Destroy() |
|
if err != nil { |
|
fmt.Println("failed to destroy page, error: ", err) |
|
} |
|
|
|
err = driver.Stop() |
|
if err != nil { |
|
fmt.Println("failed to stop driver, error: ", err) |
|
} |
|
} |
|
|
|
quit <- struct{}{} |
|
} |
|
|
|
func printlnWithColor(msg string, color string) { |
|
fmt.Println(ansi.Color(msg, color)) |
|
} |
|
|
|
func printPart(part string) { |
|
printlnWithColor("> "+part, colorBlue) |
|
} |
|
|
|
func wait(t int) { |
|
time.Sleep(time.Duration(t) * time.Second) |
|
} |
|
|
|
const basePath = "http://localhost:9033" |
|
|
|
func url(suffix string) string { |
|
if suffix == "/" { |
|
suffix = "" |
|
} |
|
return basePath + "/admin" + suffix |
|
} |
|
|
|
const ( |
|
colorBlue = "blue" |
|
colorGreen = "green" |
|
) |
|
|