// SPDX-License-Identifier: AGPL-3.0-or-later package web import ( "encoding/json" "strings" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) // The web app manifest makes the site installable: every page links it, and // its icons are served assets. func TestWebAppManifest(t *testing.T) { t.Parallel() srv := newBareServer(t) u := srv.assets.urls man, ok := srv.assets.byName[strings.TrimPrefix(u.Manifest, StaticPrefix)] require.True(t, ok) assert.Equal(t, "application/manifest+json", man.typ) var m webManifest require.NoError(t, json.Unmarshal(man.body, &m)) assert.Equal(t, "standalone", m.Display) assert.Equal(t, "/", m.StartURL) require.Len(t, m.Icons, len(appIcons)) for _, ic := range m.Icons { a, ok := srv.assets.byName[strings.TrimPrefix(ic.Src, StaticPrefix)] require.True(t, ok, ic.Src) assert.Equal(t, "image/png", a.typ) } _, ok = srv.assets.byName[strings.TrimPrefix(u.AppleIcon, StaticPrefix)] assert.True(t, ok) page := renderToString(t, Shell(Layout{Assets: u}, nil)) assert.Contains(t, page, ``) assert.Contains(t, page, ``) }