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 "testing"
11)
12
13func TestPreviewRecipeTextACIDAPIClientResponses1AcceptsIntegerDecimalPortions(t *testing.T) {
14 var previewCalls int
15 client, closeServer := newTestClient(t, rawPreviewRecipeTextTestHandler(
16 t,
17 &previewCalls,
18 "{\"title\":\"Pasta\",\"markdown\":\"# Pasta\",\"portions\":1.0}",
19 ))
20 defer closeServer()
21
22 preview, err := client.PreviewRecipeText(context.Background(), "Pasta", "Boil pasta.")
23 if err != nil {
24 t.Fatalf("PreviewRecipeText() error = %v", err)
25 }
26 if previewCalls != 1 {
27 t.Fatalf("preview calls = %d, want 1", previewCalls)
28 }
29 if preview.Portions != 1 {
30 t.Fatalf("preview portions = %g, want 1", preview.Portions)
31 }
32}
33
34// api-client.RESPONSES.1 recipes.PREVIEW_TEXT.4-1
35func TestPreviewRecipeTextACIDAPIClientResponses1AndRecipesPreviewText4_1PreservesFractionalPortions(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 preview, err := client.PreviewRecipeText(context.Background(), "Pasta", "Boil pasta.")
45 if err != nil {
46 t.Fatalf("PreviewRecipeText() error = %v", err)
47 }
48 if previewCalls != 1 {
49 t.Fatalf("preview calls = %d, want 1", previewCalls)
50 }
51 if preview.Portions != 1.5 {
52 t.Fatalf("preview portions = %g, want 1.5", preview.Portions)
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}