استوديو الذكاء الاصطناعي
كل المشاريع

نظام إدارة تصاريح دخول الزوار

اسأل عن هذا المشروع

نظام إلكتروني مبسط يهدف إلى إدارة وتنظيم تصاريح دخول الزوار إلى المباني الحكومية، بدءًا من تقديم طلب الزيارة من قبل الموظف، مرورًا بمراجعة واعتماد الطلب من الجهة المختصة، وانتهاءً بالتحقق من التصريح عند بوابة الدخول وتسجيل بيانات الدخول والخروج. يساعد النظام على رفع مستوى التنظيم والأمن، تقليل الإجراءات الورقية، تسريع عملية استقبال الزوار، وتوفير سجل إلكتروني متكامل لجميع الزيارات والتصاريح.

اطلب تعديلًا

تُفتح المحادثة حين تصبح هذه المرحلة جاهزة للتوليد.

متوقف مؤقتًا: أُعيد فتح الشيفرة البرمجية للتعديل. عمل الاختبار محفوظ أدناه ويستمر بعد اعتماد الشيفرة البرمجية مرة أخرى.

الانتقال إلى الشيفرة البرمجية
النسخة ⁨1⁩مسودةأُنشئ قبل 5 أيام

فحص البناء والاختبار

ما زالت تفشل بعد 3 جولات إصلاح.

5 أخطاء في آخر فحص

Failed VisitorPermitSystem.Tests.VisitorRequestsControllerTests.Create_Post_Creates_Request_And_Redirects [57 ms]
Failed VisitorPermitSystem.Tests.ProgramTests.Role_Specific_Routes_Are_Accessible_To_Authorized_Roles(role: "Approver", path: "/Approvals/Dashboard") [31 ms]
Failed VisitorPermitSystem.Tests.ProgramTests.Services_Work_With_Sqlite_In_Memory [5 ms]
Failed VisitorPermitSystem.Tests.ProgramTests.Protected_Routes_Redirect_Anonymous_Users_To_Login [3 ms]
FAILED: GET /Approvals/Dashboard as Approver -> 500: server error

يُفحص الكود المعتمد من جديد ويُصلح Qwen Code ما يفشل. تبقى خطة الاختبار كما هي، ويُحفظ التقرير الجديد في نسخة جديدة.

يثبّت الفحص المكتبات اللازمة، ويترجم كل ملف، ويشغّل الاختبارات، داخل حاوية معزولة.

فُحصت النسخة ⁨3⁩ من مرحلة الشفرة، وحُفظت إصلاحات Qwen Code فيها.

عدّل Qwen Code ⁨12⁩ ملفات، وأضاف ⁨2⁩، وحذف ⁨0⁩
  • + VisitorPermitSystem/Views/Account/Login.cshtml
  • + VisitorPermitSystem/Views/Account/VerifyMfa.cshtml
  • ~ VisitorPermitSystem.Tests/ApprovalsControllerTests.cs
  • ~ VisitorPermitSystem.Tests/GateVerificationControllerTests.cs
  • ~ VisitorPermitSystem.Tests/HistoryControllerTests.cs
  • ~ VisitorPermitSystem.Tests/ProgramTests.cs
  • ~ VisitorPermitSystem.Tests/VisitorPermitSystem.Tests.csproj
  • ~ VisitorPermitSystem/Controllers/VisitorRequestsController.cs
  • ~ VisitorPermitSystem/Models/AuditLog.cs
  • ~ VisitorPermitSystem/Models/Notification.cs
  • ~ VisitorPermitSystem/Program.cs
  • ~ VisitorPermitSystem/Views/History/Index.cshtml
  • ~ VisitorPermitSystem/Views/Permissions/Details.cshtml
  • ~ VisitorPermitSystem/VisitorPermitSystem.csproj

الإخفاقات في كل فحص: ⁨4⁩ → ⁨3⁩ → ⁨16⁩ → ⁨5⁩

  1. الفحص ⁨1⁩: 4 إخفاقات 0:30

    يفشل (⁨4⁩)

    • FAILED: VisitorPermitSystem/Controllers/AccountController.cs: AccountController returns views, but there is no VisitorPermitSystem/Views/Account/ folder
    • FAILED: VisitorPermitSystem/Views/Permissions/Details.cshtml: PermissionsController has no action Index (asp-action)
    • VisitorPermitSystem/VisitorPermitSystem.csproj : error NU1102: Unable to find package Microsoft.AspNetCore.Authentication.Cookies with version (>= 10.0.0) [VisitorPermitSystem.sln]
    • VisitorPermitSystem/VisitorPermitSystem.csproj : error NU1102: - Found 38 version(s) in nuget.org [ Nearest version: 2.3.13 ] [VisitorPermitSystem.sln]

    وصل الفحص إلى: dotnet (./VisitorPermitSystem.sln): restore

    المخرجات كاملة
    ### What failed (gathered from the output below)
    FAILED: VisitorPermitSystem/Controllers/AccountController.cs: AccountController returns views, but there is no VisitorPermitSystem/Views/Account/ folder
    FAILED: VisitorPermitSystem/Views/Permissions/Details.cshtml: PermissionsController has no action Index (asp-action)
    /workspace/VisitorPermitSystem/VisitorPermitSystem.csproj : error NU1102: Unable to find package Microsoft.AspNetCore.Authentication.Cookies with version (>= 10.0.0) [/workspace/VisitorPermitSystem.sln]
    /workspace/VisitorPermitSystem/VisitorPermitSystem.csproj : error NU1102:   - Found 38 version(s) in nuget.org [ Nearest version: 2.3.13 ] [/workspace/VisitorPermitSystem.sln]
    
    
    ### dotnet: every project in a solution
    
    ### dotnet: one declaration per type
    
    ### dotnet: each controller's views in its folder
    
    ### dotnet: an action behind every route and form
    
    ### dotnet (./VisitorPermitSystem.sln): restore
    /workspace/VisitorPermitSystem/VisitorPermitSystem.csproj : warning NU1510: PackageReference Microsoft.AspNetCore.Authentication.Cookies will not be pruned. This package is automatically available and does not need to be referenced explicitly. Remove the PackageReference item. [/workspace/VisitorPermitSystem.sln]
    
    ### result
    FAILED
    الإصلاح ⁨1⁩: انتهى وقته 30:01

    انتهى وقت Qwen Code قبل أن يقدّم ملخصًا.

    عُدّل 12 ملفًا في هذه الجولة:

    • VisitorPermitSystem.Tests/ApprovalsControllerTests.cs
    • VisitorPermitSystem.Tests/GateVerificationControllerTests.cs
    • VisitorPermitSystem.Tests/HistoryControllerTests.cs
    • VisitorPermitSystem.Tests/ProgramTests.cs
    • VisitorPermitSystem/Controllers/VisitorRequestsController.cs
    • VisitorPermitSystem/Models/AuditLog.cs
    • VisitorPermitSystem/Models/Notification.cs
    • VisitorPermitSystem/Views/Account/Login.cshtml
    • VisitorPermitSystem/Views/Account/VerifyMfa.cshtml
    • VisitorPermitSystem/Views/History/Index.cshtml
    • VisitorPermitSystem/Views/Permissions/Details.cshtml
    • VisitorPermitSystem/VisitorPermitSystem.csproj
  2. الفحص ⁨2⁩: 3 إخفاقات 0:02

    مقارنة بالفحص السابق: أُصلح ⁨4⁩، وما زال ⁨0⁩ يفشل، و⁨3⁩ جديد.

    جديد (⁨3⁩)

    • VisitorPermitSystem.Tests/GateVerificationControllerTests.cs: error CS1061: 'IServiceCollection' does not contain a definition for 'RemoveAll' and no accessible extension method 'RemoveAll' accepting
    • VisitorPermitSystem.Tests/ReportsTests.cs: error CS1061: 'IWebHostBuilder' does not contain a definition for 'UseEnvironment' and no accessible extension method 'UseEnvironment' accepting a first argu
    • VisitorPermitSystem.Tests/VisitorRequestsControllerTests.cs: error CS1061: 'IWebHostBuilder' does not contain a definition for 'UseEnvironment' and no accessible extension method 'UseEnvironment' acce

    أُصلح (⁨4⁩)

    • FAILED: VisitorPermitSystem/Controllers/AccountController.cs: AccountController returns views, but there is no VisitorPermitSystem/Views/Account/ folder
    • FAILED: VisitorPermitSystem/Views/Permissions/Details.cshtml: PermissionsController has no action Index (asp-action)
    • VisitorPermitSystem/VisitorPermitSystem.csproj : error NU1102: Unable to find package Microsoft.AspNetCore.Authentication.Cookies with version (>= 10.0.0) [VisitorPermitSystem.sln]
    • VisitorPermitSystem/VisitorPermitSystem.csproj : error NU1102: - Found 38 version(s) in nuget.org [ Nearest version: 2.3.13 ] [VisitorPermitSystem.sln]

    وصل الفحص إلى: dotnet (./VisitorPermitSystem.sln): build

    المخرجات كاملة
    ### What failed (gathered from the output below)
    /workspace/VisitorPermitSystem.Tests/GateVerificationControllerTests.cs(280,26): error CS1061: 'IServiceCollection' does not contain a definition for 'RemoveAll' and no accessible extension method 'RemoveAll' accepting a first argument of type 'IServiceCollection' could be found (are you missing a u
    /workspace/VisitorPermitSystem.Tests/ReportsTests.cs(317,21): error CS1061: 'IWebHostBuilder' does not contain a definition for 'UseEnvironment' and no accessible extension method 'UseEnvironment' accepting a first argument of type 'IWebHostBuilder' could be found (are you missing a using directive 
    /workspace/VisitorPermitSystem.Tests/ReportsTests.cs(337,21): error CS1061: 'IWebHostBuilder' does not contain a definition for 'UseEnvironment' and no accessible extension method 'UseEnvironment' accepting a first argument of type 'IWebHostBuilder' could be found (are you missing a using directive 
    /workspace/VisitorPermitSystem.Tests/VisitorRequestsControllerTests.cs(223,21): error CS1061: 'IWebHostBuilder' does not contain a definition for 'UseEnvironment' and no accessible extension method 'UseEnvironment' accepting a first argument of type 'IWebHostBuilder' could be found (are you missing 
    /workspace/VisitorPermitSystem.Tests/VisitorRequestsControllerTests.cs(30,21): error CS1061: 'IWebHostBuilder' does not contain a definition for 'UseEnvironment' and no accessible extension method 'UseEnvironment' accepting a first argument of type 'IWebHostBuilder' could be found (are you missing a
    
    
    ### dotnet: every project in a solution
    
    ### dotnet: one declaration per type
    
    ### dotnet: each controller's views in its folder
    
    ### dotnet: an action behind every route and form
    
    ### dotnet (./VisitorPermitSystem.sln): restore
    
    ### dotnet (./VisitorPermitSystem.sln): build
    
        5 Error(s)
        6 Warning(s)
    Build FAILED.
    Time Elapsed 00:00:00.83
    
    ### result
    FAILED
    الإصلاح ⁨2⁩: انتهى وقته 30:01

    انتهى وقت Qwen Code قبل أن يقدّم ملخصًا.

    عُدّلت 3 ملفات في هذه الجولة:

    • VisitorPermitSystem.Tests/GateVerificationControllerTests.cs
    • VisitorPermitSystem.Tests/VisitorPermitSystem.Tests.csproj
    • VisitorPermitSystem/Program.cs
  3. الفحص ⁨3⁩: 16 إخفاقًا 0:06

    مقارنة بالفحص السابق: أُصلح ⁨3⁩، وما زال ⁨0⁩ يفشل، و⁨16⁩ جديد.

    جديد (⁨16⁩)

    • Failed VisitorPermitSystem.Tests.VisitorRequestsControllerTests.Details_Accessible_To_ItAdmin
    • Failed VisitorPermitSystem.Tests.VisitorRequestsControllerTests.Details_Accessible_To_HostEmployee
    • Failed VisitorPermitSystem.Tests.VisitorRequestsControllerTests.Index_Redirects_Anonymous_User_To_Login
    • Failed VisitorPermitSystem.Tests.VisitorRequestsControllerTests.Create_Post_With_Invalid_Data_Returns_View_With_Errors
    • Failed VisitorPermitSystem.Tests.VisitorRequestsControllerTests.Index_Accessible_To_HostEmployee
    • Failed VisitorPermitSystem.Tests.VisitorRequestsControllerTests.Details_Accessible_To_Approver
    • Failed VisitorPermitSystem.Tests.VisitorRequestsControllerTests.Create_Post_Creates_Request_And_Redirects
    • FAILED: GET /VisitorRequests/1 as HostEmployee -> 500: server error
    • FAILED: GET /VisitorRequests/1 as Approver -> 500: server error
    • FAILED: GET /VisitorRequests/1 as ItAdmin -> 500: server error
    • FAILED: GET /VisitorRequests as HostEmployee -> 500: server error
    • FAILED: GET /Approvals/Dashboard as Approver -> 500: server error
    • FAILED: GET /Permissions/1 as HostEmployee -> 500: server error
    • FAILED: GET /Permissions/1 as Approver -> 500: server error
    • FAILED: GET /Permissions/1 as SecurityOfficer -> 500: server error
    • FAILED: GET /Permissions/1 as ItAdmin -> 500: server error

    أُصلح (⁨3⁩)

    • VisitorPermitSystem.Tests/GateVerificationControllerTests.cs: error CS1061: 'IServiceCollection' does not contain a definition for 'RemoveAll' and no accessible extension method 'RemoveAll' accepting
    • VisitorPermitSystem.Tests/ReportsTests.cs: error CS1061: 'IWebHostBuilder' does not contain a definition for 'UseEnvironment' and no accessible extension method 'UseEnvironment' accepting a first argu
    • VisitorPermitSystem.Tests/VisitorRequestsControllerTests.cs: error CS1061: 'IWebHostBuilder' does not contain a definition for 'UseEnvironment' and no accessible extension method 'UseEnvironment' acce
    المخرجات كاملة
    ### What failed (gathered from the output below)
    Failed VisitorPermitSystem.Tests.VisitorRequestsControllerTests.Details_Accessible_To_ItAdmin [5 ms]
    Failed VisitorPermitSystem.Tests.VisitorRequestsControllerTests.Details_Accessible_To_HostEmployee [3 ms]
    Failed VisitorPermitSystem.Tests.VisitorRequestsControllerTests.Index_Redirects_Anonymous_User_To_Login [16 ms]
    Failed VisitorPermitSystem.Tests.VisitorRequestsControllerTests.Create_Post_With_Invalid_Data_Returns_View_With_Errors [2 ms]
    Failed VisitorPermitSystem.Tests.VisitorRequestsControllerTests.Index_Accessible_To_HostEmployee [41 ms]
    Failed VisitorPermitSystem.Tests.VisitorRequestsControllerTests.Details_Accessible_To_Approver [3 ms]
    Failed VisitorPermitSystem.Tests.VisitorRequestsControllerTests.Create_Post_Creates_Request_And_Redirects [3 ms]
    FAILED: GET /VisitorRequests/1 as HostEmployee -> 500: server error
    FAILED: GET /VisitorRequests/1 as Approver -> 500: server error
    FAILED: GET /VisitorRequests/1 as ItAdmin -> 500: server error
    FAILED: GET /VisitorRequests as HostEmployee -> 500: server error
    FAILED: GET /Approvals/Dashboard as Approver -> 500: server error
    FAILED: GET /Permissions/1 as HostEmployee -> 500: server error
    FAILED: GET /Permissions/1 as Approver -> 500: server error
    FAILED: GET /Permissions/1 as SecurityOfficer -> 500: server error
    FAILED: GET /Permissions/1 as ItAdmin -> 500: server error
    
    ...
     keyword 'initial catalog' is not supported. For a possible alternative, see https://go.microsoft.com/fwlink/?linkid=2142181.
          System.ArgumentException: Connection string keyword 'initial catalog' is not supported. For a possible alternative, see https://go.microsoft.com/fwlink/?linkid=2142181.
    fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
          An unhandled exception has occurred while executing the request.
          System.ArgumentException: Connection string keyword 'initial catalog' is not supported. For a possible alternative, see https://go.microsoft.com/fwlink/?linkid=2142181.
             at VisitorPermitSystem.Services.VisitRequestService.GetVisitRequestAsync(Int32 id) in /workspace/VisitorPermitSystem/Services/VisitRequestService.cs:line 159
             at VisitorPermitSystem.Controllers.VisitorRequestsController.Details(Int32 id) in /workspace/VisitorPermitSystem/Controllers/VisitorRequestsController.cs:line 88
    fail: Microsoft.EntityFrameworkCore.Query[10100]
          An exception occurred while iterating over the results of a query for context type 'VisitorPermitSystem.Data.VisitorPermitDbContext'.
          System.ArgumentException: Connection string keyword 'initial catalog' is not supported. For a possible alternative, see https://go.microsoft.com/fwlink/?linkid=2142181.
          System.ArgumentException: Connection string keyword 'initial catalog' is not supported. For a possible alternative, see https://go.microsoft.com/fwlink/?linkid=2142181.
    fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
          An unhandled exception has occurred while executing the request.
          System.ArgumentException: Connection string keyword 'initial catalog' is not supported. For a possible alternative, see https://go.microsoft.com/fwlink/?linkid=2142181.
             at VisitorPermitSystem.Services.VisitRequestService.GetVisitRequestAsync(Int32 id) in /workspace/VisitorPermitSystem/Services/VisitRequestService.cs:line 159
             at VisitorPermitSystem.Controllers.VisitorRequestsController.Details(Int32 id) in /workspace/VisitorPermitSystem/Controllers/VisitorRequestsController.cs:line 88
    fail: Microsoft.EntityFrameworkCore.Query[10100]
          An exception occurred while iterating over the results of a query for context type 'VisitorPermitSystem.Data.VisitorPermitDbContext'.
          System.ArgumentException: Connection string keyword 'initial catalog' is not supported. For a possible alternative, see https://go.microsoft.com/fwlink/?linkid=2142181.
          System.ArgumentException: Connection string keyword 'initial catalog' is not supported. For a possible alternative, see https://go.microsoft.com/fwlink/?linkid=2142181.
    fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
          An unhandled exception has occurred while executing the request.
          System.ArgumentException: Connection string keyword 'initial catalog' is not supported. For a possible alternative, see https://go.microsoft.com/fwlink/?linkid=2142181.
             at VisitorPermitSystem.Services.VisitRequestService.GetVisitRequestsByHostAsync(String hostUserId) in /workspace/VisitorPermitSystem/Services/VisitRequestService.cs:line 173
             at VisitorPermitSystem.Controllers.VisitorRequestsController.Index() in /workspace/VisitorPermitSystem/Controllers/VisitorRequestsController.cs:line 29
    fail: Microsoft.EntityFrameworkCore.Query[10100]
          An exception occurred while iterating over the results of a query for context type 'VisitorPermitSystem.Data.VisitorPermitDbContext'.
          System.ArgumentException: Connection string keyword 'initial catalog' is not supported. For a possible alternative, see https://go.microsoft.com/fwlink/?linkid=2142181.
          System.ArgumentException: Connection string keyword 'initial catalog' is not supported. For a possible alternative, see https://go.microsoft.com/fwlink/?linkid=2142181.
    fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
          An unhandled exception has occurred while executing the request.
          System.ArgumentException: Connection string keyword 'initial catalog' is not supported. For a possible alternative, see https://go.microsoft.com/fwlink/?linkid=2142181.
             at VisitorPermitSystem.Services.ApprovalService.GetPendingRequestsAsync() in /workspace/VisitorPermitSystem/Services/ApprovalService.cs:line 178
             at VisitorPermitSystem.Controllers.ApprovalsController.Dashboard(Nullable`1 status, Nullable`1 fromDate, Nullable`1 toDate) in /workspace/VisitorPermitSystem/Controllers/ApprovalsController.cs:line 33
    
    ### result
    FAILED
    الإصلاح ⁨3⁩: انتهى وقته 30:01

    انتهى وقت Qwen Code قبل أن يقدّم ملخصًا.

    عُدّل ملف واحد في هذه الجولة:

    • VisitorPermitSystem/Program.cs
  4. الفحص ⁨4⁩: 5 إخفاقات 0:09

    مقارنة بالفحص السابق: أُصلح ⁨14⁩، وما زال ⁨2⁩ يفشل، و⁨3⁩ جديد.

    ما زال يفشل (⁨2⁩)

    • Failed VisitorPermitSystem.Tests.VisitorRequestsControllerTests.Create_Post_Creates_Request_And_Redirects
    • FAILED: GET /Approvals/Dashboard as Approver -> 500: server error

    جديد (⁨3⁩)

    • Failed VisitorPermitSystem.Tests.ProgramTests.Role_Specific_Routes_Are_Accessible_To_Authorized_Roles(role: "Approver", path: "/Approvals/Dashboard")
    • Failed VisitorPermitSystem.Tests.ProgramTests.Services_Work_With_Sqlite_In_Memory
    • Failed VisitorPermitSystem.Tests.ProgramTests.Protected_Routes_Redirect_Anonymous_Users_To_Login

    أُصلح (⁨14⁩)

    • Failed VisitorPermitSystem.Tests.VisitorRequestsControllerTests.Details_Accessible_To_ItAdmin
    • Failed VisitorPermitSystem.Tests.VisitorRequestsControllerTests.Details_Accessible_To_HostEmployee
    • Failed VisitorPermitSystem.Tests.VisitorRequestsControllerTests.Index_Redirects_Anonymous_User_To_Login
    • Failed VisitorPermitSystem.Tests.VisitorRequestsControllerTests.Create_Post_With_Invalid_Data_Returns_View_With_Errors
    • Failed VisitorPermitSystem.Tests.VisitorRequestsControllerTests.Index_Accessible_To_HostEmployee
    • Failed VisitorPermitSystem.Tests.VisitorRequestsControllerTests.Details_Accessible_To_Approver
    • FAILED: GET /VisitorRequests/1 as HostEmployee -> 500: server error
    • FAILED: GET /VisitorRequests/1 as Approver -> 500: server error
    • FAILED: GET /VisitorRequests/1 as ItAdmin -> 500: server error
    • FAILED: GET /VisitorRequests as HostEmployee -> 500: server error
    • FAILED: GET /Permissions/1 as HostEmployee -> 500: server error
    • FAILED: GET /Permissions/1 as Approver -> 500: server error
    • FAILED: GET /Permissions/1 as SecurityOfficer -> 500: server error
    • FAILED: GET /Permissions/1 as ItAdmin -> 500: server error

    وصل الفحص إلى: dotnet: start the application and open every page

    المخرجات كاملة
    ### What failed (gathered from the output below)
    Failed VisitorPermitSystem.Tests.VisitorRequestsControllerTests.Create_Post_Creates_Request_And_Redirects [57 ms]
    Failed VisitorPermitSystem.Tests.ProgramTests.Role_Specific_Routes_Are_Accessible_To_Authorized_Roles(role: "Approver", path: "/Approvals/Dashboard") [31 ms]
    Failed VisitorPermitSystem.Tests.ProgramTests.Services_Work_With_Sqlite_In_Memory [5 ms]
    Failed VisitorPermitSystem.Tests.ProgramTests.Protected_Routes_Redirect_Anonymous_Users_To_Login [3 ms]
    FAILED: GET /Approvals/Dashboard as Approver -> 500: server error
    
    ...
    ce:
    [xUnit.net 00:00:01.97]         /workspace/VisitorPermitSystem.Tests/ProgramTests.cs(111,0): at VisitorPermitSystem.Tests.ProgramTests.Protected_Routes_Redirect_Anonymous_Users_To_Login()
    [xUnit.net 00:00:01.97]         --- End of stack trace from previous location ---
    [xUnit.net 00:00:01.97]   Finished:    VisitorPermitSystem.Tests
      Error Message:
       Microsoft.EntityFrameworkCore.DbUpdateException : An error occurred while saving the entity changes. See the inner exception for details.
    ---- Microsoft.Data.Sqlite.SqliteException : SQLite Error 19: 'FOREIGN KEY constraint failed'.
      Stack Trace:
         at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.ExecuteAsync(IRelationalConnection connection, CancellationToken cancellationToken)
       at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.ExecuteAsync(IEnumerable`1 commandBatches, IRelationalConnection connection, CancellationToken cancellationToken)
       at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.ExecuteAsync(IEnumerable`1 commandBatches, IRelationalConnection connection, CancellationToken cancellationToken)
       at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.ExecuteAsync(IEnumerable`1 commandBatches, IRelationalConnection connection, CancellationToken cancellationToken)
       at Microsoft.EntityFrameworkCore.Storage.RelationalDatabase.SaveChangesAsync(IList`1 entries, CancellationToken cancellationToken)
       at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChangesAsync(IList`1 entriesToSave, CancellationToken cancellationToken)
       at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChangesAsync(StateManager stateManager, Boolean acceptAllChangesOnSuccess, CancellationToken cancellationToken)
       at Microsoft.EntityFrameworkCore.DbContext.SaveChangesAsync(Boolean acceptAllChangesOnSuccess, CancellationToken cancellationToken)
       at Microsoft.EntityFrameworkCore.DbContext.SaveChangesAsync(Boolean acceptAllChangesOnSuccess, CancellationToken cancellationToken)
       at VisitorPermitSystem.Services.AuditService.LogActionAsync(String userId, String action, String entityName, String entityId, String details) in /workspace/VisitorPermitSystem/Services/AuditService.cs:line 28
       at VisitorPermitSystem.Tests.ProgramTests.Services_Work_With_Sqlite_In_Memory() in /workspace/VisitorPermitSystem.Tests/ProgramTests.cs:line 131
    --- End of stack trace from previous location ---
    ----- Inner Stack Trace -----
       at Microsoft.Data.Sqlite.SqliteException.ThrowExceptionForRC(Int32 rc, sqlite3 db)
       at Microsoft.Data.Sqlite.SqliteDataReader.NextResult()
       at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(CommandBehavior behavior)
       at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReaderAsync(CommandBehavior behavior, CancellationToken cancellationToken)
       at Microsoft.Data.Sqlite.SqliteCommand.ExecuteDbDataReaderAsync(CommandBehavior behavior, CancellationToken cancellationToken)
       at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
       at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
       at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.ExecuteAsync(IRelationalConnection connection, CancellationToken cancellationToken)
      Error Message:
       Assert.Equal() Failure: Values differ
    Expected: Found
    Actual:   Unauthorized
      Stack Trace:
         at VisitorPermitSystem.Tests.ProgramTests.Protected_Routes_Redirect_Anonymous_Users_To_Login() in /workspace/VisitorPermitSystem.Tests/ProgramTests.cs:line 111
    --- End of stack trace from previous location ---
    Test Run Failed.
    Total tests: 130
         Passed: 103
         Failed: 27
     Total time: 2.2722 Seconds
    
    ### dotnet: start the application and open every page
    starting VisitorPermitSystem/VisitorPermitSystem.csproj on SQLite, then GET 10 routes, 27 requests with the roles they name
    answering after 1s
    GET / -> 404
    GET /Account/Login -> 200
    GET /VisitorRequests/Create -> 401
    GET /VisitorRequests/Create as HostEmployee -> 200
    GET /VisitorRequests/1 -> 401
    GET /VisitorRequests/1 as HostEmployee -> 404
    GET /VisitorRequests/1 as Approver -> 404
    GET /VisitorRequests/1 as ItAdmin -> 404
    GET /VisitorRequests -> 401
    GET /VisitorRequests as HostEmployee -> 200
    GET /Approvals/Dashboard -> 401
    GET /Permissions/1 -> 401
    GET /Permissions/1 as HostEmployee -> 404
    GET /Permissions/1 as Approver -> 404
    GET /Permissions/1 as SecurityOfficer -> 404
    GET /Permissions/1 as ItAdmin -> 404
    GET /GateVerification -> 401
    GET /GateVerification as SecurityOfficer -> 200
    GET /History -> 401
    GET /History as Approver -> 200
    GET /History as ItAdmin -> 200
    GET /History as Auditor -> 200
    GET /Reports/Weekly -> 401
    GET /Reports/Weekly as Approver -> 200
    GET /Reports/Weekly as ItAdmin -> 200
    GET /Reports/Weekly as Auditor -> 200
    
    The application's log:
    fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
          An unhandled exception has occurred while executing the request.
          System.ArgumentNullException: Value cannot be null. (Parameter 'source')
             at AspNetCoreGeneratedDocument.Views_Approvals_Dashboard.ExecuteAsync() in /workspace/VisitorPermitSystem/Views/Approvals/Dashboard.cshtml:line 7
    
    ### result
    FAILED

استراتيجية الاختبار

تعتمد استراتيجية اختبار نظام إدارة تصاريح دخول الزوار على منهجية هرمية متكاملة تضمن التحقق من صحة كل طبقة في البنية التقنية للنظام، بدءاً من الوحدات المنفصلة وصولاً إلى بيئة التشغيل الفعلية. يتم تنفيذ الاختبار الوظيفي على مستوى الوحدات (Unit Testing) باستخدام إطار xUnit ضمن مشروع الاختبارات المخصص، حيث تُختبر الخدمات المنطقية في مجلد Services بشكل معزول، مع محاكاة الاعتماديات الخارجية مثل واجهات نظام الموارد البشرية عبر بديلات محلية (Mocks) لضمان سرعة التنفيذ ودقة النتائج. كما يُجرى اختبار الواجهات البرمجية (API Testing) للتحقق من صحة مسارات HTTP واستجابات وحدات التحكم في مجلد Controllers، مع التركيز على التحقق من أكواد الحالة (Status Codes) ومطابقة البيانات المرسلة مع نماذج البيانات المعتمدة في مجلد Models. على مستوى التكامل (Integration Testing)، يتم تشغيل التطبيق بالكامل عبر WebApplicationFactory<Program> ضد قاعدة بيانات SQLite في الذاكرة، للتحقق من سلامة تسجيل الخدمات في Program.cs، وصحة الترحيلات (Migrations)، وتكامل طبقة الوصول إلى البيانات عبر Entity Framework Core مع منطق الأعمال، بما في ذلك مسارات المصادقة والصلاحيات باستخدام سمة [Authorize]. أما الاختبار الوظيفي الشامل (End-to-End Testing) فيُنفذ يدوياً وبمساعدة أتمتة على بيئة التطوير، لتغطية السيناريوهات الكاملة من تقديم الطلب حتى تسجيل الخروج، مع التركيز على التحقق من متطلبات الأداء NFR-01 و NFR-05، وضمان استجابة النظام خلال الحدود الزمنية المحددة لعمليات التحقق من رمز QR واسترجاع السجلات التاريخية. يتم أتمتة الاختبارات الوظيفية الأساسية المرتبطة بالمتطلبات الحرجة (must) مثل FR-01 و FR-03 و FR-04 و FR-05، لتُنفذ تلقائياً مع كل عملية بناء (Build) في خط التكامل المستمر، بينما تبقى الاختبارات المرتبطة بواجهات المستخدم البصرية والتبديل بين اللغتين NFR-04 تحت إشراف الاختبار اليدوي لضمان جودة التجربة. يتولى فريق التطوير مسؤولية كتابة وتنفيذ اختبارات الوحدات والواجهات البرمجية، بينما يتولى فريق الاختبار المتخصص مسؤولية تصميم سيناريوهات الاختبار الشامل والتحقق من معايير القبول، مع إشراك ممثلين عن الجهات المختصة وموظفي الأمن في مرحلة الاختبار التجريبي (UAT) للتأكد من ملاءمة الواجهات SCR-03 و SCR-05 لاحتياجاتهم التشغيلية الفعلية.

حالات الاختبار

  1. TC-01
    تقديم طلب زيارة إلكتروني جديد من قبل الموظف المستضيف يتضمن بيانات الزائر وتاريخ الزيارة والغرض منها، والتحقق من حفظ الطلب في قاعدة البيانات وتغيير حالته إلى "مقدم" دون الحاجة إلى نماذج ورقية.
    أساسييتحقق من ⁨FR-01⁩
  2. TC-02
    مراجعة طلب زيارة معلق من قبل الجهة المختصة واتخاذ قرار الاعتماد عن بُعد، والتحقق من توليد تصريح معتمد تلقائياً وربطه ببيانات الزائر المحددة.
    مهميتحقق من ⁨FR-02⁩
  3. TC-03
    مراجعة طلب زيارة معلق من قبل الجهة المختصة واتخاذ قرار الرفض عن بُعد مع توثيق سبب الرفض، والتحقق من تحديث حالة الطلب إلى "مرفوض" في قاعدة البيانات.
    مهميتحقق من ⁨FR-02⁩
  4. TC-04
    التحقق من توليد رمز QR فريد لكل تصريح معتمد يربطه ببيانات الزائر المحددة وتاريخ سريان التصريح وانتهائه، والتأكد من عدم إمكانية تعديل البيانات بعد الاعتماد.
    أساسييتحقق من ⁨FR-03⁩
  5. TC-05
    استخدام واجهة برمجية (API) لقراءة رمز QR من جهاز البوابة والتحقق الفوري من مطابقة هوية الزائر مع بيانات التصريح المعتمد، والتأكد من سرعة الاستجابة وفقاً لمتطلبات الأداء.
    أساسييتحقق من ⁨FR-04⁩ و⁨NFR-01⁩
  6. TC-06
    التحقق من تسجيل بيانات دخول وخروج الزائر تلقائياً في قاعدة البيانات المركزية لحظة التحقق من التصريح عند البوابة، والتأكد من تحديث حالة التصريح إلى "دخل" أو "خرج".
    أساسييتحقق من ⁨FR-05⁩
  7. TC-07
    استرجاع سجلات الزيارات التاريخية والعمليات المسجلة بناءً على معايير البحث المحددة (مثل التاريخ، اسم الزائر، رقم التصريح)، والتحقق من عرض النتائج خلال أقل من 5 ثوانٍ.
    أساسييتحقق من ⁨FR-06⁩ و⁨NFR-05⁩
  8. TC-08
    عرض حالة الطلبات المعلقة والمعالجة في لوحة تحكم واضحة للجهات المختصة، والتحقق من إتاحة فلاتر بحث متقدمة لمتابعة العمليات دون تأخير.
    مهميتحقق من ⁨FR-07⁩
  9. TC-09
    التحقق من إرسال إشعارات فورية للموظف المستضيف والجهة المختصة عند تغيير حالة الطلب من تقديم إلى اعتماد أو رفض.
    مهميتحقق من ⁨FR-08⁩
  10. TC-10
    توليد تقارير إحصائية أسبوعية تلقائية تتضمن حجم الزيارات وأنواعها وتوزيعها الزمني للجهات الإدارية، والتحقق من دقة البيانات الواردة في التقارير.
    اختيارييتحقق من ⁨FR-09⁩
  11. TC-11
    محاولة الوصول إلى بيانات الزوار وسجلات العمليات الحساسة من قبل مستخدم غير مصرح به، والتحقق من منع الوصول وتطبيق مستويات الصلاحيات الدقيقة.
    أساسييتحقق من ⁨FR-10⁩
  12. TC-12
    استخدام واجهة استخدام بسيطة وسريعة لموظف الأمن تتيح له تنفيذ عملية التحقق وتسجيل الدخول والخروج دون تعقيد تقني، والتحقق من سهولة الاستخدام وسرعة الاستجابة.
    مهميتحقق من ⁨FR-11⁩
  13. TC-13
    التحقق من تكامل النظام مع نظام الموارد البشرية الحالي لاستيراد بيانات الموظفين المستضيفين تلقائياً دون إجراء تعديلات جوهرية على النظام المصدر.
    أساسييتحقق من ⁨FR-12⁩
  14. TC-14
    التحقق من تشفير جميع البيانات الشخصية للزوار والموظفين أثناء النقل والتخزين باستخدام خوارزميات معتمدة من هيئة الحكومة الرقمية السعودية.
    أساسييتحقق من ⁨NFR-03⁩
  15. TC-15
    التبديل الفوري بين اللغتين العربية والإنجليزية في الواجهات البرمجية ولوحات التحكم، والتحقق من عدم فقدان البيانات أو إعادة تحميل الصفحة أثناء التبديل.
    مهميتحقق من ⁨NFR-04⁩

بيئة الاختبار

تُنفذ جميع أنشطة الاختبار في بيئة اختبار معزولة تماماً عن بيئة الإنتاج، وتعمل هذه البيئة على نفس البنية التقنية المعتمدة في التشغيل الفعلي، حيث يتم تشغيل تطبيق ASP.NET Core Web API ضمن إطار عمل .NET 10 (LTS) مع استخدام قاعدة بيانات Microsoft SQL Server كنسخة مطابقة لمخطط الإنتاج. لضمان دقة النتائج ومحاكاة الظروف التشغيلية الحقيقية، يتم تهيئة بيئة الاختبار باستخدام بيانات اختبار اصطناعية ومولدة آلياً، تشمل سجلات طلبات الزيارة، والتصاريح المعتمدة، وحركات الدخول والخروج، والمستخدمين والصلاحيات، مع ضمان عدم استخدام أي بيانات شخصية حقيقية أو معلومات حساسة مستمدة من بيئة الإنتاج. يتم توليد رموز QR فريدة للبيانات الاختبارية لتغطية سيناريوهات التحقق عند البوابات، وتُستخدم حسابات مستخدمين وهمية تمثل الأدوار الوظيفية المختلفة (الموظف المستضيف، الجهة المختصة، موظف الأمن، إدارة تقنية المعلومات) لاختبار آليات المصادقة والصلاحيات. لحماية البيانات في بيئة الاختبار، تُطبق نفس اشتراطات التشفير المعتمدة من هيئة الحكومة الرقمية السعودية للبيانات الشخصية أثناء النقل والتخزين، وفقاً للمتطلب NFR-03، مع عزل الشبكة عن الأنظمة الخارجية غير المرتبطة مباشرة بمسار الاختبار. كما يتم تطبيق مبدأ أقل صلاحيات ممكن على حسابات الاختبار لضمان عدم الوصول غير المصرح به، وتُحفظ جميع سجلات العمليات في بيئة الاختبار في قاعدة بيانات مخصصة لا تتشارك مع أي قواعد بيانات أخرى، مع إتاحة إمكانية إعادة تهيئة البيانات (Reset) قبل كل جولة اختبار لضمان استقلالية النتائج ومنع تأثير البيانات السابقة على الاختبارات اللاحقة.

معايير إنهاء الاختبار

تُعد معايير الخروج الشرط النهائي لاعتماد نظام إدارة تصاريح دخول الزوار ودخوله مرحلة التشغيل الفعلي، حيث يجب أن يحقق النظام جميع النتائج المستهدفة الموثقة في خطة الاختبار قبل التوقيع على شهادة الجاهزية. يشترط أولاً اجتياز جميع حالات الاختبار ذات الأولوية [must] بنسبة نجاح 100%، مع معالجة جميع العيوب الحرجة والخطيرة التي تم رصدها خلال دورات الاختبار، على أن لا يتبقى أي عيب من المستوى الأول أو الثاني غير المعالج. كما يجب إثبات كفاءة دورة الاعتماد الإلكتروني من خلال قياس متوسط زمن معالجة الطلبات، مع ضمان ألا يتجاوز هذا الزمن 4 ساعات عمل في المتوسط وفقاً للمتطلب BR-02، والتحقق من أن نسبة العمليات التي تتم بالكامل إلكترونياً دون استخدام نماذج ورقية لا تتجاوز 10% من إجمالي العمليات وفقاً للمتطلب BR-01. وفيما يتعلق بأمن البيانات ودقتها، يُشترط تحقيق نسبة دقة 100% في مطابقة بيانات الزائر مع التصريح المعتمد عند بوابة الدخول وفقاً للمتطلب BR-03، مع التأكد من استجابة النظام لعمليات التحقق من رمز QR وتسجيل بيانات الدخول خلال أقل من 30 ثانية كحد أقصى وفقاً للمتطلب NFR-01 والمتطلب BR-07. كما يجب إثبات توفر سجل إلكتروني دائم وموثق لجميع عمليات الدخول والخروج يمكن استرجاعه خلال أقل من 5 ثوانٍ وفقاً للمتطلب BR-04 والمتطلب NFR-05، مع ضمان عدم فقدان أي بيانات أثناء عمليات الاسترجاع. يُشترط أيضاً التحقق من مستوى توافر النظام الذي يجب أن يصل إلى 99.9% على مدار الساعة طوال أيام الأسبوع وفقاً للمتطلب NFR-02، مع استثناء فترات الصيانة المجدولة مسبقاً. ويعتبر الامتثال لاشتراطات حماية البيانات الوطنية شرطاً جوهرياً، حيث يجب أن يثبت النظام تطبيقه لأعلى معايير التشفير للبيانات الشخصية أثناء النقل والتخزين وفقاً للمتطلب NFR-03، مع توفير آلية مصادقة متعددة العوامل للمستخدمين الإداريين والجهات المختصة وفقاً للمتطلب NFR-06. كما يجب التحقق من إمكانية الجهات المختصة في مراجعة واعتماد الطلبات عن بُعد دون الحاجة إلى تواجد في الموقع وفقاً للمتطلب BR-06، مع ضمان وضوح لوحة التحكم لعرض حالة الطلبات المعلقة وفقاً للمتطلب FR-07. ويُشترط التحقق من دقة التقارير الإحصائية الأسبوعية التلقائية وفقاً للمتطلب BR-08 والمتطلب FR-09، مع ضمان إتاحة التبديل الفوري بين اللغتين العربية والإنجليزية دون فقدان البيانات وفقاً للمتطلب NFR-04. أخيراً، يجب تأكيد تكامل النظام مع نظام الموارد البشرية الحالي دون إجراء تعديلات جوهرية عليه وفقاً للمتطلب FR-12، مع ضمان عدم وجود تعارضات مع أنظمة أمنية أو إدارية أخرى قائمة في المؤسسة. وتُوثق جميع هذه النتائج في تقارير رسمية مفصلة تُعرض على الجهات الرقابية والأمنية العليا لضمان الامتثال الكامل للمتطلبات التنظيمية والأمنية قبل اعتماد الإطلاق.