1
0
forked from baron/baron-sso

코드 테스트 실패 수정

This commit is contained in:
2026-06-11 08:55:41 +09:00
parent 4d77060b5d
commit 0bb3ccb850
13 changed files with 517 additions and 382 deletions

View File

@@ -4,6 +4,11 @@
"enabled": true,
"indentStyle": "space"
},
"css": {
"parser": {
"tailwindDirectives": true
}
},
"linter": {
"enabled": true,
"rules": {
@@ -25,6 +30,7 @@
"**",
"!**/dist/**",
"!**/.vite/**",
"!**/.pnpm-store/**",
"!**/node_modules/**",
"!**/coverage/**",
"!**/tsconfig*.json",

View File

@@ -1,5 +1,5 @@
import { act } from "react-dom/test-utils";
import { createRoot, type Root } from "react-dom/client";
import { act } from "react-dom/test-utils";
import { afterEach, describe, expect, it, vi } from "vitest";
import type { CommonAuditLog } from "../../audit";
import { AuditLogTable } from "./AuditLogTable";
@@ -128,8 +128,12 @@ describe("AuditLogTable", () => {
expect(loadMoreButton).toBeTruthy();
await act(async () => {
actorCopyButton?.dispatchEvent(new MouseEvent("click", { bubbles: true }));
targetCopyButton?.dispatchEvent(new MouseEvent("click", { bubbles: true }));
actorCopyButton?.dispatchEvent(
new MouseEvent("click", { bubbles: true }),
);
targetCopyButton?.dispatchEvent(
new MouseEvent("click", { bubbles: true }),
);
expandButton?.dispatchEvent(new MouseEvent("click", { bubbles: true }));
});

View File

@@ -1,8 +1,8 @@
import { ChevronDown, ChevronUp, Copy } from "lucide-react";
import * as React from "react";
import {
getCommonBadgeClasses,
type CommonBadgeVariant,
getCommonBadgeClasses,
} from "../../../ui/badge";
import { getCommonButtonClasses } from "../../../ui/button";
import {
@@ -90,7 +90,12 @@ export function AuditLogTable({
<div className={commonTableWrapperClass}>
<Table className={commonTableClass}>
<TableHeader className={commonTableHeaderClass}>
<TableRow className={cx(commonTableRowClass, commonStickyTableHeaderClass)}>
<TableRow
className={cx(
commonTableRowClass,
commonStickyTableHeaderClass,
)}
>
<TableHead className={cx(commonTableHeadClass, "w-[190px]")}>
{t("ui.common.audit.table.time", "Time")}
</TableHead>
@@ -122,7 +127,12 @@ export function AuditLogTable({
return (
<React.Fragment key={rowKey}>
<TableRow className={cx(commonTableRowClass, "bg-card/40")}>
<TableCell className={cx(commonTableCellClass, "text-xs text-muted-foreground")}>
<TableCell
className={cx(
commonTableCellClass,
"text-xs text-muted-foreground",
)}
>
<div className="space-y-1">
<div>{date}</div>
<div>{time}</div>
@@ -154,12 +164,22 @@ export function AuditLogTable({
) : null}
</div>
</TableCell>
<TableCell className={cx(commonTableCellClass, "text-xs text-muted-foreground")}>
<TableCell
className={cx(
commonTableCellClass,
"text-xs text-muted-foreground",
)}
>
<div className="font-semibold text-foreground">
{actionLabel}
</div>
</TableCell>
<TableCell className={cx(commonTableCellClass, "text-xs text-muted-foreground")}>
<TableCell
className={cx(
commonTableCellClass,
"text-xs text-muted-foreground",
)}
>
<div className="flex items-center gap-2">
<span className="break-all">{targetLabel}</span>
{targetLabel !== "-" ? (
@@ -192,7 +212,9 @@ export function AuditLogTable({
{log.status}
</span>
</TableCell>
<TableCell className={cx(commonTableCellClass, "text-right")}>
<TableCell
className={cx(commonTableCellClass, "text-right")}
>
<button
type="button"
className={getCommonButtonClasses({
@@ -215,18 +237,28 @@ export function AuditLogTable({
</TableCell>
</TableRow>
{expanded && (
<TableRow className={cx(commonTableRowClass, "bg-card/20")}>
<TableCell colSpan={6} className={cx(commonTableCellClass, "text-xs")}>
<TableRow
className={cx(commonTableRowClass, "bg-card/20")}
>
<TableCell
colSpan={6}
className={cx(commonTableCellClass, "text-xs")}
>
<div className="grid gap-4 text-muted-foreground md:grid-cols-3">
<div className="space-y-1">
<div className="uppercase tracking-[0.16em]">
{t("ui.common.audit.details.request", "Request")}
{t(
"ui.common.audit.details.request",
"Request",
)}
</div>
<div className="break-all">
{t(
"ui.common.audit.details.request_id",
"Request ID · {{value}}",
{ value: formatAuditValue(details.request_id) },
{
value: formatAuditValue(details.request_id),
},
)}
</div>
<div className="break-all">
@@ -237,9 +269,13 @@ export function AuditLogTable({
)}
</div>
<div>
{t("ui.common.audit.details.ip", "IP · {{value}}", {
value: formatAuditValue(log.ip_address),
})}
{t(
"ui.common.audit.details.ip",
"IP · {{value}}",
{
value: formatAuditValue(log.ip_address),
},
)}
</div>
<div className="break-all">
{t(
@@ -283,7 +319,9 @@ export function AuditLogTable({
{t(
"ui.common.audit.details.tenant",
"Tenant · {{value}}",
{ value: formatAuditValue(details.tenant_id) },
{
value: formatAuditValue(details.tenant_id),
},
)}
</div>
<div>
@@ -384,26 +422,74 @@ export function AuditLogTable({
}
// Internal table components for cleaner implementation
function Table({ className, children, style }: { className?: string, children: React.ReactNode, style?: React.CSSProperties }) {
return <table className={className} style={style}>{children}</table>;
function Table({
className,
children,
style,
}: {
className?: string;
children: React.ReactNode;
style?: React.CSSProperties;
}) {
return (
<table className={className} style={style}>
{children}
</table>
);
}
function TableHeader({ className, children }: { className?: string, children: React.ReactNode }) {
function TableHeader({
className,
children,
}: {
className?: string;
children: React.ReactNode;
}) {
return <thead className={className}>{children}</thead>;
}
function TableBody({ className, children }: { className?: string, children: React.ReactNode }) {
function TableBody({
className,
children,
}: {
className?: string;
children: React.ReactNode;
}) {
return <tbody className={className}>{children}</tbody>;
}
function TableRow({ className, children }: { className?: string, children: React.ReactNode }) {
function TableRow({
className,
children,
}: {
className?: string;
children: React.ReactNode;
}) {
return <tr className={className}>{children}</tr>;
}
function TableHead({ className, children }: { className?: string, children?: React.ReactNode }) {
function TableHead({
className,
children,
}: {
className?: string;
children?: React.ReactNode;
}) {
return <th className={className}>{children}</th>;
}
function TableCell({ className, children, colSpan }: { className?: string, children: React.ReactNode, colSpan?: number }) {
return <td className={className} colSpan={colSpan}>{children}</td>;
function TableCell({
className,
children,
colSpan,
}: {
className?: string;
children: React.ReactNode;
colSpan?: number;
}) {
return (
<td className={className} colSpan={colSpan}>
{children}
</td>
);
}