From a88e50d11172769e77c26a75443d45b07c77e5bd Mon Sep 17 00:00:00 2001 From: hz Date: Thu, 5 Jun 2025 09:44:04 -0500 Subject: [PATCH] Fixing 500 error when entering a bad itemid when creating an auction --- GameAuthApi.Tests/ServiceValidationTests.cs | 32 +++++++++++++++++++++ Services/AuctionService.cs | 9 ++++-- Services/ItemService.cs | 3 ++ 3 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 GameAuthApi.Tests/ServiceValidationTests.cs diff --git a/GameAuthApi.Tests/ServiceValidationTests.cs b/GameAuthApi.Tests/ServiceValidationTests.cs new file mode 100644 index 0000000..65f6ed5 --- /dev/null +++ b/GameAuthApi.Tests/ServiceValidationTests.cs @@ -0,0 +1,32 @@ +using GameAuthApi.Services; +using Microsoft.Extensions.Configuration; + +public class ServiceValidationTests +{ + private static IConfiguration cfg = new ConfigurationBuilder() + .AddInMemoryCollection(new Dictionary + { + {"MongoDB:ConnectionString","mongodb://localhost"}, + {"MongoDB:DatabaseName","test"} + }).Build(); + + [Fact] + public async Task ItemService_InvalidId_ReturnsNull() + { + var svc = new ItemService(cfg); + + var result = await svc.GetByIdAsync("bad"); + + Assert.Null(result); + } + + [Fact] + public async Task AuctionService_InvalidId_ReturnsNull() + { + var svc = new AuctionService(cfg); + + var result = await svc.GetByIdAsync("bad"); + + Assert.Null(result); + } +} diff --git a/Services/AuctionService.cs b/Services/AuctionService.cs index 0d6af43..82c7490 100644 --- a/Services/AuctionService.cs +++ b/Services/AuctionService.cs @@ -20,8 +20,13 @@ public class AuctionService public virtual async Task CreateAsync(Auction auction) => await _auctions.InsertOneAsync(auction); - public virtual async Task GetByIdAsync(string id) => - await _auctions.Find(a => a.Id == id).FirstOrDefaultAsync(); + public virtual async Task GetByIdAsync(string id) + { + if (!MongoDB.Bson.ObjectId.TryParse(id, out _)) + return null; + + return await _auctions.Find(a => a.Id == id).FirstOrDefaultAsync(); + } public virtual async Task UpdateAsync(Auction auction) => await _auctions.ReplaceOneAsync(a => a.Id == auction.Id, auction); diff --git a/Services/ItemService.cs b/Services/ItemService.cs index a4e2a0a..021379e 100644 --- a/Services/ItemService.cs +++ b/Services/ItemService.cs @@ -29,6 +29,9 @@ public class ItemService public virtual async Task GetByIdAsync(string id) { + if (!MongoDB.Bson.ObjectId.TryParse(id, out _)) + return null; + return await _items.Find(i => i.Id == id).FirstOrDefaultAsync(); }