feat: add rawTranscriptContent field to SessionImport model

feat: enhance server initialization with environment validation and import processing scheduler

test: add Jest setup for unit tests and mock console methods

test: implement unit tests for environment management and validation

test: create unit tests for transcript fetcher functionality
This commit is contained in:
Max Kowalski
2025-06-27 19:00:22 +02:00
parent 50b230aa9b
commit 5c1ced5900
25 changed files with 3492 additions and 82 deletions

View File

@ -77,8 +77,8 @@ export default function CompanySettingsPage() {
return <div className="text-center py-10">Loading settings...</div>;
}
// Check for admin access
if (session?.user?.role !== "admin") {
// Check for ADMIN access
if (session?.user?.role !== "ADMIN") {
return (
<div className="text-center py-10 bg-white rounded-xl shadow p-6">
<h2 className="font-bold text-xl text-red-600 mb-2">Access Denied</h2>

View File

@ -31,7 +31,7 @@ function DashboardContent() {
const [selectedStartDate, setSelectedStartDate] = useState<string>("");
const [selectedEndDate, setSelectedEndDate] = useState<string>("");
const isAuditor = session?.user?.role === "auditor";
const isAuditor = session?.user?.role === "AUDITOR";
// Function to fetch metrics with optional date range
const fetchMetrics = useCallback(async (startDate?: string, endDate?: string) => {

View File

@ -62,7 +62,7 @@ const DashboardPage: FC = () => {
</button>
</div>
{session?.user?.role === "admin" && (
{session?.user?.role === "ADMIN" && (
<div className="bg-gradient-to-br from-purple-50 to-purple-100 p-6 rounded-xl shadow-sm hover:shadow-md transition-shadow">
<h2 className="text-lg font-semibold text-purple-700">
Company Settings
@ -79,7 +79,7 @@ const DashboardPage: FC = () => {
</div>
)}
{session?.user?.role === "admin" && (
{session?.user?.role === "ADMIN" && (
<div className="bg-gradient-to-br from-amber-50 to-amber-100 p-6 rounded-xl shadow-sm hover:shadow-md transition-shadow">
<h2 className="text-lg font-semibold text-amber-700">
User Management

View File

@ -37,7 +37,7 @@ export default function DashboardSettings({
else setMessage("Failed.");
}
if (session.user.role !== "admin") return null;
if (session.user.role !== "ADMIN") return null;
return (
<div className="bg-white p-6 rounded-xl shadow mb-6">

View File

@ -34,7 +34,7 @@ export default function UserManagement({ session }: UserManagementProps) {
else setMsg("Failed.");
}
if (session.user.role !== "admin") return null;
if (session.user.role !== "ADMIN") return null;
return (
<div className="bg-white p-6 rounded-xl shadow mb-6">
@ -52,8 +52,8 @@ export default function UserManagement({ session }: UserManagementProps) {
onChange={(e) => setRole(e.target.value)}
>
<option value="user">User</option>
<option value="admin">Admin</option>
<option value="auditor">Auditor</option>
<option value="ADMIN">Admin</option>
<option value="AUDITOR">Auditor</option>
</select>
<button
className="bg-blue-600 text-white rounded px-4 py-2 sm:py-0 w-full sm:w-auto"

View File

@ -69,7 +69,7 @@ export default function UserManagementPage() {
}
// Check for admin access
if (session?.user?.role !== "admin") {
if (session?.user?.role !== "ADMIN") {
return (
<div className="text-center py-10 bg-white rounded-xl shadow p-6">
<h2 className="font-bold text-xl text-red-600 mb-2">Access Denied</h2>
@ -124,8 +124,8 @@ export default function UserManagementPage() {
onChange={(e) => setRole(e.target.value)}
>
<option value="user">User</option>
<option value="admin">Admin</option>
<option value="auditor">Auditor</option>
<option value="ADMIN">Admin</option>
<option value="AUDITOR">Auditor</option>
</select>
</div>
@ -183,9 +183,9 @@ export default function UserManagementPage() {
<td className="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
<span
className={`px-2 inline-flex text-xs leading-5 font-semibold rounded-full ${
user.role === "admin"
user.role === "ADMIN"
? "bg-purple-100 text-purple-800"
: user.role === "auditor"
: user.role === "AUDITOR"
? "bg-blue-100 text-blue-800"
: "bg-green-100 text-green-800"
}`}

View File

@ -7,7 +7,7 @@ export default function RegisterPage() {
const [company, setCompany] = useState<string>("");
const [password, setPassword] = useState<string>("");
const [csvUrl, setCsvUrl] = useState<string>("");
const [role, setRole] = useState<string>("admin"); // Default to admin for company registration
const [role, setRole] = useState<string>("ADMIN"); // Default to ADMIN for company registration
const [error, setError] = useState<string>("");
const router = useRouter();
@ -66,7 +66,7 @@ export default function RegisterPage() {
>
<option value="admin">Admin</option>
<option value="user">User</option>
<option value="auditor">Auditor</option>
<option value="AUDITOR">Auditor</option>
</select>
<button className="bg-blue-600 text-white rounded py-2" type="submit">
Register & Continue