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