forked from baron/baron-sso
test: add unit and e2e tests for bulk user creation and schema validation
This commit is contained in:
@@ -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);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user