WitNote / internal /cli /actions /actions_element_test.go
AUXteam's picture
Upload folder using huggingface_hub
6a7089a verified
package actions
import (
"encoding/json"
"testing"
"github.com/spf13/cobra"
)
func newActionCmd() *cobra.Command {
cmd := &cobra.Command{}
cmd.Flags().String("css", "", "")
cmd.Flags().Bool("wait-nav", false, "")
cmd.Flags().String("tab", "", "")
return cmd
}
func newSimpleCmd() *cobra.Command {
cmd := &cobra.Command{}
cmd.Flags().String("tab", "", "")
return cmd
}
func TestClick(t *testing.T) {
m := newMockServer()
defer m.close()
client := m.server.Client()
cmd := newActionCmd()
Action(client, m.base(), "", "click", "e5", cmd)
if m.lastPath != "/action" {
t.Errorf("expected /action, got %s", m.lastPath)
}
var body map[string]any
_ = json.Unmarshal([]byte(m.lastBody), &body)
if body["kind"] != "click" {
t.Errorf("expected kind=click, got %v", body["kind"])
}
if body["ref"] != "e5" {
t.Errorf("expected ref=e5, got %v", body["ref"])
}
}
func TestClickWaitNav(t *testing.T) {
m := newMockServer()
defer m.close()
client := m.server.Client()
cmd := newActionCmd()
_ = cmd.Flags().Set("wait-nav", "true")
Action(client, m.base(), "", "click", "e5", cmd)
var body map[string]any
_ = json.Unmarshal([]byte(m.lastBody), &body)
if body["waitNav"] != true {
t.Error("expected waitNav=true")
}
}
func TestType(t *testing.T) {
m := newMockServer()
defer m.close()
client := m.server.Client()
cmd := newSimpleCmd()
ActionSimple(client, m.base(), "", "type", []string{"e12", "hello", "world"}, cmd)
var body map[string]any
_ = json.Unmarshal([]byte(m.lastBody), &body)
if body["kind"] != "type" {
t.Errorf("expected kind=type, got %v", body["kind"])
}
if body["ref"] != "e12" {
t.Errorf("expected ref=e12, got %v", body["ref"])
}
if body["text"] != "hello world" {
t.Errorf("expected text='hello world', got %v", body["text"])
}
}
func TestPress(t *testing.T) {
m := newMockServer()
defer m.close()
client := m.server.Client()
cmd := newSimpleCmd()
ActionSimple(client, m.base(), "", "press", []string{"Enter"}, cmd)
var body map[string]any
_ = json.Unmarshal([]byte(m.lastBody), &body)
if body["key"] != "Enter" {
t.Errorf("expected key=Enter, got %v", body["key"])
}
}
func TestClickWithCSS(t *testing.T) {
m := newMockServer()
defer m.close()
client := m.server.Client()
cmd := newActionCmd()
_ = cmd.Flags().Set("css", "button.submit")
Action(client, m.base(), "", "click", "", cmd)
var body map[string]any
_ = json.Unmarshal([]byte(m.lastBody), &body)
if body["selector"] != "button.submit" {
t.Errorf("expected selector=button.submit, got %v", body["selector"])
}
if _, hasRef := body["ref"]; hasRef {
t.Error("should not set ref when --css is provided")
}
}
func TestClickWithCSS_AndWaitNav(t *testing.T) {
m := newMockServer()
defer m.close()
client := m.server.Client()
cmd := newActionCmd()
_ = cmd.Flags().Set("wait-nav", "true")
_ = cmd.Flags().Set("css", "#login-btn")
Action(client, m.base(), "", "click", "", cmd)
var body map[string]any
_ = json.Unmarshal([]byte(m.lastBody), &body)
if body["selector"] != "#login-btn" {
t.Errorf("expected selector=#login-btn, got %v", body["selector"])
}
if body["waitNav"] != true {
t.Error("expected waitNav=true")
}
}
func TestHoverWithCSS(t *testing.T) {
m := newMockServer()
defer m.close()
client := m.server.Client()
cmd := newActionCmd()
_ = cmd.Flags().Set("css", ".nav-item")
Action(client, m.base(), "", "hover", "", cmd)
var body map[string]any
_ = json.Unmarshal([]byte(m.lastBody), &body)
if body["selector"] != ".nav-item" {
t.Errorf("expected selector=.nav-item, got %v", body["selector"])
}
}
func TestFocusWithCSS(t *testing.T) {
m := newMockServer()
defer m.close()
client := m.server.Client()
cmd := newActionCmd()
_ = cmd.Flags().Set("css", "input[name='email']")
Action(client, m.base(), "", "focus", "", cmd)
var body map[string]any
_ = json.Unmarshal([]byte(m.lastBody), &body)
if body["selector"] != "input[name='email']" {
t.Errorf("expected selector=input[name='email'], got %v", body["selector"])
}
}
func TestClickRefStillWorks(t *testing.T) {
m := newMockServer()
defer m.close()
client := m.server.Client()
cmd := newActionCmd()
Action(client, m.base(), "", "click", "e42", cmd)
var body map[string]any
_ = json.Unmarshal([]byte(m.lastBody), &body)
if body["ref"] != "e42" {
t.Errorf("expected ref=e42, got %v", body["ref"])
}
if _, hasSelector := body["selector"]; hasSelector {
t.Error("should not set selector when using ref")
}
}
func TestFill(t *testing.T) {
m := newMockServer()
defer m.close()
client := m.server.Client()
cmd := newSimpleCmd()
ActionSimple(client, m.base(), "", "fill", []string{"e3", "test value"}, cmd)
var body map[string]any
_ = json.Unmarshal([]byte(m.lastBody), &body)
if body["ref"] != "e3" {
t.Errorf("expected ref=e3, got %v", body["ref"])
}
if body["text"] != "test value" {
t.Errorf("expected text='test value', got %v", body["text"])
}
ActionSimple(client, m.base(), "", "fill", []string{"#email", "user@test.com"}, cmd)
body = nil
_ = json.Unmarshal([]byte(m.lastBody), &body)
if body["selector"] != "#email" {
t.Errorf("expected selector=#email, got %v", body["selector"])
}
ActionSimple(client, m.base(), "", "fill", []string{"embed", "inline content"}, cmd)
body = nil
_ = json.Unmarshal([]byte(m.lastBody), &body)
if body["selector"] != "embed" {
t.Errorf("expected selector=embed, got %v", body["selector"])
}
if _, hasRef := body["ref"]; hasRef {
t.Errorf("expected no ref for selector embed, got %v", body["ref"])
}
}
func TestScroll(t *testing.T) {
m := newMockServer()
defer m.close()
client := m.server.Client()
cmd := newSimpleCmd()
ActionSimple(client, m.base(), "", "scroll", []string{"e20"}, cmd)
var body map[string]any
_ = json.Unmarshal([]byte(m.lastBody), &body)
if body["ref"] != "e20" {
t.Errorf("expected ref=e20, got %v", body["ref"])
}
ActionSimple(client, m.base(), "", "scroll", []string{"800"}, cmd)
body = nil
_ = json.Unmarshal([]byte(m.lastBody), &body)
if body["scrollY"] != float64(800) {
t.Errorf("expected scrollY=800, got %v", body["scrollY"])
}
ActionSimple(client, m.base(), "", "scroll", []string{"down"}, cmd)
body = nil
_ = json.Unmarshal([]byte(m.lastBody), &body)
if body["scrollY"] != float64(800) {
t.Errorf("expected scrollY=800 for direction=down, got %v", body["scrollY"])
}
}
func TestCheck(t *testing.T) {
m := newMockServer()
defer m.close()
client := m.server.Client()
cmd := newActionCmd()
Action(client, m.base(), "", "check", "e7", cmd)
if m.lastPath != "/action" {
t.Errorf("expected /action, got %s", m.lastPath)
}
var body map[string]any
_ = json.Unmarshal([]byte(m.lastBody), &body)
if body["kind"] != "check" {
t.Errorf("expected kind=check, got %v", body["kind"])
}
if body["ref"] != "e7" {
t.Errorf("expected ref=e7, got %v", body["ref"])
}
if _, hasSelector := body["selector"]; hasSelector {
t.Error("should not set selector when using ref")
}
}
func TestCheckWithCSS(t *testing.T) {
m := newMockServer()
defer m.close()
client := m.server.Client()
cmd := newActionCmd()
_ = cmd.Flags().Set("css", "input[type=checkbox]")
Action(client, m.base(), "", "check", "", cmd)
var body map[string]any
_ = json.Unmarshal([]byte(m.lastBody), &body)
if body["kind"] != "check" {
t.Errorf("expected kind=check, got %v", body["kind"])
}
if body["selector"] != "input[type=checkbox]" {
t.Errorf("expected selector=input[type=checkbox], got %v", body["selector"])
}
if _, hasRef := body["ref"]; hasRef {
t.Error("should not set ref when --css is provided")
}
}
func TestUncheck(t *testing.T) {
m := newMockServer()
defer m.close()
client := m.server.Client()
cmd := newActionCmd()
Action(client, m.base(), "", "uncheck", "e9", cmd)
if m.lastPath != "/action" {
t.Errorf("expected /action, got %s", m.lastPath)
}
var body map[string]any
_ = json.Unmarshal([]byte(m.lastBody), &body)
if body["kind"] != "uncheck" {
t.Errorf("expected kind=uncheck, got %v", body["kind"])
}
if body["ref"] != "e9" {
t.Errorf("expected ref=e9, got %v", body["ref"])
}
if _, hasSelector := body["selector"]; hasSelector {
t.Error("should not set selector when using ref")
}
}
func TestUncheckWithCSS(t *testing.T) {
m := newMockServer()
defer m.close()
client := m.server.Client()
cmd := newActionCmd()
_ = cmd.Flags().Set("css", "#agree-checkbox")
Action(client, m.base(), "", "uncheck", "", cmd)
var body map[string]any
_ = json.Unmarshal([]byte(m.lastBody), &body)
if body["kind"] != "uncheck" {
t.Errorf("expected kind=uncheck, got %v", body["kind"])
}
if body["selector"] != "#agree-checkbox" {
t.Errorf("expected selector=#agree-checkbox, got %v", body["selector"])
}
if _, hasRef := body["ref"]; hasRef {
t.Error("should not set ref when --css is provided")
}
}
func TestSelect(t *testing.T) {
m := newMockServer()
defer m.close()
client := m.server.Client()
cmd := newSimpleCmd()
ActionSimple(client, m.base(), "", "select", []string{"e10", "option2"}, cmd)
var body map[string]any
_ = json.Unmarshal([]byte(m.lastBody), &body)
if body["ref"] != "e10" {
t.Errorf("expected ref=e10, got %v", body["ref"])
}
if body["value"] != "option2" {
t.Errorf("expected value=option2, got %v", body["value"])
}
}