client_preview_validation_test.go

 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}