More actions tests
This commit is contained in:
parent
adea3c38be
commit
28bb8d4446
2 changed files with 27 additions and 6 deletions
|
@ -61,7 +61,7 @@ func parseActions(s string) (actions []*action, err error) {
|
||||||
}
|
}
|
||||||
for _, action := range actions {
|
for _, action := range actions {
|
||||||
if !util.InStringList(actionsAll, action.Action) {
|
if !util.InStringList(actionsAll, action.Action) {
|
||||||
return nil, fmt.Errorf("action '%s' unknown", action.Action)
|
return nil, fmt.Errorf("parameter 'action' cannot be '%s', valid values are 'view', 'broadcast' and 'http'", action.Action)
|
||||||
} else if action.Label == "" {
|
} else if action.Label == "" {
|
||||||
return nil, fmt.Errorf("parameter 'label' is required")
|
return nil, fmt.Errorf("parameter 'label' is required")
|
||||||
} else if util.InStringList(actionsWithURL, action.Action) && action.URL == "" {
|
} else if util.InStringList(actionsWithURL, action.Action) && action.URL == "" {
|
||||||
|
@ -78,7 +78,7 @@ func parseActions(s string) (actions []*action, err error) {
|
||||||
func parseActionsFromJSON(s string) ([]*action, error) {
|
func parseActionsFromJSON(s string) ([]*action, error) {
|
||||||
actions := make([]*action, 0)
|
actions := make([]*action, 0)
|
||||||
if err := json.Unmarshal([]byte(s), &actions); err != nil {
|
if err := json.Unmarshal([]byte(s), &actions); err != nil {
|
||||||
return nil, err
|
return nil, fmt.Errorf("JSON error: %w", err)
|
||||||
}
|
}
|
||||||
return actions, nil
|
return actions, nil
|
||||||
}
|
}
|
||||||
|
@ -102,7 +102,7 @@ func parseActionsFromJSON(s string) ([]*action, error) {
|
||||||
// https://blog.gopheracademy.com/advent-2014/parsers-lexers/
|
// https://blog.gopheracademy.com/advent-2014/parsers-lexers/
|
||||||
func parseActionsFromSimple(s string) ([]*action, error) {
|
func parseActionsFromSimple(s string) ([]*action, error) {
|
||||||
if !utf8.ValidString(s) {
|
if !utf8.ValidString(s) {
|
||||||
return nil, errors.New("invalid string")
|
return nil, errors.New("invalid utf-8 string")
|
||||||
}
|
}
|
||||||
parser := &actionParser{
|
parser := &actionParser{
|
||||||
pos: 0,
|
pos: 0,
|
||||||
|
@ -177,7 +177,7 @@ func populateAction(newAction *action, section int, key, value string) error {
|
||||||
case "clear":
|
case "clear":
|
||||||
lvalue := strings.ToLower(value)
|
lvalue := strings.ToLower(value)
|
||||||
if !util.InStringList([]string{"true", "yes", "1", "false", "no", "0"}, lvalue) {
|
if !util.InStringList([]string{"true", "yes", "1", "false", "no", "0"}, lvalue) {
|
||||||
return fmt.Errorf("'clear=%s' not allowed", value)
|
return fmt.Errorf("parameter 'clear' cannot be '%s', only boolean values are allowed (true/yes/1/false/no/0)", value)
|
||||||
}
|
}
|
||||||
newAction.Clear = lvalue == "true" || lvalue == "yes" || lvalue == "1"
|
newAction.Clear = lvalue == "true" || lvalue == "yes" || lvalue == "1"
|
||||||
case "url":
|
case "url":
|
||||||
|
|
|
@ -112,15 +112,17 @@ func TestParseActions(t *testing.T) {
|
||||||
require.Equal(t, `http://google.com`, actions[0].URL)
|
require.Equal(t, `http://google.com`, actions[0].URL)
|
||||||
|
|
||||||
// Multiple actions, awkward spacing
|
// Multiple actions, awkward spacing
|
||||||
actions, err = parseActions(`http , 'Make love, not war 💙🫤' , https://ntfy.sh ; view, " yo ", https://x.org`)
|
actions, err = parseActions(`http , 'Make love, not war 💙🫤' , https://ntfy.sh ; view, " yo ", https://x.org, clear=true`)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
require.Equal(t, 2, len(actions))
|
require.Equal(t, 2, len(actions))
|
||||||
require.Equal(t, "http", actions[0].Action)
|
require.Equal(t, "http", actions[0].Action)
|
||||||
require.Equal(t, `Make love, not war 💙🫤`, actions[0].Label)
|
require.Equal(t, `Make love, not war 💙🫤`, actions[0].Label)
|
||||||
require.Equal(t, `https://ntfy.sh`, actions[0].URL)
|
require.Equal(t, `https://ntfy.sh`, actions[0].URL)
|
||||||
|
require.Equal(t, false, actions[0].Clear)
|
||||||
require.Equal(t, "view", actions[1].Action)
|
require.Equal(t, "view", actions[1].Action)
|
||||||
require.Equal(t, " yo ", actions[1].Label)
|
require.Equal(t, " yo ", actions[1].Label)
|
||||||
require.Equal(t, `https://x.org`, actions[1].URL)
|
require.Equal(t, `https://x.org`, actions[1].URL)
|
||||||
|
require.Equal(t, true, actions[1].Clear)
|
||||||
|
|
||||||
// Invalid syntax
|
// Invalid syntax
|
||||||
_, err = parseActions(`label="Out of order!" x, action="http", url=http://example.com`)
|
_, err = parseActions(`label="Out of order!" x, action="http", url=http://example.com`)
|
||||||
|
@ -136,7 +138,7 @@ func TestParseActions(t *testing.T) {
|
||||||
require.EqualError(t, err, "term 'what is this anyway' unknown")
|
require.EqualError(t, err, "term 'what is this anyway' unknown")
|
||||||
|
|
||||||
_, err = parseActions(`fdsfdsf`)
|
_, err = parseActions(`fdsfdsf`)
|
||||||
require.EqualError(t, err, "action 'fdsfdsf' unknown")
|
require.EqualError(t, err, "parameter 'action' cannot be 'fdsfdsf', valid values are 'view', 'broadcast' and 'http'")
|
||||||
|
|
||||||
_, err = parseActions(`aaa=a, "bbb, 'ccc, ddd, eee "`)
|
_, err = parseActions(`aaa=a, "bbb, 'ccc, ddd, eee "`)
|
||||||
require.EqualError(t, err, "key 'aaa' unknown")
|
require.EqualError(t, err, "key 'aaa' unknown")
|
||||||
|
@ -152,4 +154,23 @@ func TestParseActions(t *testing.T) {
|
||||||
|
|
||||||
_, err = parseActions(`''";,;"`)
|
_, err = parseActions(`''";,;"`)
|
||||||
require.EqualError(t, err, "unexpected character '\"' at position 2")
|
require.EqualError(t, err, "unexpected character '\"' at position 2")
|
||||||
|
|
||||||
|
_, err = parseActions(`action=http, label=a label, body=somebody`)
|
||||||
|
require.EqualError(t, err, "parameter 'url' is required for action 'http'")
|
||||||
|
|
||||||
|
_, err = parseActions(`action=http, label=a label, url=http://ntfy.sh, method=HEAD, body=somebody`)
|
||||||
|
require.EqualError(t, err, "parameter 'body' cannot be set if method is HEAD")
|
||||||
|
|
||||||
|
_, err = parseActions(`[ invalid json ]`)
|
||||||
|
require.EqualError(t, err, "JSON error: invalid character 'i' looking for beginning of value")
|
||||||
|
|
||||||
|
_, err = parseActions(`[ { "some": "object" } ]`)
|
||||||
|
require.EqualError(t, err, "parameter 'action' cannot be '', valid values are 'view', 'broadcast' and 'http'")
|
||||||
|
|
||||||
|
_, err = parseActions("\x00\x01\xFFx\xFE")
|
||||||
|
require.EqualError(t, err, "invalid utf-8 string")
|
||||||
|
|
||||||
|
_, err = parseActions(`http, label, http://x.org, clear=x`)
|
||||||
|
require.EqualError(t, err, "parameter 'clear' cannot be 'x', only boolean values are allowed (true/yes/1/false/no/0)")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue