#include "timezone_helper.h" #include #include using namespace radiantwave::timezone; TEST(TimeZoneTest, GetStandardTimeZonesNonEmpty) { const auto& countries = getStandardTimeZones(); EXPECT_FALSE(countries.empty()); bool found_us = false; bool found_utc = false; for (const auto& c : countries) { if (c.country_name == "United States") found_us = true; if (c.country_name == "Coordinated Universal Time") found_utc = true; } EXPECT_TRUE(found_us); EXPECT_TRUE(found_utc); } TEST(TimeZoneTest, UtcTimestampFormat) { std::string iso = getUtcTimestampIso(); EXPECT_FALSE(iso.empty()); EXPECT_NE(iso.find("UTC"), std::string::npos); } TEST(TimeZoneTest, CurrentLocalMinutesInRangeAndMatchesUtc) { int minutes = currentLocalMinutes("UTC"); EXPECT_GE(minutes, 0); EXPECT_LT(minutes, 1440); // Cross-check against the UTC wall clock. The two calls happen within the // same second, so a minute-boundary rollover is vanishingly unlikely. time_t now = std::time(nullptr); struct tm gmt_buf; gmtime_r(&now, &gmt_buf); EXPECT_EQ(minutes, gmt_buf.tm_hour * 60 + gmt_buf.tm_min); // A timezone that is known to differ from UTC must still be in range. int ny = currentLocalMinutes("America/New_York"); EXPECT_GE(ny, 0); EXPECT_LT(ny, 1440); } TEST(TimeZoneTest, FormatUtcToTimezone) { // 2026-07-24 12:00:00 UTC // Fixed epoch timestamp: 1784808000 time_t fixed_utc = 1784808000; std::string formatted_ny = formatUtcToTimezone(fixed_utc, "America/New_York", "%Y-%m-%d %H:%M:%S"); std::string formatted_utc = formatUtcToTimezone(fixed_utc, "UTC", "%Y-%m-%d %H:%M:%S"); EXPECT_FALSE(formatted_ny.empty()); EXPECT_EQ(formatted_utc, "2026-07-23 12:00:00"); }