github.com/cozy/cozy-stack@v0.0.0-20240603063001-31110fa4cae1/web/middlewares/user_agent_test.go (about) 1 package middlewares_test 2 3 import ( 4 "io" 5 "net/http" 6 "net/http/httptest" 7 "testing" 8 9 "github.com/cozy/cozy-stack/model/instance" 10 "github.com/cozy/cozy-stack/pkg/assets/dynamic" 11 "github.com/cozy/cozy-stack/pkg/config/config" 12 "github.com/cozy/cozy-stack/tests/testutils" 13 "github.com/cozy/cozy-stack/web" 14 "github.com/cozy/cozy-stack/web/middlewares" 15 "github.com/labstack/echo/v4" 16 "github.com/stretchr/testify/assert" 17 "github.com/stretchr/testify/require" 18 ) 19 20 type stupidRenderer struct{} 21 22 func TestUser(t *testing.T) { 23 if testing.Short() { 24 t.Skip("an instance is required for this test: test skipped due to the use of --short flag") 25 } 26 27 config.UseTestFile(t) 28 config.GetConfig().Assets = "../../assets" 29 setup := testutils.NewSetup(t, t.Name()) 30 31 setup.SetupSwiftTest() 32 require.NoError(t, dynamic.InitDynamicAssetFS(config.FsURL().String()), "Could not init dynamic FS") 33 34 require.NoError(t, web.SetupAssets(echo.New(), config.GetConfig().Assets)) 35 36 t.Run("UserAgent", func(t *testing.T) { 37 // middleware instance 38 e := echo.New() 39 40 e.Renderer = &stupidRenderer{} 41 42 req, _ := http.NewRequest(echo.GET, "http://cozy.local", nil) 43 req.Header.Set(echo.HeaderAccept, "text/html") 44 req.Header.Set("User-Agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0") // Firefox 45 46 ins := &instance.Instance{Domain: "cozy.local", Locale: "en"} 47 48 rec := httptest.NewRecorder() 49 c := e.NewContext(req, rec) 50 c.Set("instance", ins) 51 52 h := middlewares.CheckUserAgent(echo.NotFoundHandler) 53 err := h(c) 54 assert.Error(t, err) 55 56 req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko") // IE 11 57 h2 := middlewares.CheckUserAgent(echo.NotFoundHandler) 58 err2 := h2(c) 59 assert.NoError(t, err2, nil) 60 61 req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/17.14931") // Edge 17 62 h3 := middlewares.CheckUserAgent(echo.NotFoundHandler) 63 err3 := h3(c) 64 assert.NoError(t, err3, nil) 65 66 req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.81 Safari/537.36 Edg/97.0.1072.69") // Edge 97 67 h4 := middlewares.CheckUserAgent(echo.NotFoundHandler) 68 err4 := h4(c) 69 assert.Error(t, err4, nil) 70 71 req.Header.Set("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/97.0 Mobile/15E148 Safari/605.1.15") // Firefox for iOS 72 h5 := middlewares.CheckUserAgent(echo.NotFoundHandler) 73 err5 := h5(c) 74 assert.Error(t, err5, nil) 75 }) 76 77 t.Run("ParseEdgeVersion", func(t *testing.T) { 78 version := "15.123456" 79 v, ok := middlewares.GetMajorVersion(version) 80 assert.Equal(t, 15, v) 81 assert.Equal(t, true, ok) 82 83 version = "75.123456.6789" 84 v, ok = middlewares.GetMajorVersion(version) 85 assert.Equal(t, 75, v) 86 assert.Equal(t, true, ok) 87 88 version = "12" 89 v, ok = middlewares.GetMajorVersion(version) 90 assert.Equal(t, 12, v) 91 assert.Equal(t, true, ok) 92 93 version = "foobar" 94 v, ok = middlewares.GetMajorVersion(version) 95 assert.Equal(t, -1, v) 96 assert.Equal(t, false, ok) 97 }) 98 } 99 100 func (sr *stupidRenderer) Render(w io.Writer, name string, data interface{}, c echo.Context) error { 101 return nil 102 }