Skip to content

Add File Processing upload page with required profile/file validation#947

Merged
StuartFerguson merged 2 commits into
mainfrom
copilot/add-file-upload-ui
May 17, 2026
Merged

Add File Processing upload page with required profile/file validation#947
StuartFerguson merged 2 commits into
mainfrom
copilot/add-file-upload-ui

Conversation

Copilot AI commented May 17, 2026

Copy link
Copy Markdown
Contributor

This PR adds the File Processing upload screen under /file-processing/upload and enforces the required input flow: select a file profile and select a CSV file before submission.

  • New File Processing upload page

    • Added Components/Pages/FileProcessing/Upload.razor
    • Introduced UI for:
      • file profile selection (InputSelect)
      • CSV file selection (InputFile, .csv accept filter)
    • Added standard page actions (Upload / Cancel) and navigation back to /file-processing
  • Validation behavior

    • Added form model validation for required profile selection ([Required])
    • Added submit-time validation for required file selection
    • Displays inline validation messages for missing profile and missing file
  • Page-level test coverage

    • Added FileProcessingUploadPageTests.cs with coverage for:
      • rendering required controls
      • submission with missing profile + file
      • submission with profile selected but file missing
<EditForm EditContext="@editContext" OnSubmit="@HandleSubmit">
    <DataAnnotationsValidator />
    <InputSelect @bind-Value="model.FileProfile" class="input w-full" name="FileProfile">
        <option value="">Select a file profile...</option>
        @foreach (var fileProfile in fileProfiles)
        {
            <option value="@fileProfile">@fileProfile</option>
        }
    </InputSelect>

    <InputFile OnChange="@HandleFileSelected" accept=".csv" class="input w-full" />
    <ValidationMessage For="@(() => model.FileProfile)" />
</EditForm>

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • accounts.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4248 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.yBbmMW --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,11142278794958536398,17079323376769413295,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,2754949299023374613,11921179128440717630,4 --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /usr/bin/chromium chromium --headless --disable-gpu --no-sandbox --screenshot=/tmp/file-upload-preview.png --window-size=1280,900 file:///tmp/file-upload-preview.html (dns block)
  • clients2.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4248 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.yBbmMW --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,11142278794958536398,17079323376769413295,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,2754949299023374613,11921179128440717630,4 --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /usr/bin/chromium chromium --headless --disable-gpu --no-sandbox --screenshot=/tmp/file-upload-preview.png --window-size=1280,900 file:///tmp/file-upload-preview.html (dns block)
  • f.feedz.io
    • Triggering command: /usr/bin/dotnet dotnet test EstateManagementUI.BlazorServer.Tests/EstateManagementUI.BlazorServer.Tests.csproj --no-logo (dns block)
    • Triggering command: /usr/bin/dotnet dotnet test EstateManagementUI.BlazorServer.Tests/EstateManagementUI.BlazorServer.Tests.csproj --filter FullyQualifiedName~FileProcessing --no-logo (dns block)
    • Triggering command: /opt/hostedtoolcache/CodeQL/2.25.1/x64/codeql/csharp/tools/linux64/Semmle.Autobuild.CSharp /opt/hostedtoolcache/CodeQL/2.25.1/x64/codeql/csharp/tools/linux64/Semmle.Autobuild.CSharp (dns block)
  • redirector.gvt1.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4248 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.yBbmMW --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,11142278794958536398,17079323376769413295,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,2754949299023374613,11921179128440717630,4 --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /usr/bin/chromium chromium --headless --disable-gpu --no-sandbox --screenshot=/tmp/file-upload-preview.png --window-size=1280,900 file:///tmp/file-upload-preview.html (dns block)
  • www.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4248 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.yBbmMW --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,11142278794958536398,17079323376769413295,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,2754949299023374613,11921179128440717630,4 --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /usr/bin/chromium chromium --headless --disable-gpu --no-sandbox --screenshot=/tmp/file-upload-preview.png --window-size=1280,900 file:///tmp/file-upload-preview.html (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

@codacy-production

codacy-production Bot commented May 17, 2026

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

Copilot AI changed the title [WIP] Add file processing UI for CSV uploads Add File Processing upload page with required profile/file validation May 17, 2026
Copilot AI requested a review from StuartFerguson May 17, 2026 08:47
@StuartFerguson StuartFerguson marked this pull request as ready for review May 17, 2026 09:10
@StuartFerguson StuartFerguson merged commit 0b25feb into main May 17, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Screen to upload batch files for processing

2 participants