-
-
Notifications
You must be signed in to change notification settings - Fork 79
feat(training): Add edit functionality for training module #319
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
ucswift
merged 107 commits into
Resgrid:develop
from
waylonkenning:feature/training-edit-functionality
Apr 10, 2026
Merged
Changes from all commits
Commits
Show all changes
107 commits
Select commit
Hold shift + click to select a range
ada0e55
Merge pull request #147 from Resgrid/develop
ucswift 7172602
Merge pull request #148 from Resgrid/develop
ucswift 1ead6ab
Merge pull request #149 from Resgrid/develop
ucswift 6aae0cd
Merge pull request #150 from Resgrid/develop
ucswift 923c2b6
Merge pull request #152 from Resgrid/develop
ucswift c2a3e6d
Merge pull request #153 from Resgrid/develop
ucswift 9c35c06
Merge pull request #154 from Resgrid/develop
ucswift 4c21f2c
Merge pull request #155 from Resgrid/develop
ucswift 91e01fb
Merge pull request #156 from Resgrid/develop
ucswift 22a7312
Merge pull request #157 from Resgrid/develop
ucswift 85bf4d3
Merge pull request #158 from Resgrid/develop
ucswift de7ac44
Merge pull request #159 from Resgrid/develop
ucswift b1c15a4
Merge pull request #160 from Resgrid/develop
ucswift 4eae821
Merge pull request #161 from Resgrid/develop
ucswift d84dcfc
Merge pull request #165 from Resgrid/develop
ucswift 52798f9
Merge pull request #166 from Resgrid/develop
ucswift 903359d
Merge pull request #167 from Resgrid/develop
ucswift abdc4b3
Merge pull request #170 from Resgrid/develop
ucswift a0ec5c0
Merge pull request #171 from Resgrid/develop
ucswift 1c66305
Merge pull request #172 from Resgrid/develop
ucswift 2e31931
Merge pull request #173 from Resgrid/develop
ucswift e28e442
Merge pull request #174 from Resgrid/develop
ucswift 9898d66
Merge pull request #175 from Resgrid/develop
ucswift a39494c
Merge pull request #176 from Resgrid/develop
ucswift bcc3954
Merge pull request #177 from Resgrid/develop
ucswift 9f18287
Merge pull request #178 from Resgrid/develop
ucswift 90b172c
Merge pull request #179 from Resgrid/develop
ucswift 98f6ff4
Merge pull request #182 from Resgrid/develop
ucswift 49fbda7
Merge pull request #187 from Resgrid/develop
ucswift 70165a2
Merge pull request #191 from Resgrid/develop
ucswift 9c71e22
Merge pull request #193 from Resgrid/develop
ucswift 6f7f95e
Merge pull request #194 from Resgrid/develop
ucswift e99378b
Merge pull request #195 from Resgrid/develop
ucswift 83647ad
Merge pull request #196 from Resgrid/develop
ucswift 014b488
Merge pull request #197 from Resgrid/develop
ucswift 1f3cc3c
Merge pull request #198 from Resgrid/develop
ucswift b232bdc
Merge pull request #199 from Resgrid/develop
ucswift 73c44d2
Merge pull request #200 from Resgrid/develop
ucswift bb07d58
Merge pull request #201 from Resgrid/develop
ucswift 33e394d
Merge pull request #202 from Resgrid/develop
ucswift 0abb4a2
Merge pull request #203 from Resgrid/develop
ucswift c96c5ea
Merge pull request #204 from Resgrid/develop
ucswift 7d8b6e9
Merge pull request #205 from Resgrid/develop
ucswift 26a2b3a
Merge pull request #206 from Resgrid/develop
ucswift cd4eaa8
Merge pull request #207 from Resgrid/develop
ucswift 6b7da55
Merge pull request #209 from Resgrid/develop
ucswift 257211f
Merge pull request #210 from Resgrid/develop
ucswift 183a279
Merge pull request #212 from Resgrid/develop
ucswift 97b6e26
Merge pull request #213 from Resgrid/develop
ucswift 0f3015e
Merge pull request #214 from Resgrid/develop
ucswift 69a8373
Merge pull request #215 from Resgrid/develop
ucswift 7b2a220
Merge pull request #217 from Resgrid/develop
ucswift ead0799
Merge pull request #218 from Resgrid/develop
ucswift b28a253
Merge pull request #219 from Resgrid/develop
ucswift d69a976
Merge pull request #220 from Resgrid/develop
ucswift 48552ac
Merge pull request #221 from Resgrid/develop
ucswift ee808d3
Merge pull request #227 from Resgrid/develop
ucswift 0e5ad48
Merge pull request #230 from Resgrid/develop
ucswift 2d4a780
Merge pull request #232 from Resgrid/develop
ucswift 3fac2b4
Merge pull request #234 from Resgrid/develop
ucswift 3edc042
Merge pull request #235 from Resgrid/develop
ucswift 3a4fde6
Merge pull request #236 from Resgrid/develop
ucswift 963535b
Merge pull request #237 from Resgrid/develop
ucswift 0ea711e
Merge pull request #240 from Resgrid/develop
ucswift 8b3f079
Merge pull request #241 from Resgrid/develop
ucswift d0d01c0
Merge pull request #244 from Resgrid/develop
ucswift 89727e5
Merge pull request #245 from Resgrid/develop
ucswift 4e54b00
Merge pull request #247 from Resgrid/develop
ucswift 298b09b
Merge pull request #249 from Resgrid/develop
ucswift 713677c
Merge pull request #255 from Resgrid/develop
ucswift 0f606fe
Merge pull request #259 from Resgrid/develop
ucswift 52df831
Merge pull request #262 from Resgrid/develop
ucswift 84356ce
Merge pull request #263 from Resgrid/develop
ucswift 9b5e9eb
Merge pull request #264 from Resgrid/develop
ucswift e4a8de4
Merge pull request #265 from Resgrid/develop
ucswift 3eacf2a
Merge pull request #276 from Resgrid/develop
ucswift cc736be
Merge pull request #277 from Resgrid/develop
ucswift e909879
Merge pull request #278 from Resgrid/develop
ucswift 069179f
Merge pull request #279 from Resgrid/develop
ucswift 1da63ab
Merge pull request #280 from Resgrid/develop
ucswift f509d38
Merge pull request #281 from Resgrid/develop
ucswift 9a67d37
Merge pull request #283 from Resgrid/develop
ucswift f7ffd8b
Merge pull request #284 from Resgrid/develop
ucswift 6d30895
Merge pull request #285 from Resgrid/develop
ucswift 3a5b033
Merge pull request #287 from Resgrid/develop
ucswift 93ba417
Merge pull request #292 from Resgrid/develop
ucswift cce3c4f
Merge pull request #294 from Resgrid/develop
ucswift 3e41cf5
Merge pull request #295 from Resgrid/develop
ucswift 115a62c
Merge pull request #296 from Resgrid/develop
ucswift b9c1c75
Merge pull request #297 from Resgrid/develop
ucswift 2dcedec
Merge pull request #298 from Resgrid/develop
ucswift f4ef7f2
Merge pull request #299 from Resgrid/develop
ucswift 9151444
Merge pull request #300 from Resgrid/develop
ucswift 1e4c5be
Merge pull request #301 from Resgrid/develop
ucswift 1a0db64
Merge pull request #302 from Resgrid/develop
ucswift c306095
Merge pull request #303 from Resgrid/develop
ucswift 6f96fa7
Merge pull request #304 from Resgrid/develop
ucswift 9b70aa3
Merge pull request #305 from Resgrid/develop
ucswift 1606ee0
Merge pull request #307 from Resgrid/develop
ucswift dbbce63
Merge pull request #312 from Resgrid/develop
ucswift 6beef8b
Fix: Replace empty divs with proper Bootstrap modals for Respond to C…
waylonkenning 79bf71d
feat(training): Add edit functionality for training module
waylonkenning 0f57208
Update Web/Resgrid.Web/Areas/User/Controllers/TrainingsController.cs
ucswift 9816662
Update Web/Resgrid.Web/Areas/User/Controllers/TrainingsController.cs
ucswift 8280959
Update Web/Resgrid.Web/Areas/User/Models/Training/EditTrainingModel.cs
ucswift 7f5ab14
Update Web/Resgrid.Web/Areas/User/Views/Home/Dashboard.cshtml
ucswift a5d4a8a
Apply suggestion from @coderabbitai[bot]
ucswift File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
103 changes: 103 additions & 0 deletions
103
Tests/Resgrid.Tests/Mocks/MockTrainingAttachmentRepository.cs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,103 @@ | ||
| using System.Collections.Generic; | ||
| using System.Linq; | ||
| using System.Threading; | ||
| using System.Threading.Tasks; | ||
| using Resgrid.Model; | ||
| using Resgrid.Model.Repositories; | ||
|
|
||
| namespace Resgrid.Tests.Mocks | ||
| { | ||
| /// <summary> | ||
| /// In-memory mock for <see cref="ITrainingAttachmentRepository"/> | ||
| /// </summary> | ||
| public sealed class MockTrainingAttachmentRepository : ITrainingAttachmentRepository | ||
| { | ||
| private readonly List<TrainingAttachment> _attachments = new List<TrainingAttachment>(); | ||
| private int _nextId = 1; | ||
|
|
||
| public Task<IEnumerable<TrainingAttachment>> GetAllAsync() | ||
| => Task.FromResult<IEnumerable<TrainingAttachment>>(_attachments.ToList()); | ||
|
|
||
| public Task<TrainingAttachment> GetByIdAsync(object id) | ||
| { | ||
| var intId = (int)id; | ||
| var attachment = _attachments.FirstOrDefault(a => a.TrainingAttachmentId == intId); | ||
| return Task.FromResult(attachment); | ||
| } | ||
|
|
||
| public Task<IEnumerable<TrainingAttachment>> GetAllByDepartmentIdAsync(int departmentId) | ||
| => Task.FromResult<IEnumerable<TrainingAttachment>>(new List<TrainingAttachment>()); | ||
|
|
||
| public Task<IEnumerable<TrainingAttachment>> GetAllByUserIdAsync(string userId) | ||
| => Task.FromResult<IEnumerable<TrainingAttachment>>(new List<TrainingAttachment>()); | ||
|
|
||
| public Task<TrainingAttachment> InsertAsync(TrainingAttachment entity, CancellationToken cancellationToken, bool firstLevelOnly = false) | ||
| { | ||
| entity.TrainingAttachmentId = _nextId++; | ||
| _attachments.Add(entity); | ||
| return Task.FromResult(entity); | ||
| } | ||
|
|
||
| public Task<TrainingAttachment> UpdateAsync(TrainingAttachment entity, CancellationToken cancellationToken, bool firstLevelOnly = false) | ||
| { | ||
| var existing = _attachments.FirstOrDefault(a => a.TrainingAttachmentId == entity.TrainingAttachmentId); | ||
| if (existing != null) | ||
| { | ||
| _attachments.Remove(existing); | ||
| } | ||
| _attachments.Add(entity); | ||
| return Task.FromResult(entity); | ||
| } | ||
|
|
||
| public Task<bool> DeleteAsync(TrainingAttachment entity, CancellationToken cancellationToken) | ||
| { | ||
| var existing = _attachments.FirstOrDefault(a => a.TrainingAttachmentId == entity.TrainingAttachmentId); | ||
| if (existing != null) | ||
| { | ||
| _attachments.Remove(existing); | ||
| } | ||
| return Task.FromResult(true); | ||
| } | ||
|
|
||
| public Task<TrainingAttachment> SaveOrUpdateAsync(TrainingAttachment entity, CancellationToken cancellationToken, bool firstLevelOnly = false) | ||
| { | ||
| if (entity.TrainingAttachmentId == 0) | ||
| { | ||
| entity.TrainingAttachmentId = _nextId++; | ||
| _attachments.Add(entity); | ||
| } | ||
| else | ||
| { | ||
| var existing = _attachments.FirstOrDefault(a => a.TrainingAttachmentId == entity.TrainingAttachmentId); | ||
| if (existing != null) | ||
| { | ||
| _attachments.Remove(existing); | ||
| } | ||
| _attachments.Add(entity); | ||
| } | ||
| return Task.FromResult(entity); | ||
| } | ||
|
|
||
| public Task<bool> DeleteMultipleAsync(TrainingAttachment entity, string parentKeyName, object parentKeyId, List<object> ids, CancellationToken cancellationToken) | ||
| => Task.FromResult(true); | ||
|
|
||
| public Task<IEnumerable<TrainingAttachment>> GetTrainingAttachmentsByTrainingIdAsync(int trainingId) | ||
| { | ||
| var result = _attachments.Where(a => a.TrainingId == trainingId).ToList(); | ||
| return Task.FromResult<IEnumerable<TrainingAttachment>>(result); | ||
| } | ||
|
|
||
| public void SeedAttachment(TrainingAttachment attachment) | ||
| { | ||
| if (attachment.TrainingAttachmentId == 0) | ||
| { | ||
| attachment.TrainingAttachmentId = _nextId++; | ||
| } | ||
| else | ||
| { | ||
| _nextId = System.Math.Max(_nextId, attachment.TrainingAttachmentId + 1); | ||
| } | ||
| _attachments.Add(attachment); | ||
| } | ||
| } | ||
| } |
103 changes: 103 additions & 0 deletions
103
Tests/Resgrid.Tests/Mocks/MockTrainingQuestionRepository.cs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,103 @@ | ||
| using System.Collections.Generic; | ||
| using System.Linq; | ||
| using System.Threading; | ||
| using System.Threading.Tasks; | ||
| using Resgrid.Model; | ||
| using Resgrid.Model.Repositories; | ||
|
|
||
| namespace Resgrid.Tests.Mocks | ||
| { | ||
| /// <summary> | ||
| /// In-memory mock for <see cref="ITrainingQuestionRepository"/> | ||
| /// </summary> | ||
| public sealed class MockTrainingQuestionRepository : ITrainingQuestionRepository | ||
| { | ||
| private readonly List<TrainingQuestion> _questions = new List<TrainingQuestion>(); | ||
| private int _nextId = 1; | ||
|
|
||
| public Task<IEnumerable<TrainingQuestion>> GetAllAsync() | ||
| => Task.FromResult<IEnumerable<TrainingQuestion>>(_questions.ToList()); | ||
|
|
||
| public Task<TrainingQuestion> GetByIdAsync(object id) | ||
| { | ||
| var intId = (int)id; | ||
| var question = _questions.FirstOrDefault(q => q.TrainingQuestionId == intId); | ||
| return Task.FromResult(question); | ||
| } | ||
|
|
||
| public Task<IEnumerable<TrainingQuestion>> GetAllByDepartmentIdAsync(int departmentId) | ||
| => Task.FromResult<IEnumerable<TrainingQuestion>>(new List<TrainingQuestion>()); | ||
|
|
||
| public Task<IEnumerable<TrainingQuestion>> GetAllByUserIdAsync(string userId) | ||
| => Task.FromResult<IEnumerable<TrainingQuestion>>(new List<TrainingQuestion>()); | ||
|
|
||
| public Task<TrainingQuestion> InsertAsync(TrainingQuestion entity, CancellationToken cancellationToken, bool firstLevelOnly = false) | ||
| { | ||
| entity.TrainingQuestionId = _nextId++; | ||
| _questions.Add(entity); | ||
| return Task.FromResult(entity); | ||
| } | ||
|
|
||
| public Task<TrainingQuestion> UpdateAsync(TrainingQuestion entity, CancellationToken cancellationToken, bool firstLevelOnly = false) | ||
| { | ||
| var existing = _questions.FirstOrDefault(q => q.TrainingQuestionId == entity.TrainingQuestionId); | ||
| if (existing != null) | ||
| { | ||
| _questions.Remove(existing); | ||
| } | ||
| _questions.Add(entity); | ||
| return Task.FromResult(entity); | ||
| } | ||
|
|
||
| public Task<bool> DeleteAsync(TrainingQuestion entity, CancellationToken cancellationToken) | ||
| { | ||
| var existing = _questions.FirstOrDefault(q => q.TrainingQuestionId == entity.TrainingQuestionId); | ||
| if (existing != null) | ||
| { | ||
| _questions.Remove(existing); | ||
| } | ||
| return Task.FromResult(true); | ||
| } | ||
|
|
||
| public Task<TrainingQuestion> SaveOrUpdateAsync(TrainingQuestion entity, CancellationToken cancellationToken, bool firstLevelOnly = false) | ||
| { | ||
| if (entity.TrainingQuestionId == 0) | ||
| { | ||
| entity.TrainingQuestionId = _nextId++; | ||
| _questions.Add(entity); | ||
| } | ||
| else | ||
| { | ||
| var existing = _questions.FirstOrDefault(q => q.TrainingQuestionId == entity.TrainingQuestionId); | ||
| if (existing != null) | ||
| { | ||
| _questions.Remove(existing); | ||
| } | ||
| _questions.Add(entity); | ||
| } | ||
| return Task.FromResult(entity); | ||
| } | ||
|
|
||
| public Task<bool> DeleteMultipleAsync(TrainingQuestion entity, string parentKeyName, object parentKeyId, List<object> ids, CancellationToken cancellationToken) | ||
| => Task.FromResult(true); | ||
|
|
||
| public Task<IEnumerable<TrainingQuestion>> GetTrainingQuestionsByTrainingIdAsync(int trainingId) | ||
| { | ||
| var result = _questions.Where(q => q.TrainingId == trainingId).ToList(); | ||
| return Task.FromResult<IEnumerable<TrainingQuestion>>(result); | ||
| } | ||
|
|
||
| public void SeedQuestion(TrainingQuestion question) | ||
| { | ||
| if (question.TrainingQuestionId == 0) | ||
| { | ||
| question.TrainingQuestionId = _nextId++; | ||
| } | ||
| else | ||
| { | ||
| _nextId = System.Math.Max(_nextId, question.TrainingQuestionId + 1); | ||
| } | ||
| _questions.Add(question); | ||
| } | ||
|
Comment on lines
+90
to
+101
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Seeding the same Proposed fix public void SeedQuestion(TrainingQuestion question)
{
+ var existing = _questions.FirstOrDefault(q => q.TrainingQuestionId == question.TrainingQuestionId);
+ if (existing != null)
+ {
+ _questions.Remove(existing);
+ }
+
if (question.TrainingQuestionId == 0)
{
question.TrainingQuestionId = _nextId++;
}
else
{
_nextId = System.Math.Max(_nextId, question.TrainingQuestionId + 1);
}
_questions.Add(question);
}🤖 Prompt for AI Agents |
||
| } | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,121 @@ | ||
| using System.Collections.Generic; | ||
| using System.Linq; | ||
| using System.Threading; | ||
| using System.Threading.Tasks; | ||
| using Resgrid.Model; | ||
| using Resgrid.Model.Repositories; | ||
|
|
||
| namespace Resgrid.Tests.Mocks | ||
| { | ||
| /// <summary> | ||
| /// In-memory mock for <see cref="ITrainingRepository"/> that stores trainings | ||
| /// without requiring a database connection. | ||
| /// </summary> | ||
| public sealed class MockTrainingRepository : ITrainingRepository | ||
| { | ||
| private readonly List<Training> _trainings = new List<Training>(); | ||
| private int _nextId = 1; | ||
|
|
||
| public List<Training> Trainings => _trainings; | ||
|
|
||
| public Task<IEnumerable<Training>> GetAllAsync() | ||
| => Task.FromResult<IEnumerable<Training>>(_trainings.ToList()); | ||
|
|
||
| public Task<Training> GetByIdAsync(object id) | ||
| { | ||
| var intId = (int)id; | ||
| var training = _trainings.FirstOrDefault(t => t.TrainingId == intId); | ||
| return Task.FromResult(training); | ||
| } | ||
|
|
||
| public Task<IEnumerable<Training>> GetAllByDepartmentIdAsync(int departmentId) | ||
| { | ||
| var result = _trainings.Where(t => t.DepartmentId == departmentId).ToList(); | ||
| return Task.FromResult<IEnumerable<Training>>(result); | ||
| } | ||
|
|
||
| public Task<IEnumerable<Training>> GetAllByUserIdAsync(string userId) | ||
| => Task.FromResult<IEnumerable<Training>>(new List<Training>()); | ||
|
|
||
| public Task<Training> InsertAsync(Training entity, CancellationToken cancellationToken, bool firstLevelOnly = false) | ||
| { | ||
| entity.TrainingId = _nextId++; | ||
| _trainings.Add(entity); | ||
| return Task.FromResult(entity); | ||
| } | ||
|
|
||
| public Task<Training> UpdateAsync(Training entity, CancellationToken cancellationToken, bool firstLevelOnly = false) | ||
| { | ||
| var existing = _trainings.FirstOrDefault(t => t.TrainingId == entity.TrainingId); | ||
| if (existing != null) | ||
| { | ||
| _trainings.Remove(existing); | ||
| } | ||
| _trainings.Add(entity); | ||
| return Task.FromResult(entity); | ||
| } | ||
|
|
||
| public Task<bool> DeleteAsync(Training entity, CancellationToken cancellationToken) | ||
| { | ||
| var existing = _trainings.FirstOrDefault(t => t.TrainingId == entity.TrainingId); | ||
| if (existing != null) | ||
| { | ||
| _trainings.Remove(existing); | ||
| } | ||
| return Task.FromResult(true); | ||
| } | ||
|
|
||
| public Task<Training> SaveOrUpdateAsync(Training entity, CancellationToken cancellationToken, bool firstLevelOnly = false) | ||
| { | ||
| if (entity.TrainingId == 0) | ||
| { | ||
| entity.TrainingId = _nextId++; | ||
| _trainings.Add(entity); | ||
| } | ||
| else | ||
| { | ||
| var existing = _trainings.FirstOrDefault(t => t.TrainingId == entity.TrainingId); | ||
| if (existing != null) | ||
| { | ||
| _trainings.Remove(existing); | ||
| } | ||
| _trainings.Add(entity); | ||
| } | ||
| return Task.FromResult(entity); | ||
| } | ||
|
|
||
| public Task<bool> DeleteMultipleAsync(Training entity, string parentKeyName, object parentKeyId, List<object> ids, CancellationToken cancellationToken) | ||
| => Task.FromResult(true); | ||
|
|
||
| public List<Training> GetAllTrainings() | ||
| => _trainings.ToList(); | ||
|
|
||
| public Task<IEnumerable<Training>> GetTrainingsByDepartmentIdAsync(int departmentId) | ||
| { | ||
| var result = _trainings.Where(t => t.DepartmentId == departmentId).ToList(); | ||
| return Task.FromResult<IEnumerable<Training>>(result); | ||
| } | ||
|
|
||
| public Task<Training> GetTrainingByTrainingIdAsync(int trainingId) | ||
| { | ||
| var training = _trainings.FirstOrDefault(t => t.TrainingId == trainingId); | ||
| return Task.FromResult(training); | ||
| } | ||
|
|
||
| /// <summary> | ||
| /// Helper method to seed test data | ||
| /// </summary> | ||
| public void SeedTraining(Training training) | ||
| { | ||
| if (training.TrainingId == 0) | ||
| { | ||
| training.TrainingId = _nextId++; | ||
| } | ||
| else | ||
| { | ||
| _nextId = System.Math.Max(_nextId, training.TrainingId + 1); | ||
| } | ||
| _trainings.Add(training); | ||
| } | ||
| } | ||
| } |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
DeleteMultipleAsyncis a no-op and can mask edit-flow bugs in tests.This currently returns success without deleting anything from
_questions, so tests can pass even when deletion logic regresses.Proposed fix
🤖 Prompt for AI Agents