// SPDX-License-Identifier: AGPL-3.0-only
package devserver
import (
"bufio"
"context"
"encoding/json"
"io"
"net/http"
"net/http/httptest"
"net/url"
"strconv"
"strings"
"sync/atomic"
"testing"
"time"
)
func TestInjectDevelopmentClientAndCSP(t *testing.T) {
t.Parallel()
body := "
Hello
"
request := httptest.NewRequest(http.MethodGet, "http://example.test/", nil)
request.Header.Set("Sec-Fetch-Dest", "document")
response := &http.Response{
StatusCode: http.StatusOK,
Header: make(http.Header),
Body: io.NopCloser(strings.NewReader(body)),
ContentLength: int64(len(body)),
Request: request,
}
response.Header.Set("Content-Type", "text/html; charset=utf-8")
response.Header.Set("Content-Length", strconv.Itoa(len(body)))
response.Header.Set("ETag", `"old"`)
response.Header.Set("Content-Security-Policy", "default-src 'self'; script-src 'self'; script-src-elem 'none'")
if err := injectDevelopmentClient(response); err != nil {
t.Fatalf("injectDevelopmentClient() error = %v", err)
}
got, err := io.ReadAll(response.Body)
if err != nil {
t.Fatal(err)
}
if !strings.Contains(string(got), string(reloadClientTag)) {
t.Fatalf("injected body does not contain reload client: %s", got)
}
if strings.Index(string(got), string(reloadClientTag)) > strings.Index(string(got), "page