;
+
+export const getDiffSummary: GetDiffSummary = async (params) => {
+ const { data, errors } = await getDiffTreeSummaryFromApi(params);
+
+ if (errors) {
+ throw new Error(errors.map((e) => e.message).join("; "));
+ }
+
+ return (data.DiffTreeSummary as GetDiffSummaryResponse) ?? null;
+};
diff --git a/frontend/app/src/entities/diff/node-diff/index.tsx b/frontend/app/src/entities/diff/node-diff/index.tsx
index 979929da09..2d8d8c95b8 100644
--- a/frontend/app/src/entities/diff/node-diff/index.tsx
+++ b/frontend/app/src/entities/diff/node-diff/index.tsx
@@ -9,7 +9,9 @@ import { DateDisplay } from "@/shared/components/display/date-display";
import ErrorScreen from "@/shared/components/errors/error-screen";
import { LoadingIndicator } from "@/shared/components/loading/loading-indicator";
+import type { GetDiffSummaryParams } from "@/entities/diff/domain/get-diff-summary";
import { useDiffTreeInfiniteQuery } from "@/entities/diff/domain/get-diff-tree";
+import { DiffNode } from "@/entities/diff/node-diff/node";
import { DIFF_STATUS, type DiffNode as DiffNodeType } from "@/entities/diff/node-diff/types";
import { buildFilters } from "@/entities/diff/node-diff/utils";
import { DiffComputing } from "@/entities/diff/ui/diff-computing";
@@ -19,29 +21,24 @@ import { DiffRebaseButton } from "@/entities/diff/ui/diff-rebase-button";
import { DiffRefreshButton } from "@/entities/diff/ui/diff-refresh-button";
import DiffTree from "@/entities/diff/ui/diff-tree";
import { proposedChangedState } from "@/entities/proposed-changes/stores/proposedChanges.atom";
-
-import { type DiffFilter, ProposedChangeDiffFilter } from "../../proposed-changes/ui/diff-filter";
-import { DiffNode } from "./node";
+import { DiffFilter } from "@/entities/proposed-changes/ui/diff-filter";
export const DiffContext = createContext({});
-type NodeDiffProps = {
- filters: DiffFilter;
- branchName: string;
-};
+type NodeDiffProps = GetDiffSummaryParams;
-export const NodeDiff = ({ branchName, filters }: NodeDiffProps) => {
+export const NodeDiff = ({ branch, filters }: NodeDiffProps) => {
const [qspStatus] = useQueryState(QSP.STATUS);
const proposedChangesDetails = useAtomValue(proposedChangedState);
- const branch = proposedChangesDetails?.source_branch?.value || branchName; // Used in proposed changes view and branch view
+ const branchName: string = proposedChangesDetails?.source_branch?.value || branch; // Used in proposed changes view and branch view
// Get filters merged with status filter
const finalFilters = buildFilters(filters, qspStatus);
const { data, isPending, error, hasNextPage, fetchNextPage, isFetchingNextPage } =
useDiffTreeInfiniteQuery({
- branchName: branch,
+ branchName,
filters: finalFilters,
});
@@ -66,14 +63,14 @@ export const NodeDiff = ({ branchName, filters }: NodeDiffProps) => {
if (!firstPageNodes) {
return (
);
}
if (!qspStatus && firstPageNodes.nodes?.length === 0) {
- return ;
+ return ;
}
const nodes =
@@ -89,12 +86,12 @@ export const NodeDiff = ({ branchName, filters }: NodeDiffProps) => {
return (
diff --git a/frontend/app/src/entities/diff/node-diff/utils.tsx b/frontend/app/src/entities/diff/node-diff/utils.tsx
index 3ced9e71f6..386ecd7fa8 100644
--- a/frontend/app/src/entities/diff/node-diff/utils.tsx
+++ b/frontend/app/src/entities/diff/node-diff/utils.tsx
@@ -6,8 +6,6 @@ import { classNames, warnUnexpectedType } from "@/shared/utils/common";
import { capitalizeFirstLetter } from "@/shared/utils/string";
import { DIFF_STATUS, type DiffProperty, type DiffStatus } from "@/entities/diff/node-diff/types";
-import type { DiffFilter } from "@/entities/proposed-changes/ui/diff-filter";
-
import {
BadgeAdded,
BadgeConflict,
@@ -16,7 +14,8 @@ import {
BadgeUnchanged,
BadgeUpdated,
type DiffBadgeProps,
-} from "../ui/diff-badge";
+} from "@/entities/diff/ui/diff-badge";
+import type { DiffFilter } from "@/entities/proposed-changes/ui/diff-filter";
export const diffBadges: { [key: string]: BadgeType } = {
ADDED: BadgeAdded,
diff --git a/frontend/app/src/entities/diff/ui/diff-badge.tsx b/frontend/app/src/entities/diff/ui/diff-badge.tsx
index 167a660663..db3b38e92f 100644
--- a/frontend/app/src/entities/diff/ui/diff-badge.tsx
+++ b/frontend/app/src/entities/diff/ui/diff-badge.tsx
@@ -8,10 +8,6 @@ export interface DiffBadgeProps extends BadgeProps {
icon?: string;
}
-type CloseBadgeProps = {
- className?: string;
-};
-
export type BadgeType =
| typeof BadgeAdded
| typeof BadgeRemoved
@@ -53,10 +49,6 @@ export const BadgeAdded = ({ className, ...props }: DiffBadgeProps) => {
);
};
-export const CloseBadgeAdded = () => {
- return
;
-};
-
export const BadgeRemoved = ({ className, ...props }: DiffBadgeProps) => {
return (
{
);
};
-export const CloseBadgeRemoved = () => {
- return ;
-};
-
export const BadgeConflict = ({ className, ...props }: DiffBadgeProps) => {
return (
{
);
};
-export const CloseBadgeConflict = () => {
- return ;
-};
-
export const BadgeUpdated = ({ className, ...props }: DiffBadgeProps) => {
return (
{
/>
);
};
-
-export const CloseBadgeUpdated = () => {
- return ;
-};
-
-const CloseBadge = ({ className }: CloseBadgeProps) => {
- return (
-
-
-
- );
-};
diff --git a/frontend/app/src/entities/proposed-changes/api/getProposedChangesDiffSummary.ts b/frontend/app/src/entities/proposed-changes/api/getProposedChangesDiffSummary.ts
deleted file mode 100644
index 21ef69a0c8..0000000000
--- a/frontend/app/src/entities/proposed-changes/api/getProposedChangesDiffSummary.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { gql } from "@apollo/client";
-
-export const getProposedChangesDiffSummary = gql`
- query GET_PROPOSED_CHANGES_DIFF_SUMMARY($branch: String) {
- DiffTreeSummary(branch: $branch) {
- num_added
- num_updated
- num_removed
- num_conflicts
- }
- }
-`;
diff --git a/frontend/app/src/entities/proposed-changes/ui/diff-filter.tsx b/frontend/app/src/entities/proposed-changes/ui/diff-filter.tsx
index c0a51de413..b8a3237664 100644
--- a/frontend/app/src/entities/proposed-changes/ui/diff-filter.tsx
+++ b/frontend/app/src/entities/proposed-changes/ui/diff-filter.tsx
@@ -1,62 +1,36 @@
-import { useQuery } from "@apollo/client";
import { parseAsString, useQueryState } from "nuqs";
-import { toast } from "react-toastify";
import { QSP } from "@/config/qsp";
-import { Button, type ButtonProps } from "@/shared/components/buttons/button-primitive";
import ErrorScreen from "@/shared/components/errors/error-screen";
-import { ALERT_TYPES, Alert } from "@/shared/components/ui/alert";
-import { classNames } from "@/shared/utils/common";
-import { DIFF_STATUS } from "@/entities/diff/node-diff/types";
-import { DiffBadge } from "@/entities/diff/node-diff/utils";
+import type { GetDiffSummaryParams } from "@/entities/diff/domain/get-diff-summary";
+import { useGetDiffSummary } from "@/entities/diff/domain/get-diff-summary.query";
+import { DIFF_STATUS, type DiffStatus } from "@/entities/diff/node-diff/types";
+import { DiffSummarySkeleton } from "@/entities/proposed-changes/ui/diff-summary/diff-summary-skeleton";
import {
- CloseBadgeAdded,
- CloseBadgeConflict,
- CloseBadgeRemoved,
- CloseBadgeUpdated,
-} from "@/entities/diff/ui/diff-badge";
-import { getProposedChangesDiffSummary } from "@/entities/proposed-changes/api/getProposedChangesDiffSummary";
+ DiffSummaryTag,
+ DiffSummaryTagGroup,
+} from "@/entities/proposed-changes/ui/diff-summary/diff-summary-tag-group";
-export type DiffFilter = {
- namespace?: {
- excludes?: string[];
- includes?: string[];
- };
- status?: {
- excludes?: string[];
- includes?: string[];
- };
-};
-
-type ProposedChangeDiffFilterProps = {
- branch: string;
- filters?: DiffFilter;
-};
-
-export const ProposedChangeDiffFilter = ({ branch, filters }: ProposedChangeDiffFilterProps) => {
- const [qsp, setQsp] = useQueryState(QSP.STATUS, parseAsString.withOptions({ shallow: false }));
+type DiffFilterProps = GetDiffSummaryParams;
- const { error, data = {} } = useQuery(getProposedChangesDiffSummary, {
- skip: !branch,
- variables: { branch, filters },
- context: {
- processErrorMessage: (message: string) => {
- // If the branch is not found, then do not display alert
- if (message.includes("not found")) return;
+export function DiffFilter({ branch, filters }: DiffFilterProps) {
+ const [statusFilterQSP, setQsp] = useQueryState(
+ QSP.STATUS,
+ parseAsString.withOptions({ shallow: false })
+ );
- toast(, {
- toastId: "alert-error",
- });
- },
- },
- });
+ const { error, data, isPending } = useGetDiffSummary({ branch, filters });
- const handleFilter = (value: string) => {
- setQsp(value === qsp ? null : value);
+ const handleFilter = (value: DiffStatus) => {
+ setQsp(value === statusFilterQSP ? null : value);
};
+ if (isPending) {
+ return ;
+ }
+
if (error) {
return (
-
+ handleFilter(DIFF_STATUS.ADDED)}
/>
- handleFilter(DIFF_STATUS.REMOVED)}
/>
- handleFilter(DIFF_STATUS.UPDATED)}
/>
- handleFilter(DIFF_STATUS.CONFLICT)}
/>
-
+
);
-};
-
-interface FilterButtonProps extends ButtonProps {
- status: string;
- count: number;
- currentFilter: string | null | undefined;
- onFilter: (value: string) => void;
}
-
-const FilterButton = ({ status, count, currentFilter, onFilter, ...props }: FilterButtonProps) => {
- const isMuted = !!currentFilter && currentFilter !== status;
- const isDisabled = !count && currentFilter !== status;
-
- const CloseBadge =
- status === DIFF_STATUS.ADDED
- ? CloseBadgeAdded
- : status === DIFF_STATUS.REMOVED
- ? CloseBadgeRemoved
- : status === DIFF_STATUS.UPDATED
- ? CloseBadgeUpdated
- : status === DIFF_STATUS.CONFLICT
- ? CloseBadgeConflict
- : null;
-
- return (
-
- );
-};
diff --git a/frontend/app/src/entities/proposed-changes/ui/diff-summary.tsx b/frontend/app/src/entities/proposed-changes/ui/diff-summary.tsx
deleted file mode 100644
index 47e1683c1d..0000000000
--- a/frontend/app/src/entities/proposed-changes/ui/diff-summary.tsx
+++ /dev/null
@@ -1,120 +0,0 @@
-import { useQuery } from "@apollo/client";
-import type React from "react";
-import { Link } from "react-router";
-import { toast } from "react-toastify";
-
-import { QSP } from "@/config/qsp";
-
-import { constructPath } from "@/shared/api/rest/fetch";
-import ErrorScreen from "@/shared/components/errors/error-screen";
-import { ALERT_TYPES, Alert } from "@/shared/components/ui/alert";
-
-import { DiffBadge } from "@/entities/diff/node-diff/utils";
-import { getProposedChangesDiffSummary } from "@/entities/proposed-changes/api/getProposedChangesDiffSummary";
-
-import { DIFF_STATUS, type DiffStatus } from "../../diff/node-diff/types";
-
-interface DiffTreeSummary {
- num_added: number;
- num_removed: number;
- num_updated: number;
- num_conflicts: number;
-}
-
-interface ProposedChangeDiffSummaryProps {
- branchName: string;
- proposedChangeId: string;
-}
-
-const BadgeLink: React.FC<{
- status: DiffStatus;
- count: number | undefined;
- proposedChangeId: string;
-}> = ({ status, count, proposedChangeId }) => {
- const proposedChangeDetailsPath = `/proposed-changes/${proposedChangeId}`;
-
- return (
-
-
{count}
-
- );
-};
-
-export const ProposedChangeDiffSummary: React.FC
= ({
- proposedChangeId,
- branchName,
-}) => {
- const { error, data, loading } = useQuery<{ DiffTreeSummary: DiffTreeSummary }>(
- getProposedChangesDiffSummary,
- {
- skip: !branchName,
- variables: { branch: branchName },
- context: {
- processErrorMessage: (message: string) => {
- if (!message.includes("not found")) {
- toast(, {
- toastId: "alert-error",
- });
- }
- },
- },
- }
- );
-
- if (loading) {
- return ;
- }
-
- if (error) {
- return (
-
- );
- }
-
- const { DiffTreeSummary } = data || {};
-
- return (
-
-
-
-
-
-
- );
-};
-
-const DiffSummarySkeleton: React.FC = () => {
- return (
-
- {[...Array(4)].map((_, index) => (
-
- ))}
-
- );
-};
diff --git a/frontend/app/src/entities/proposed-changes/ui/diff-summary/diff-summary-skeleton.tsx b/frontend/app/src/entities/proposed-changes/ui/diff-summary/diff-summary-skeleton.tsx
new file mode 100644
index 0000000000..c6e41cc598
--- /dev/null
+++ b/frontend/app/src/entities/proposed-changes/ui/diff-summary/diff-summary-skeleton.tsx
@@ -0,0 +1,11 @@
+import { Row } from "@/shared/components/container";
+
+export function DiffSummarySkeleton() {
+ return (
+
+ {[...Array(4)].map((_, index) => (
+
+ ))}
+
+ );
+}
diff --git a/frontend/app/src/entities/proposed-changes/ui/diff-summary/diff-summary-tag-group.tsx b/frontend/app/src/entities/proposed-changes/ui/diff-summary/diff-summary-tag-group.tsx
new file mode 100644
index 0000000000..7596d8558e
--- /dev/null
+++ b/frontend/app/src/entities/proposed-changes/ui/diff-summary/diff-summary-tag-group.tsx
@@ -0,0 +1,129 @@
+import { Icon } from "@iconify-icon/react";
+import { cva, type VariantProps } from "class-variance-authority";
+import { CircleMinusIcon, CirclePlusIcon, RefreshCwIcon, TriangleAlertIcon } from "lucide-react";
+import {
+ Tag,
+ TagGroup,
+ type TagGroupProps,
+ TagList,
+ type TagListProps,
+ type TagProps,
+} from "react-aria-components";
+
+import { disabledStyle, focusVisibleStyle } from "@/shared/components/style-rac";
+import { classNames } from "@/shared/utils/common";
+
+export interface DiffSummaryProps
+ extends Omit,
+ Pick, "items" | "children" | "renderEmptyState"> {}
+
+export function DiffSummaryTagGroup({
+ items,
+ children,
+ renderEmptyState,
+ ...props
+}: DiffSummaryProps) {
+ return (
+
+
+
+ {children}
+
+
+
+ );
+}
+
+const diffSummaryTagStyles = cva(
+ [
+ disabledStyle,
+ focusVisibleStyle,
+ "relative inline-flex cursor-pointer items-center gap-1 rounded-full border border-transparent p-1 text-xs",
+ ],
+ {
+ variants: {
+ variant: {
+ added: "bg-green-200 text-green-800",
+ removed: "bg-red-200 text-red-800",
+ updated: "bg-blue-200 text-blue-800",
+ conflicts: "bg-yellow-200 text-yellow-800",
+ },
+ isMuted: {
+ true: "opacity-50",
+ },
+ },
+ }
+);
+
+export interface DiffSummaryTagProps extends VariantProps, TagProps {
+ count: number;
+ isClosable?: boolean;
+}
+
+export function DiffSummaryTag({
+ count,
+ variant,
+ className,
+ isClosable,
+ isMuted,
+ children,
+ ...props
+}: DiffSummaryTagProps) {
+ return (
+
+
+ {count}
+ {isClosable && }
+
+ );
+}
+
+export function DiffSummaryIcon({
+ variant,
+ ...props
+}: Pick, "variant">) {
+ const className = "size-3";
+
+ switch (variant) {
+ case "added":
+ return ;
+ case "removed":
+ return ;
+ case "updated":
+ return ;
+ case "conflicts":
+ return ;
+ default:
+ return null;
+ }
+}
+
+const diffSummaryCloseStyles = cva(
+ "-top-2 -right-2 absolute flex items-center justify-center rounded-full border-2 border-white",
+ {
+ variants: {
+ variant: {
+ added: "bg-green-200 text-green-800",
+ removed: "bg-red-200 text-red-800",
+ updated: "bg-blue-200 text-blue-800",
+ conflicts: "bg-yellow-200 text-yellow-800",
+ },
+ },
+ }
+);
+
+export interface DiffSummaryCloseProps
+ extends React.HTMLProps,
+ VariantProps {}
+
+export function DiffSummaryClose({ className, variant, ...props }: DiffSummaryCloseProps) {
+ return (
+
+
+
+ );
+}
diff --git a/frontend/app/src/entities/proposed-changes/ui/diff-summary/proposed-change-diff-summary.tsx b/frontend/app/src/entities/proposed-changes/ui/diff-summary/proposed-change-diff-summary.tsx
new file mode 100644
index 0000000000..069ba0f320
--- /dev/null
+++ b/frontend/app/src/entities/proposed-changes/ui/diff-summary/proposed-change-diff-summary.tsx
@@ -0,0 +1,81 @@
+import { QSP } from "@/config/qsp";
+
+import { constructPath } from "@/shared/api/rest/fetch";
+import ErrorScreen from "@/shared/components/errors/error-screen";
+
+import { useGetDiffSummary } from "@/entities/diff/domain/get-diff-summary.query";
+import { DIFF_STATUS } from "@/entities/diff/node-diff/types";
+import { DiffSummarySkeleton } from "@/entities/proposed-changes/ui/diff-summary/diff-summary-skeleton";
+import {
+ DiffSummaryTag,
+ DiffSummaryTagGroup,
+} from "@/entities/proposed-changes/ui/diff-summary/diff-summary-tag-group";
+
+interface ProposedChangeDiffSummaryProps {
+ branchName: string;
+ proposedChangeId: string;
+}
+
+export function ProposedChangeDiffSummary({
+ proposedChangeId,
+ branchName,
+}: ProposedChangeDiffSummaryProps) {
+ const { error, data, isPending } = useGetDiffSummary({ branch: branchName });
+
+ if (isPending) {
+ return ;
+ }
+
+ if (error) {
+ return (
+
+ );
+ }
+
+ if (!data) {
+ return null;
+ }
+
+ const proposedChangeDetailsPath = `/proposed-changes/${proposedChangeId}`;
+
+ return (
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/app/src/entities/proposed-changes/ui/proposed-change-item.tsx b/frontend/app/src/entities/proposed-changes/ui/proposed-change-item.tsx
index d9db365f1a..2bb49e8953 100644
--- a/frontend/app/src/entities/proposed-changes/ui/proposed-change-item.tsx
+++ b/frontend/app/src/entities/proposed-changes/ui/proposed-change-item.tsx
@@ -1,7 +1,7 @@
import { Icon } from "@iconify-icon/react";
import { Link } from "react-router";
-import { ARTIFACT_OBJECT, CHECK_OBJECT, TASK_OBJECT } from "@/config/constants";
+import { CHECK_OBJECT, TASK_OBJECT } from "@/config/constants";
import { constructPath } from "@/shared/api/rest/fetch";
import { DateDisplay } from "@/shared/components/display/date-display";
@@ -12,7 +12,7 @@ import { classNames } from "@/shared/utils/common";
import { useObjectsCount } from "@/entities/nodes/object/domain/get-objects-count.query";
import { useObjectTableContext } from "@/entities/nodes/object/ui/object-table/object-table-context";
import type { ProposedChangeItem } from "@/entities/proposed-changes/domain/get-proposed-changes";
-import { ProposedChangeDiffSummary } from "@/entities/proposed-changes/ui/diff-summary";
+import { ProposedChangeDiffSummary } from "@/entities/proposed-changes/ui/diff-summary/proposed-change-diff-summary";
import { ProposedChangesActionCell } from "@/entities/proposed-changes/ui/proposed-changes-actions-cell";
import { useSchema } from "@/entities/schema/ui/hooks/useSchema";
@@ -131,7 +131,6 @@ const ProposedChangesData = ({
@@ -161,22 +160,6 @@ const ProposedChangesChecks = ({ validations }: { validations: number }) => {
);
};
-const ProposedChangesArtifacts = ({ id }: { id: string }) => {
- const { schema } = useSchema(ARTIFACT_OBJECT);
- const { data } = useObjectsCount({
- objectKind: ARTIFACT_OBJECT,
- filters: [{ name: "object__ids", value: [id] }],
- });
-
- return (
-
-
- {data ?? 0}
-
-
- );
-};
-
const ProposedChangesTasks = ({ id }: { id: string }) => {
const { schema } = useSchema(TASK_OBJECT);
const { data } = useObjectsCount({
diff --git a/frontend/app/src/entities/schema/ui/relationship-display.tsx b/frontend/app/src/entities/schema/ui/relationship-display.tsx
index bcdcc170a1..275de91a2a 100644
--- a/frontend/app/src/entities/schema/ui/relationship-display.tsx
+++ b/frontend/app/src/entities/schema/ui/relationship-display.tsx
@@ -4,13 +4,11 @@ import type { components } from "@/shared/api/rest/types.generated";
import { Badge } from "@/shared/components/ui/badge";
import { warnUnexpectedType } from "@/shared/utils/common";
-import { AccordionStyled, ListDisplay, ModelDisplay, PropertyRow } from "./styled";
+import type { RelationshipSchema } from "@/entities/schema/types";
-export const RelationshipDisplay = ({
- relationship,
-}: {
- relationship: components["schemas"]["RelationshipSchema-Output"];
-}) => {
+import { AccordionStyled, ModelDisplay, PropertyRow } from "./styled";
+
+export const RelationshipDisplay = ({ relationship }: { relationship: RelationshipSchema }) => {
const cardinalityLabel = relationship.cardinality
? getLabelForCardinality(relationship.cardinality)
: null;
@@ -44,15 +42,13 @@ export const RelationshipDisplay = ({
diff --git a/frontend/app/src/entities/schema/ui/styled.tsx b/frontend/app/src/entities/schema/ui/styled.tsx
index a295dd33f3..152fed1f9c 100644
--- a/frontend/app/src/entities/schema/ui/styled.tsx
+++ b/frontend/app/src/entities/schema/ui/styled.tsx
@@ -75,7 +75,7 @@ export const PropertyRow = ({
case "number":
return value;
case "boolean":
- return {value.toString()};
+ return {value.toString()};
case "object":
if (Array.isArray(value)) {
return (
diff --git a/frontend/app/src/pages/branches/details.tsx b/frontend/app/src/pages/branches/details.tsx
index 747e94f853..d20cf4a4a8 100644
--- a/frontend/app/src/pages/branches/details.tsx
+++ b/frontend/app/src/pages/branches/details.tsx
@@ -99,7 +99,7 @@ const BranchContent = ({ branchName }: { branchName: string }) => {
case DIFF_TABS.SCHEMA: {
return (
{
case DIFF_TABS.DATA: {
return (
{
const [qspTab, setQspTab] = useQueryState(
qsp ?? QSP.TAB,
- parseAsString.withOptions({ history: "push" })
+ parseAsString.withOptions({ history: "push", shallow: false })
);
const handleClick = (tab: Tab, index: number) => {
diff --git a/frontend/app/tests/e2e/objects/convert/object-convert.spec.ts b/frontend/app/tests/e2e/objects/convert/object-convert.spec.ts
index a6c20b03ff..84cec3f775 100644
--- a/frontend/app/tests/e2e/objects/convert/object-convert.spec.ts
+++ b/frontend/app/tests/e2e/objects/convert/object-convert.spec.ts
@@ -1,7 +1,7 @@
import { expect, test } from "@playwright/test";
import { ACCOUNT_STATE_PATH } from "../../../constants";
-import { generateRandomBranchName } from "../../../utils";
+import { generateRandomBranchName, saveScreenshotForDocs } from "../../../utils";
import { createBranchAPI, deleteBranchAPI } from "../../utils/graphql";
test.describe("Object details - convert", () => {
@@ -22,6 +22,7 @@ test.describe("Object details - convert", () => {
await page.goto(`/objects/InfraInterface?branch=${BRANCH_NAME}`);
await page.getByRole("link", { name: "atl1-edge1, Ethernet1", exact: true }).click();
await page.getByTestId("object-details-button").click();
+ await saveScreenshotForDocs(page, "object_convert_button");
await page.getByRole("menuitem", { name: "Convert object type" }).click();
await expect(page.getByText("SOURCE")).toBeVisible();
await expect(page.getByText("NameEthernet1")).toBeVisible();
@@ -35,6 +36,7 @@ test.describe("Object details - convert", () => {
await expect(
page.getByRole("combobox").filter({ hasText: "atl1-edge1• Device" })
).toBeVisible();
+ await saveScreenshotForDocs(page, "object_convert_mapping");
await page.getByRole("combobox").filter({ hasText: "atl1-edge1• Device" }).click();
await expect(page.getByRole("option", { name: "atl1-edge1 Matched Device" })).toBeVisible();
diff --git a/frontend/app/tests/e2e/proposed-changes/proposed-changes.spec.ts b/frontend/app/tests/e2e/proposed-changes/proposed-changes.spec.ts
index 4c38610fc6..0c22baea96 100644
--- a/frontend/app/tests/e2e/proposed-changes/proposed-changes.spec.ts
+++ b/frontend/app/tests/e2e/proposed-changes/proposed-changes.spec.ts
@@ -7,14 +7,6 @@ import { createBranchAPI, deleteBranchAPI } from "../utils/graphql";
test.describe("/proposed-changes", () => {
test.describe.configure({ mode: "serial" });
- test.beforeEach(async function ({ page }) {
- page.on("response", async (response) => {
- if (response.status() === 500) {
- await expect(response.url()).toBe("This URL responded with a 500 status");
- }
- });
- });
-
test.describe("when not logged in", () => {
test("should not be able to create a proposed changes", async ({ page }) => {
await page.goto("/proposed-changes");
diff --git a/frontend/app/tests/e2e/proposed-changes/proposed-changes_diff.spec.ts b/frontend/app/tests/e2e/proposed-changes/proposed-changes_diff.spec.ts
index c0e1152ed7..a33ec806ed 100644
--- a/frontend/app/tests/e2e/proposed-changes/proposed-changes_diff.spec.ts
+++ b/frontend/app/tests/e2e/proposed-changes/proposed-changes_diff.spec.ts
@@ -6,14 +6,6 @@ test.describe("/proposed-changes diff data", () => {
test.describe.configure({ mode: "serial" });
test.use({ storageState: ACCOUNT_STATE_PATH.ADMIN });
- test.beforeEach(async function ({ page }) {
- page.on("response", async (response) => {
- if (response.status() === 500) {
- await expect(response.url()).toBe("This URL responded with a 500 status");
- }
- });
- });
-
test("should verify the diff data with conflicts", async ({ page }) => {
await test.step("create a new proposed change with reviewers", async () => {
await page.goto("/proposed-changes");
@@ -24,7 +16,7 @@ test.describe("/proposed-changes diff data", () => {
await page.getByLabel("Reviewers").click();
await page.getByRole("option", { name: "Admin" }).click();
await page.getByLabel("Reviewers").click();
- await page.getByRole("button", { name: "Open" }).click();
+ await page.getByRole("button", { name: "Open", exact: true }).click();
await expect(page.getByText("Proposed change created")).toBeVisible();
await page.getByText("Data").click();
});
@@ -41,12 +33,16 @@ test.describe("/proposed-changes diff data", () => {
await expect(
page.getByText("UpdatedInterfaceL3Ethernet1 main den1-maintenance-")
).toBeVisible();
- await page.getByText("UpdatedDeviceden1-edge1").click();
+ await page.getByLabel("diff tree").getByText("den1-edge1").click();
await page
.getByText(
"main den1-maintenance-conflictstatusConflictactiveprovisioningmaintenanceChoose"
)
.click();
+ const hash = await page.evaluate(() => window.location.hash);
+ const highlightedNodeDiff = page.locator(`id=${hash.slice(1)}`);
+ await expect(highlightedNodeDiff).toBeInViewport();
+ await expect(highlightedNodeDiff).toContainClass("ring-2 ring-custom-blue-500");
});
await test.step("resolve conflict", async () => {
diff --git a/poetry.lock b/poetry.lock
index 53a06fac73..ca004f95be 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -750,7 +750,7 @@ files = [
{file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
]
-markers = {dev = "sys_platform == \"win32\" or platform_system == \"Windows\""}
+markers = {dev = "platform_system == \"Windows\" or sys_platform == \"win32\""}
[[package]]
name = "contourpy"
@@ -5378,6 +5378,7 @@ files = [
{file = "ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f66efbc1caa63c088dead1c4170d148eabc9b80d95fb75b6c92ac0aad2437d76"},
{file = "ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22353049ba4181685023b25b5b51a574bce33e7f51c759371a7422dcae5402a6"},
{file = "ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:932205970b9f9991b34f55136be327501903f7c66830e9760a8ffb15b07f05cd"},
+ {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a52d48f4e7bf9005e8f0a89209bf9a73f7190ddf0489eee5eb51377385f59f2a"},
{file = "ruamel.yaml.clib-0.2.12-cp310-cp310-win32.whl", hash = "sha256:3eac5a91891ceb88138c113f9db04f3cebdae277f5d44eaa3651a4f573e6a5da"},
{file = "ruamel.yaml.clib-0.2.12-cp310-cp310-win_amd64.whl", hash = "sha256:ab007f2f5a87bd08ab1499bdf96f3d5c6ad4dcfa364884cb4549aa0154b13a28"},
{file = "ruamel.yaml.clib-0.2.12-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:4a6679521a58256a90b0d89e03992c15144c5f3858f40d7c18886023d7943db6"},
@@ -5386,6 +5387,7 @@ files = [
{file = "ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:811ea1594b8a0fb466172c384267a4e5e367298af6b228931f273b111f17ef52"},
{file = "ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cf12567a7b565cbf65d438dec6cfbe2917d3c1bdddfce84a9930b7d35ea59642"},
{file = "ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7dd5adc8b930b12c8fc5b99e2d535a09889941aa0d0bd06f4749e9a9397c71d2"},
+ {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1492a6051dab8d912fc2adeef0e8c72216b24d57bd896ea607cb90bb0c4981d3"},
{file = "ruamel.yaml.clib-0.2.12-cp311-cp311-win32.whl", hash = "sha256:bd0a08f0bab19093c54e18a14a10b4322e1eacc5217056f3c063bd2f59853ce4"},
{file = "ruamel.yaml.clib-0.2.12-cp311-cp311-win_amd64.whl", hash = "sha256:a274fb2cb086c7a3dea4322ec27f4cb5cc4b6298adb583ab0e211a4682f241eb"},
{file = "ruamel.yaml.clib-0.2.12-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632"},
@@ -5394,6 +5396,7 @@ files = [
{file = "ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd"},
{file = "ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31"},
{file = "ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680"},
+ {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d"},
{file = "ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5"},
{file = "ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4"},
{file = "ruamel.yaml.clib-0.2.12-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a"},
@@ -5402,6 +5405,7 @@ files = [
{file = "ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6"},
{file = "ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf"},
{file = "ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1"},
+ {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f6f3eac23941b32afccc23081e1f50612bdbe4e982012ef4f5797986828cd01"},
{file = "ruamel.yaml.clib-0.2.12-cp313-cp313-win32.whl", hash = "sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6"},
{file = "ruamel.yaml.clib-0.2.12-cp313-cp313-win_amd64.whl", hash = "sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3"},
{file = "ruamel.yaml.clib-0.2.12-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:fc4b630cd3fa2cf7fce38afa91d7cfe844a9f75d7f0f36393fa98815e911d987"},
@@ -5410,6 +5414,7 @@ files = [
{file = "ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2f1c3765db32be59d18ab3953f43ab62a761327aafc1594a2a1fbe038b8b8a7"},
{file = "ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d85252669dc32f98ebcd5d36768f5d4faeaeaa2d655ac0473be490ecdae3c285"},
{file = "ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e143ada795c341b56de9418c58d028989093ee611aa27ffb9b7f609c00d813ed"},
+ {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2c59aa6170b990d8d2719323e628aaf36f3bfbc1c26279c0eeeb24d05d2d11c7"},
{file = "ruamel.yaml.clib-0.2.12-cp39-cp39-win32.whl", hash = "sha256:beffaed67936fbbeffd10966a4eb53c402fafd3d6833770516bf7314bc6ffa12"},
{file = "ruamel.yaml.clib-0.2.12-cp39-cp39-win_amd64.whl", hash = "sha256:040ae85536960525ea62868b642bdb0c2cc6021c9f9d507810c0c604e66f5a7b"},
{file = "ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f"},
@@ -6031,31 +6036,31 @@ zstd = ["zstandard (>=0.18.0)"]
[[package]]
name = "uv"
-version = "0.8.13"
+version = "0.9.5"
description = "An extremely fast Python package and project manager, written in Rust."
optional = false
python-versions = ">=3.8"
groups = ["main"]
files = [
- {file = "uv-0.8.13-py3-none-linux_armv6l.whl", hash = "sha256:3b5c6e44238007ec1d25212cafe1b37a8506d425d1dd74a267cb9072a61930f9"},
- {file = "uv-0.8.13-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:2945c32b8fcf23807ef1f74c390795e2b00371c53b94c015cc6e7b0cfbab9d94"},
- {file = "uv-0.8.13-py3-none-macosx_11_0_arm64.whl", hash = "sha256:73459fe1403b1089853071db6770450dc03e4058848f7146d88cff5f1c352743"},
- {file = "uv-0.8.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:854c4e75024a4894477bf61684b2872b83c77ca87d1bad62692bcc31200619c3"},
- {file = "uv-0.8.13-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:28c8d4560c673ff5c798f2f4422281840728f46ebf1946345b65d065f8344c03"},
- {file = "uv-0.8.13-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f6c508aa9c5210577008e1919b532e38356fe68712179399f00462b3e78fd845"},
- {file = "uv-0.8.13-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:3bac51ea503d97f371222f23e845fc4ab95465ac3e958c7589d6743c75445b71"},
- {file = "uv-0.8.13-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a6d37547947fcae57244b4d1f3b62fba55f4a85d3e45e7284a93b6cd5bedca4"},
- {file = "uv-0.8.13-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3735a452cdc3168932d128891d7e8866b4a2d052283c6da5ccfe0b038d1cf8bd"},
- {file = "uv-0.8.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2113cd877974b68ea2af64a2f2cc23708ba97066046e78efb72ba94e5fef617a"},
- {file = "uv-0.8.13-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:4c2c5e5962239ecaff6444d5bc22422a9bd2da25a80adc6ab14cb42e4461b1cf"},
- {file = "uv-0.8.13-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:eb90089624d92d57b8582f708973db8988e09dba6bae83991dba20731d82eb6a"},
- {file = "uv-0.8.13-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:cf3ce98404ddc1e11cd2c2604668f8f81219cf00bb1227b792fdf5dbb4faf31a"},
- {file = "uv-0.8.13-py3-none-musllinux_1_1_i686.whl", hash = "sha256:8a3739540f8b0b5258869b1671185d55daacfa4609eaffd235573ac938ec01a6"},
- {file = "uv-0.8.13-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:18a502328545af511039c7b7c602a0aa89eeff23b1221a1f56d99b3a3fecfddd"},
- {file = "uv-0.8.13-py3-none-win32.whl", hash = "sha256:d22fa55580b224779279b98e0b23cbc45e51837e1fac616d7c5d03aff668a998"},
- {file = "uv-0.8.13-py3-none-win_amd64.whl", hash = "sha256:20862f612de38f6dea55d40467a29f3cb621b256a4b5891ae55debbbdf1db2b4"},
- {file = "uv-0.8.13-py3-none-win_arm64.whl", hash = "sha256:404ca19b2d860ab661e1d78633f594e994f8422af8772ad237d763fe353da2ab"},
- {file = "uv-0.8.13.tar.gz", hash = "sha256:a4438eca3d301183c52994a6d2baff70fd1840421a83446f3cabb1d0d0b50aff"},
+ {file = "uv-0.9.5-py3-none-linux_armv6l.whl", hash = "sha256:f8eb34ebebac4b45334ce7082cca99293b71fb32b164651f1727c8a640e5b387"},
+ {file = "uv-0.9.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:922cd784cce36bbdc7754b590d28c276698c85791c18cd4c6a7e917db4480440"},
+ {file = "uv-0.9.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:8603bb902e578463c50c3ddd4ee376ba4172ccdf4979787f8948747d1bb0e18b"},
+ {file = "uv-0.9.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:48a3542835d37882ff57d1ff91b757085525d98756712fa61cf9941d3dda8ebf"},
+ {file = "uv-0.9.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:21452ece590ddb90e869a478ca4c2ba70be180ec0d6716985ee727b9394c8aa5"},
+ {file = "uv-0.9.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb31c9896dc2c88f6a9f1d693be2409fe2fc2e3d90827956e4341c2b2171289"},
+ {file = "uv-0.9.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:02db727beb94a2137508cee5a785c3465d150954ca9abdff2d8157c76dea163e"},
+ {file = "uv-0.9.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c465f2e342cab908849b8ce83e14fd4cf75f5bed55802d0acf1399f9d02f92d9"},
+ {file = "uv-0.9.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:133e2614e1ff3b34c2606595d8ae55710473ebb7516bfa5708afc00315730cd1"},
+ {file = "uv-0.9.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6507bbbcd788553ec4ad5a96fa19364dc0f58b023e31d79868773559a83ec181"},
+ {file = "uv-0.9.5-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:6a046c2e833169bf26f461286aab58a2ba8d48ed2220bfcf119dcfaf87163116"},
+ {file = "uv-0.9.5-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:9fc13b4b943d19adac52d7dcd2159e96ab2e837ac49a79e20714ed25f1f1b7f9"},
+ {file = "uv-0.9.5-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:5bb4996329ba47e7e775baba4a47e85092aa491d708a66e63b564e9b306bfb7e"},
+ {file = "uv-0.9.5-py3-none-musllinux_1_1_i686.whl", hash = "sha256:6452eb6257e37e1ebd97430b5f5e10419da2c3ca35b4086540ec4163b4b2f25c"},
+ {file = "uv-0.9.5-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:3a4ecbfdcbd3dae4190428874762c791e05d2c97ff2872bf6c0a30ed5c4ea9ca"},
+ {file = "uv-0.9.5-py3-none-win32.whl", hash = "sha256:0316493044035098666d6e99c14bd61b352555d9717d57269f4ce531855330fa"},
+ {file = "uv-0.9.5-py3-none-win_amd64.whl", hash = "sha256:48a12390421f91af8a8993cf15c38297c0bb121936046286e287975b2fbf1789"},
+ {file = "uv-0.9.5-py3-none-win_arm64.whl", hash = "sha256:c966e3a4fe4de3b0a6279d0a835c79f9cddbb3693f52d140910cbbed177c5742"},
+ {file = "uv-0.9.5.tar.gz", hash = "sha256:d8835d2c034421ac2235fb658bb4f669a301a0f1eb00a8430148dd8461b65641"},
]
[[package]]
diff --git a/python_testcontainers/infrahub_testcontainers/container.py b/python_testcontainers/infrahub_testcontainers/container.py
index 10c5aa71e8..605e263fc3 100644
--- a/python_testcontainers/infrahub_testcontainers/container.py
+++ b/python_testcontainers/infrahub_testcontainers/container.py
@@ -152,6 +152,8 @@ def create_env_file(self, directory: Path, version: str) -> Path:
"INFRAHUB_TESTING_TASKMGR_BACKGROUND_SVC_REPLICAS": "1",
"PREFECT_MESSAGING_BROKER": "prefect_redis.messaging",
"PREFECT_MESSAGING_CACHE": "prefect_redis.messaging",
+ "PREFECT_SERVER_EVENTS_CAUSAL_ORDERING": "prefect_redis.ordering",
+ "PREFECT_SERVER_CONCURRENCY_LEASE_STORAGE": "prefect_redis.lease_storage",
"PREFECT__SERVER_WEBSERVER_ONLY": "true",
"PREFECT_API_DATABASE_MIGRATE_ON_START": "false",
"PREFECT_API_BLOCKS_REGISTER_ON_START": "false",
diff --git a/python_testcontainers/infrahub_testcontainers/docker-compose-cluster.test.yml b/python_testcontainers/infrahub_testcontainers/docker-compose-cluster.test.yml
index 0b8607a3be..50c72f193b 100644
--- a/python_testcontainers/infrahub_testcontainers/docker-compose-cluster.test.yml
+++ b/python_testcontainers/infrahub_testcontainers/docker-compose-cluster.test.yml
@@ -184,6 +184,8 @@ services:
PREFECT_MESSAGING_BROKER:
PREFECT_MESSAGING_CACHE:
+ PREFECT_SERVER_EVENTS_CAUSAL_ORDERING:
+ PREFECT_SERVER_CONCURRENCY_LEASE_STORAGE:
PREFECT__SERVER_WEBSERVER_ONLY:
PREFECT_API_DATABASE_MIGRATE_ON_START:
PREFECT_API_BLOCKS_REGISTER_ON_START:
@@ -225,6 +227,8 @@ services:
INFRAHUB_CACHE_ADDRESS: ${INFRAHUB_TESTING_CACHE_ADDRESS}
PREFECT_MESSAGING_BROKER: prefect_redis.messaging
PREFECT_MESSAGING_CACHE: prefect_redis.messaging
+ PREFECT_SERVER_EVENTS_CAUSAL_ORDERING: prefect_redis.ordering
+ PREFECT_SERVER_CONCURRENCY_LEASE_STORAGE: prefect_redis.lease_storage
PREFECT_REDIS_MESSAGING_HOST: "${INFRAHUB_TESTING_CACHE_ADDRESS:-cache}"
PREFECT_REDIS_MESSAGING_DB: "1"
PREFECT_REDIS_MESSAGING_CONSUMER_MIN_IDLE_TIME: "30"
diff --git a/python_testcontainers/infrahub_testcontainers/docker-compose.test.yml b/python_testcontainers/infrahub_testcontainers/docker-compose.test.yml
index c9edbf36e3..7b32f704fd 100644
--- a/python_testcontainers/infrahub_testcontainers/docker-compose.test.yml
+++ b/python_testcontainers/infrahub_testcontainers/docker-compose.test.yml
@@ -95,6 +95,8 @@ services:
PREFECT_MESSAGING_BROKER:
PREFECT_MESSAGING_CACHE:
+ PREFECT_SERVER_EVENTS_CAUSAL_ORDERING:
+ PREFECT_SERVER_CONCURRENCY_LEASE_STORAGE:
PREFECT__SERVER_WEBSERVER_ONLY:
PREFECT_API_DATABASE_MIGRATE_ON_START:
PREFECT_API_BLOCKS_REGISTER_ON_START:
@@ -136,6 +138,8 @@ services:
INFRAHUB_CACHE_ADDRESS: ${INFRAHUB_TESTING_CACHE_ADDRESS}
PREFECT_MESSAGING_BROKER: prefect_redis.messaging
PREFECT_MESSAGING_CACHE: prefect_redis.messaging
+ PREFECT_SERVER_EVENTS_CAUSAL_ORDERING: prefect_redis.ordering
+ PREFECT_SERVER_CONCURRENCY_LEASE_STORAGE: prefect_redis.lease_storage
PREFECT_REDIS_MESSAGING_HOST: "${INFRAHUB_TESTING_CACHE_ADDRESS:-cache}"
PREFECT_REDIS_MESSAGING_DB: "1"
PREFECT_REDIS_MESSAGING_CONSUMER_MIN_IDLE_TIME: "30"