Go library for interacting with https://www.hcaptcha.com/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
2.1 KiB
106 lines
2.1 KiB
package hcaptcha |
|
|
|
import ( |
|
"net/http" |
|
"os" |
|
"strings" |
|
"testing" |
|
"time" |
|
) |
|
|
|
const ( |
|
dummySecret = "0x0000000000000000000000000000000000000000" |
|
dummyToken = "10000000-aaaa-bbbb-cccc-000000000001" |
|
) |
|
|
|
func TestMain(m *testing.M) { |
|
os.Exit(m.Run()) |
|
} |
|
|
|
func TestCaptcha(t *testing.T) { |
|
tt := []struct { |
|
Name string |
|
Secret string |
|
Token string |
|
Error ErrorCode |
|
}{ |
|
{ |
|
Name: "Success", |
|
Secret: dummySecret, |
|
Token: dummyToken, |
|
}, |
|
{ |
|
Name: "Missing Secret", |
|
Token: dummyToken, |
|
Error: ErrMissingInputSecret, |
|
}, |
|
{ |
|
Name: "Invalid Secret", |
|
Secret: "test", |
|
Token: dummyToken, |
|
Error: ErrInvalidInputSecret, |
|
}, |
|
{ |
|
Name: "Missing Token", |
|
Secret: dummySecret, |
|
Error: ErrMissingInputResponse, |
|
}, |
|
{ |
|
Name: "Invalid Token", |
|
Secret: dummySecret, |
|
Token: "test", |
|
Error: ErrInvalidInputResponse, |
|
}, |
|
} |
|
|
|
for _, tc := range tt { |
|
t.Run(tc.Name, func(t *testing.T) { |
|
client, err := New(tc.Secret, WithHTTP(&http.Client{ |
|
Timeout: time.Second * 5, |
|
})) |
|
if err != nil { |
|
// The only error that can be returned from creating a client |
|
if tc.Error == ErrMissingInputSecret && err == ErrMissingInputSecret { |
|
return |
|
} |
|
t.Log(err) |
|
t.FailNow() |
|
} |
|
|
|
resp, err := client.Verify(tc.Token, PostOptions{}) |
|
if err != nil { |
|
// The only error that can be returned prior to the request |
|
if tc.Error == ErrMissingInputResponse && err == ErrMissingInputResponse { |
|
return |
|
} |
|
t.Log(err) |
|
t.FailNow() |
|
} |
|
|
|
if tc.Error.String() != "" { |
|
if resp.Success { |
|
t.Log("Verification should fail.") |
|
t.Fail() |
|
} |
|
if len(resp.ErrorCodes) == 0 { |
|
t.Log("hCaptcha should have returned an error.") |
|
t.Fail() |
|
} |
|
var hasErr bool |
|
for _, err := range resp.ErrorCodes { |
|
if strings.EqualFold(err.String(), tc.Error.String()) { |
|
hasErr = true |
|
break |
|
} |
|
} |
|
if !hasErr { |
|
t.Log("hCaptcha did not return the error being tested.") |
|
t.Fail() |
|
} |
|
} else if !resp.Success { |
|
t.Log("Verification should succeed.") |
|
t.Fail() |
|
} |
|
}) |
|
} |
|
}
|
|
|