xref: /openbmc/bmcweb/test/include/webassets_test.cpp (revision 36b5cba2d032908f7e2d5355c512c7541fad4861)
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