1*36b5cba2SJason Westover // SPDX-License-Identifier: Apache-2.0
2*36b5cba2SJason Westover // SPDX-FileCopyrightText: Copyright OpenBMC Authors
3*36b5cba2SJason Westover #include "webassets.hpp"
4*36b5cba2SJason Westover
5*36b5cba2SJason Westover #include <gtest/gtest.h>
6*36b5cba2SJason Westover
7*36b5cba2SJason Westover namespace crow::webassets
8*36b5cba2SJason Westover {
9*36b5cba2SJason Westover namespace
10*36b5cba2SJason Westover {
11*36b5cba2SJason Westover
TEST(GetStaticEtagTest,CorrectValues)12*36b5cba2SJason Westover TEST(GetStaticEtagTest, CorrectValues)
13*36b5cba2SJason Westover {
14*36b5cba2SJason Westover // Webpack-style hash in filename.
15*36b5cba2SJason Westover EXPECT_EQ(getStaticEtag("app.63e2c453.css"), "\"63e2c453\"");
16*36b5cba2SJason Westover
17*36b5cba2SJason Westover // Vite-style hash in filename.
18*36b5cba2SJason Westover EXPECT_EQ(getStaticEtag("app.DhhjLIym.js"), "\"DhhjLIym\"");
19*36b5cba2SJason Westover
20*36b5cba2SJason Westover // Hash extraction still works when file has multiple dots.
21*36b5cba2SJason Westover EXPECT_EQ(getStaticEtag("vendor.app.DhhjLIym.js"), "\"DhhjLIym\"");
22*36b5cba2SJason Westover
23*36b5cba2SJason Westover // Path prefixes do not affect hash extraction.
24*36b5cba2SJason Westover EXPECT_EQ(getStaticEtag("/usr/share/www/app.63e2c453.css"), "\"63e2c453\"");
25*36b5cba2SJason Westover EXPECT_EQ(getStaticEtag("./public/assets/app.DhhjLIym.js"), "\"DhhjLIym\"");
26*36b5cba2SJason Westover
27*36b5cba2SJason Westover // Too few segments to contain name/hash/extension.
28*36b5cba2SJason Westover EXPECT_EQ(getStaticEtag("nested/dir/vendor.app.DhhjLIym.js"),
29*36b5cba2SJason Westover "\"DhhjLIym\"");
30*36b5cba2SJason Westover EXPECT_EQ(getStaticEtag("app.js"), "");
31*36b5cba2SJason Westover EXPECT_EQ(getStaticEtag("/usr/share/www/app.js"), "");
32*36b5cba2SJason Westover
33*36b5cba2SJason Westover // Hash must be exactly 8 characters.
34*36b5cba2SJason Westover EXPECT_EQ(getStaticEtag("app.63e2c45.css"), "");
35*36b5cba2SJason Westover EXPECT_EQ(getStaticEtag("app.63e2c4537.css"), "");
36*36b5cba2SJason Westover
37*36b5cba2SJason Westover // Empty string and no-dot filenames yield no hash.
38*36b5cba2SJason Westover EXPECT_EQ(getStaticEtag(""), "");
39*36b5cba2SJason Westover EXPECT_EQ(getStaticEtag("appjs"), "");
40*36b5cba2SJason Westover
41*36b5cba2SJason Westover // Mixed-case hex hash still matches under alphanumeric rule.
42*36b5cba2SJason Westover EXPECT_EQ(getStaticEtag("app.63E2C453.css"), "\"63E2C453\"");
43*36b5cba2SJason Westover
44*36b5cba2SJason Westover // Hash must be alphanumeric only.
45*36b5cba2SJason Westover EXPECT_EQ(getStaticEtag("app.63e2c45-.css"), "");
46*36b5cba2SJason Westover EXPECT_EQ(getStaticEtag("app.63e2c45_.css"), "");
47*36b5cba2SJason Westover }
48*36b5cba2SJason Westover
49*36b5cba2SJason Westover } // namespace
50*36b5cba2SJason Westover } // namespace crow::webassets
51