1// SPDX-FileCopyrightText: Amolith <amolith@secluded.site>
2//
3// SPDX-License-Identifier: LicenseRef-MutuaL-1.2
4
5package cooked
6
7import (
8 "context"
9 "net/http"
10 "strings"
11 "testing"
12)
13
14func TestPreviewRecipeTextACIDAPIClientResponses1AcceptsIntegerDecimalPortions(t *testing.T) {
15 var previewCalls int
16 client, closeServer := newTestClient(t, rawPreviewRecipeTextTestHandler(
17 t,
18 &previewCalls,
19 "{\"title\":\"Pasta\",\"markdown\":\"# Pasta\",\"portions\":1.0}",
20 ))
21 defer closeServer()
22
23 preview, err := client.PreviewRecipeText(context.Background(), "Pasta", "Boil pasta.")
24 if err != nil {
25 t.Fatalf("PreviewRecipeText() error = %v", err)
26 }
27 if previewCalls != 1 {
28 t.Fatalf("preview calls = %d, want 1", previewCalls)
29 }
30 if preview.Portions != 1 {
31 t.Fatalf("preview portions = %d, want 1", preview.Portions)
32 }
33}
34
35func TestPreviewRecipeTextACIDAPIClientResponses1RejectsFractionalPortions(t *testing.T) {
36 var previewCalls int
37 client, closeServer := newTestClient(t, rawPreviewRecipeTextTestHandler(
38 t,
39 &previewCalls,
40 "{\"title\":\"Pasta\",\"markdown\":\"# Pasta\",\"portions\":1.5}",
41 ))
42 defer closeServer()
43
44 _, err := client.PreviewRecipeText(context.Background(), "Pasta", "Boil pasta.")
45 if err == nil {
46 t.Fatal("PreviewRecipeText() error = nil, want fractional portions error")
47 }
48 if !strings.Contains(err.Error(), "must be integer-valued") {
49 t.Fatalf("PreviewRecipeText() error = %v, want integer-valued portions error", err)
50 }
51 if previewCalls != 1 {
52 t.Fatalf("preview calls = %d, want 1", previewCalls)
53 }
54}
55
56func rawPreviewRecipeTextTestHandler(t *testing.T, previewCalls *int, body string) http.HandlerFunc {
57 t.Helper()
58
59 return func(w http.ResponseWriter, r *http.Request) {
60 switch r.URL.Path {
61 case "/api/public/login":
62 writeLoginResponse(t, w)
63 case "/api/new/from-text/preview":
64 requireMethod(t, r, http.MethodPost, "preview")
65 requireSessionCookie(t, r)
66 requirePreviewRecipeTextRequest(t, r)
67 (*previewCalls)++
68 w.Header().Set("Content-Type", "application/json")
69 if _, err := w.Write([]byte(body)); err != nil {
70 t.Fatalf("write raw preview response: %v", err)
71 }
72 default:
73 t.Fatalf("unexpected path %s", r.URL.Path)
74 }
75 }
76}