1import {
2 activeReplicaRegions,
3 observedRegion,
4 regionPlacementPatch,
5 serviceRegionPlacement,
6} from "@/Railway/ServiceRegion.ts";
7import { describe, expect, it } from "alchemy-test";
8
9describe("Railway service region placement", () => {
10 it("reads deploy.multiRegionConfig and ignores the legacy region field", () => {
11 const placement = serviceRegionPlacement(
12 {
13 services: {
14 api: {
15 deploy: {
16 region: "us-west2",
17 multiRegionConfig: {
18 "asia-southeast1-eqsg3a": { numReplicas: 1 },
19 "europe-west4-drams3a": null,
20 },
21 },
22 },
23 },
24 },
25 "api",
26 );
27
28 expect(activeReplicaRegions(placement)).toEqual([
29 { region: "asia-southeast1-eqsg3a", replicas: 1 },
30 ]);
31 expect(observedRegion(placement, null)).toEqual("asia-southeast1-eqsg3a");
32 });
33
34 it("moves the workspace default onto the requested region", () => {
35 const placement = {
36 "asia-southeast1-eqsg3a": { numReplicas: 1 },
37 };
38
39 expect(regionPlacementPatch("europe-west4-drams3a", placement)).toEqual({
40 "europe-west4-drams3a": { numReplicas: 1 },
41 "asia-southeast1-eqsg3a": null,
42 });
43 });
44
45 it("keeps an existing replica count on the target region", () => {
46 expect(
47 regionPlacementPatch("us-west2", {
48 "us-west2": { numReplicas: 3 },
49 "us-east4-eqdc4a": { numReplicas: 1 },
50 }),
51 ).toEqual({
52 "us-west2": { numReplicas: 3 },
53 "us-east4-eqdc4a": null,
54 });
55 });
56
57 it("leaves a service that is already only in the requested region", () => {
58 expect(
59 regionPlacementPatch("us-west2", {
60 "us-west2": { numReplicas: 2 },
61 "europe-west4-drams3a": null,
62 }),
63 ).toBeUndefined();
64 });
65
66 it("uses the legacy replica count when placement is empty", () => {
67 expect(regionPlacementPatch("us-west2", {}, 4)).toEqual({
68 "us-west2": { numReplicas: 4 },
69 });
70 });
71});