Verified Commit d7bdd1f5 authored by Hercules Merscher's avatar Hercules Merscher 🌴
Browse files

fix: Adding regression tests for format_time! in hash messages

parent 27ff1033
Loading
Loading
Loading
Loading
+31 −22
Original line number Diff line number Diff line
@@ -195,34 +195,31 @@ RSpec.describe Labkit::Logging::JsonLogger do
      expect(data["timestamp"]).to eq(expected_iso8601)
    end

    it "formats Time values in nested hashes" do
      output = subject.format_message("INFO", now, "test", {
        event: {
          created_at: time_value,
          metadata: {
            updated_at: time_value
          }
        }
      })
    it "formats Time objects in hash messages to ISO8601" do
      time_value = Time.now
      output = subject.format_message("INFO", now, "test", { event_time: time_value })
      data = JSON.parse(output)

      expect(data["event"]["created_at"]).to eq(expected_iso8601)
      expect(data["event"]["metadata"]["updated_at"]).to eq(expected_iso8601)
      expect(data["event_time"]).to eq(time_value.utc.iso8601(3))
      expect(data["event_time"]).to be_a(String)
    end

    it "formats DateTime values in nested hashes" do
      output = subject.format_message("INFO", now, "test", {
        event: {
          created_at: datetime_value,
          metadata: {
            updated_at: datetime_value
          }
        }
      })
    it "formats nested Time objects in hash messages" do
      time_value = Time.now
      output = subject.format_message("INFO", now, "test", { nested: { event_time: time_value } })
      data = JSON.parse(output)

      expect(data["nested"]["event_time"]).to eq(time_value.utc.iso8601(3))
      expect(data["nested"]["event_time"]).to be_a(String)
    end

    it "formats nested DateTime objects in hash messages" do
      time_value = DateTime.now
      output = subject.format_message("INFO", now, "test", { nested: { event_time: time_value } })
      data = JSON.parse(output)

      expect(data["event"]["created_at"]).to eq(expected_iso8601)
      expect(data["event"]["metadata"]["updated_at"]).to eq(expected_iso8601)
      expect(data["nested"]["event_time"]).to eq(time_value.to_time.utc.iso8601(3))
      expect(data["nested"]["event_time"]).to be_a(String)
    end

    it "formats Time values in arrays" do
@@ -292,6 +289,18 @@ RSpec.describe Labkit::Logging::JsonLogger do

      expect(data["timestamp"]).to eq("2024-01-15T10:30:45.123Z")
    end

    it "does not corrupt context when formatting hash messages with Time values" do
      time_value = Time.now
      Labkit::Context.with_context("request_id" => "12345") do
        output = subject.format_message("INFO", now, "test", { event_time: time_value })
        data = JSON.parse(output)

        expect(data["#{Labkit::Context::LOG_KEY}.request_id"]).to eq("12345")
        expect(data["time"]).to eq(now.utc.iso8601(3))
        expect(data["event_time"]).to eq(time_value.utc.iso8601(3))
      end
    end
  end

  describe "reserved log keys" do