66 lines
1.9 KiB
Go
66 lines
1.9 KiB
Go
package ocrapi
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"io"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
)
|
|
|
|
func TestClientRecognizePostsMultipartAndParsesSupportedReplies(t *testing.T) {
|
|
for _, testCase := range []struct {
|
|
name string
|
|
contentType string
|
|
body string
|
|
want string
|
|
}{
|
|
{"text", "text/plain", "aB12", "aB12"},
|
|
{"json", "application/json", `{"text":"K9"}`, "K9"},
|
|
{"result", "application/json", `{"result":"Z7"}`, "Z7"},
|
|
} {
|
|
t.Run(testCase.name, func(t *testing.T) {
|
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
if r.Method != http.MethodPost || r.URL.Path != "/ocr" {
|
|
t.Fatalf("request = %s %s", r.Method, r.URL.Path)
|
|
}
|
|
file, header, err := r.FormFile("file")
|
|
if err != nil || header.Filename != "captcha.png" {
|
|
t.Fatalf("FormFile() = %v / %#v", err, header)
|
|
}
|
|
content, _ := io.ReadAll(file)
|
|
if string(content) != "image-bytes" {
|
|
t.Fatalf("image content = %q", content)
|
|
}
|
|
w.Header().Set("Content-Type", testCase.contentType)
|
|
_, _ = w.Write([]byte(testCase.body))
|
|
}))
|
|
defer server.Close()
|
|
client, err := NewClient(server.URL+"/ocr", 0)
|
|
if err != nil {
|
|
t.Fatalf("NewClient() error = %v", err)
|
|
}
|
|
actual, err := client.Recognize(context.Background(), []byte("image-bytes"), "image/png")
|
|
if err != nil || actual != testCase.want {
|
|
t.Fatalf("Recognize() = %q, %v", actual, err)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestClientRecognizeFailsClosed(t *testing.T) {
|
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
http.Redirect(w, r, "/other", http.StatusFound)
|
|
}))
|
|
defer server.Close()
|
|
client, err := NewClient(server.URL+"/ocr", 0)
|
|
if err != nil {
|
|
t.Fatalf("NewClient() error = %v", err)
|
|
}
|
|
_, err = client.Recognize(context.Background(), []byte("image"), "image/png")
|
|
if !errors.Is(err, ErrServiceInvalid) {
|
|
t.Fatalf("Recognize() error = %v", err)
|
|
}
|
|
}
|