Files
bDS2/test/bds/release_packaging_test.exs
2026-04-24 11:51:44 +02:00

74 lines
2.7 KiB
Elixir

defmodule BDS.ReleasePackagingTest do
use ExUnit.Case, async: false
alias BDS.ReleasePackaging
setup do
base_dir = Path.join(System.tmp_dir!(), "bds-release-packaging-#{System.unique_integer([:positive])}")
output_dir = Path.join(base_dir, "dist")
app_release = Path.join(base_dir, "rel/bds")
mcp_release = Path.join(base_dir, "rel/bds_mcp")
File.mkdir_p!(Path.join(app_release, "bin"))
File.mkdir_p!(Path.join(mcp_release, "mcp/bin"))
File.write!(Path.join(app_release, "bin/bds"), "app-release")
File.write!(Path.join(mcp_release, "mcp/bin/bds-mcp"), "mcp-release")
on_exit(fn -> File.rm_rf(base_dir) end)
%{base_dir: base_dir, output_dir: output_dir, app_release: app_release, mcp_release: mcp_release}
end
test "build metadata uses a clean future-app payload layout" do
metadata = ReleasePackaging.build_metadata(:macos, "0.1.0", "/tmp/out")
assert metadata.platform == :macos
assert metadata.version == "0.1.0"
assert metadata.archive_path =~ ".tar.gz"
assert metadata.payload_root =~ "bds2-macos-0.1.0"
assert metadata.resources_root == Path.join(metadata.payload_root, "resources")
assert metadata.mcp_root == Path.join(metadata.payload_root, "resources/mcp")
assert metadata.app_root == Path.join(metadata.payload_root, "app")
end
test "package creates payload manifest and copies app and mcp releases", context do
assert {:ok, metadata} =
ReleasePackaging.package(
platform: :macos,
version: "0.1.0",
output_dir: context.output_dir,
app_release_source: context.app_release,
mcp_release_source: context.mcp_release
)
assert File.exists?(Path.join(metadata.app_root, "bin/bds"))
assert File.exists?(Path.join(metadata.mcp_root, "bin/bds-mcp"))
assert File.exists?(Path.join(metadata.payload_root, "manifest.json"))
manifest = metadata.payload_root |> Path.join("manifest.json") |> File.read!() |> Jason.decode!()
assert manifest == %{
"platform" => "macos",
"version" => "0.1.0",
"layout" => %{
"app" => "app",
"resources" => "resources",
"mcp" => "resources/mcp"
}
}
end
test "package creates a platform archive for redistribution", context do
assert {:ok, metadata} =
ReleasePackaging.package(
platform: :windows,
version: "0.1.0",
output_dir: context.output_dir,
app_release_source: context.app_release,
mcp_release_source: context.mcp_release
)
assert File.exists?(metadata.archive_path)
assert String.ends_with?(metadata.archive_path, ".zip")
end
end