defmodule Microwaveprop.ApplicationTest do use ExUnit.Case, async: false describe "build_timestamp/0" do test "returns the compile-time fallback when file and env are absent" do prev_file = Application.get_env(:microwaveprop, :build_timestamp_file, :__unset) prev_env = System.get_env("DEPLOY_TIMESTAMP") Application.put_env(:microwaveprop, :build_timestamp_file, "/nonexistent/path") System.delete_env("DEPLOY_TIMESTAMP") on_exit(fn -> if prev_file == :__unset do Application.delete_env(:microwaveprop, :build_timestamp_file) else Application.put_env(:microwaveprop, :build_timestamp_file, prev_file) end if prev_env, do: System.put_env("DEPLOY_TIMESTAMP", prev_env) end) assert %DateTime{} = Microwaveprop.Application.build_timestamp() end test "reads ISO 8601 timestamp from the configured file" do tmp = Path.join(System.tmp_dir!(), "build_ts_test_#{System.unique_integer([:positive])}") ts = "2026-04-17T18:30:00Z" File.write!(tmp, ts) prev_file = Application.get_env(:microwaveprop, :build_timestamp_file) Application.put_env(:microwaveprop, :build_timestamp_file, tmp) on_exit(fn -> File.rm(tmp) if prev_file, do: Application.put_env(:microwaveprop, :build_timestamp_file, prev_file) end) assert Microwaveprop.Application.build_timestamp() == ~U[2026-04-17 18:30:00Z] end test "falls back to DEPLOY_TIMESTAMP env when file is missing" do prev_file = Application.get_env(:microwaveprop, :build_timestamp_file) Application.put_env(:microwaveprop, :build_timestamp_file, "/nonexistent/path") prev_env = System.get_env("DEPLOY_TIMESTAMP") System.put_env("DEPLOY_TIMESTAMP", "2026-05-01T12:00:00Z") on_exit(fn -> if prev_file, do: Application.put_env(:microwaveprop, :build_timestamp_file, prev_file) if prev_env, do: System.put_env("DEPLOY_TIMESTAMP", prev_env) end) assert Microwaveprop.Application.build_timestamp() == ~U[2026-05-01 12:00:00Z] end test "ignores file contents that are not valid ISO 8601" do tmp = Path.join(System.tmp_dir!(), "build_ts_bad_#{System.unique_integer([:positive])}") File.write!(tmp, "not-a-timestamp") prev_file = Application.get_env(:microwaveprop, :build_timestamp_file) Application.put_env(:microwaveprop, :build_timestamp_file, tmp) prev_env = System.get_env("DEPLOY_TIMESTAMP") System.delete_env("DEPLOY_TIMESTAMP") on_exit(fn -> File.rm(tmp) if prev_file, do: Application.put_env(:microwaveprop, :build_timestamp_file, prev_file) if prev_env, do: System.put_env("DEPLOY_TIMESTAMP", prev_env) end) assert %DateTime{} = Microwaveprop.Application.build_timestamp() end end end