1
0
forked from baron/baron-sso

test: add unit and e2e tests for bulk user creation and schema validation

This commit is contained in:
2026-03-04 13:26:44 +09:00
parent 03a4c553f8
commit 02acdf835f
7 changed files with 499 additions and 71 deletions

View File

@@ -14,6 +14,7 @@ import {
import { ScrollArea } from "../../../components/ui/scroll-area";
import { bulkCreateUsers, type BulkUserItem, type BulkUserResult } from "../../../lib/adminApi";
import { t } from "../../../lib/i18n";
import { parseUserCSV } from "../utils/csvParser";
interface UserBulkUploadModalProps {
onSuccess?: () => void;
@@ -48,40 +49,7 @@ export function UserBulkUploadModal({ onSuccess }: UserBulkUploadModalProps) {
const reader = new FileReader();
reader.onload = (e) => {
const text = e.target?.result as string;
const lines = text.split(/\r?\n/);
if (lines.length < 2) {
setParsing(false);
return;
}
const headers = lines[0].split(",").map(h => h.trim().toLowerCase());
const data: BulkUserItem[] = [];
for (let i = 1; i < lines.length; i++) {
if (!lines[i].trim()) continue;
// Simple CSV split (doesn't handle commas in quotes, but enough for basic template)
const values = lines[i].split(",").map(v => v.trim());
const item: any = { metadata: {} };
headers.forEach((header, index) => {
const value = values[index];
if (!value) return;
if (["email", "name", "phone", "role", "companycode", "department"].includes(header)) {
const key = header === "companycode" ? "companyCode" : header;
item[key] = value;
} else {
item.metadata[header] = value;
}
});
if (item.email && item.name) {
data.push(item as BulkUserItem);
}
}
const data = parseUserCSV(text);
setPreviewData(data);
setParsing(false);
};