fix: invoice contract test

This commit is contained in:
johnyeo
2026-06-09 16:55:28 +01:00
parent f0196b455a
commit c2ca3e1c90
67 changed files with 2871 additions and 645 deletions

View File

@@ -1,7 +1,10 @@
import type { BaseApiCustomerV5 } from "@api/customers/apiCustomerV5.js";
import type { ApiCustomerSchedule } from "@api/customers/components/apiCustomerSchedule";
import type { ApiEntityV2 } from "@api/entities/apiEntityV2.js";
import type { ApiFeatureV1 } from "@api/features/apiFeatureV1.js";
import type { ApiPlanV1 } from "@api/products/apiPlanV1.js";
import type { AgentRules } from "@autumn/shared";
import { agentRules as agentRulesFixture } from "./agentRules/index.js";
import {
balances as balanceFixtures,
customers as customerFixtures,
@@ -18,7 +21,14 @@ import {
plan as planFixture,
planList as planListFixture,
} from "./plans/index.js";
import type { EvalSetup, EvalSetupIds, PlanRef, ScheduleRef } from "./types.js";
import { entities as entityFixtures } from "./entities/index.js";
import type {
EntityRef,
EvalSetup,
EvalSetupIds,
PlanRef,
ScheduleRef,
} from "./types.js";
const flattenRecordValues = <Value>(record: Record<string, Value | Value[]>) =>
Object.values(record).flatMap((value) =>
@@ -40,13 +50,16 @@ const setupIds = <
Plans extends Record<string, PlanRef>,
Customers extends Record<string, BaseApiCustomerV5 | BaseApiCustomerV5[]>,
Schedules extends Record<string, ScheduleRef>,
Entities extends Record<string, EntityRef>,
>({
customers,
entities,
features,
plans,
schedules,
}: {
customers: Customers;
entities: Entities;
features: Features;
plans: Plans;
schedules: Schedules;
@@ -56,7 +69,14 @@ const setupIds = <
features: refIds(features),
plans: refIds(plans),
schedules: refIds(schedules),
}) as unknown as EvalSetupIds<Features, Plans, Customers, Schedules>;
entities: refIds(entities),
}) as unknown as EvalSetupIds<
Features,
Plans,
Customers,
Schedules,
Entities
>;
/**
* Compose a mock Autumn org for evals from keyed feature, plan, and customer refs.
@@ -67,14 +87,22 @@ export const createSetup = <
Plans extends Record<string, PlanRef>,
Customers extends Record<string, BaseApiCustomerV5 | BaseApiCustomerV5[]>,
Schedules extends Record<string, ScheduleRef> = Record<string, never>,
Entities extends Record<string, EntityRef> = Record<string, never>,
>({
agentRules: createAgentRules = ({ agentRules }) => agentRules.base(),
customers: createCustomers,
entities: createEntities,
features: createFeatures,
plans: createPlans,
schedules: createSchedules,
tag,
}: {
tag: string;
agentRules?: ({
agentRules,
}: {
agentRules: typeof agentRulesFixture;
}) => AgentRules;
features: ({
featureList,
features,
@@ -121,7 +149,19 @@ export const createSetup = <
plans: Plans;
schedules: typeof scheduleFixtures;
}) => Schedules;
}): EvalSetup<Features, Plans, Customers, Schedules> => {
entities?: ({
customers,
entities,
features,
}: {
customers: Customers;
entities: typeof entityFixtures;
features: Features;
}) => Entities;
}): EvalSetup<Features, Plans, Customers, Schedules, Entities> => {
const agentRuleRefs = createAgentRules({
agentRules: agentRulesFixture,
});
const featureRefs = createFeatures({
featureList: featureListFixture,
features: featureFixtures,
@@ -147,26 +187,37 @@ export const createSetup = <
plans: planRefs,
schedules: scheduleFixtures,
});
const entityRefs =
createEntities?.({
customers: customerRefs,
entities: entityFixtures,
features: featureRefs,
}) ?? ({} as Entities);
return {
tag,
ids: setupIds({
customers: customerRefs,
entities: entityRefs,
features: featureRefs,
plans: planRefs,
schedules: (scheduleRefs ?? {}) as Schedules,
}),
agentRules: agentRuleRefs,
features: Object.values(featureRefs),
plans: flattenRecordValues<ApiPlanV1>(planRefs),
customers: flattenRecordValues<BaseApiCustomerV5>(customerRefs),
schedules: flattenRecordValues<ApiCustomerSchedule>(
(scheduleRefs ?? {}) as Schedules,
),
entities: flattenRecordValues<ApiEntityV2>(entityRefs),
refs: {
agentRules: agentRuleRefs,
features: featureRefs,
plans: planRefs,
customers: customerRefs,
schedules: (scheduleRefs ?? {}) as Schedules,
entities: entityRefs,
},
};
};
@@ -175,8 +226,10 @@ export const createSetup = <
export const withCustomers = <
Setup extends EvalSetup,
Customers extends Record<string, BaseApiCustomerV5 | BaseApiCustomerV5[]>,
Entities extends Record<string, EntityRef> = Record<string, never>,
>({
customers: createCustomers,
entities: createEntities,
setup,
}: {
setup: Setup;
@@ -195,11 +248,21 @@ export const withCustomers = <
plans: Setup["refs"]["plans"];
subscriptions: typeof subscriptionFixtures;
}) => Customers;
entities?: ({
customers,
entities,
features,
}: {
customers: Customers;
entities: typeof entityFixtures;
features: Setup["refs"]["features"];
}) => Entities;
}): EvalSetup<
Setup["refs"]["features"],
Setup["refs"]["plans"],
Customers,
Setup["refs"]["schedules"]
Setup["refs"]["schedules"],
Setup["refs"]["entities"] & Entities
> => {
const customerRefs = createCustomers({
balances: balanceFixtures,
@@ -209,11 +272,22 @@ export const withCustomers = <
plans: setup.refs.plans,
subscriptions: subscriptionFixtures,
});
const entityRefs =
createEntities?.({
customers: customerRefs,
entities: entityFixtures,
features: setup.refs.features,
}) ?? ({} as Entities);
const allEntityRefs = {
...setup.refs.entities,
...entityRefs,
} as Setup["refs"]["entities"] & Entities;
return {
...setup,
ids: setupIds({
customers: customerRefs,
entities: allEntityRefs,
features: setup.refs.features,
plans: setup.refs.plans,
schedules: setup.refs.schedules,
@@ -222,9 +296,14 @@ export const withCustomers = <
...setup.customers,
...flattenRecordValues<BaseApiCustomerV5>(customerRefs),
],
entities: [
...setup.entities,
...flattenRecordValues<ApiEntityV2>(entityRefs),
],
refs: {
...setup.refs,
customers: customerRefs,
entities: allEntityRefs,
},
};
};