using GameAuthApi.Controllers; using GameAuthApi.Models; using GameAuthApi.Services; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; public class SpawnableControllerTests { private static IConfiguration config = new ConfigurationBuilder() .AddInMemoryCollection(new Dictionary { {"MongoDB:ConnectionString","mongodb://localhost"}, {"MongoDB:DatabaseName","test"} }).Build(); [Fact] public async Task Create_ReturnsOk() { var svc = new Mock(config); svc.Setup(s => s.CreateAsync(It.Is(sp => sp.CollectAction == "gather" && sp.CollectResults.Count == 2 && sp.CollectResults[0].Result == "resource" && sp.CollectResults[0].SuccessRate == 75 && sp.ConsumeOnSuccess))) .Returns(Task.CompletedTask).Verifiable(); var controller = new SpawnableController(svc.Object); var result = await controller.Create(new CreateSpawnableRequest { Name = "item", SpawnRate = 50, CollectAction = "gather", CollectResults = new List { new() { Result = "resource", SuccessRate = 75 }, new() { Result = "nothing", SuccessRate = 25 } }, ConsumeOnSuccess = true }); Assert.IsType(result); svc.Verify(); } [Fact] public async Task GetAll_ReturnsOk() { var svc = new Mock(config); var list = new List(); svc.Setup(s => s.GetAllAsync()).ReturnsAsync(list); var controller = new SpawnableController(svc.Object); var result = await controller.GetAll(); var ok = Assert.IsType(result); Assert.Equal(list, ok.Value); } [Fact] public async Task Delete_NotFound() { var svc = new Mock(config); svc.Setup(s => s.GetByIdAsync("id")).ReturnsAsync((Spawnable)null); var controller = new SpawnableController(svc.Object); var result = await controller.Delete("id"); Assert.IsType(result); } [Fact] public async Task Update_NotFound() { var svc = new Mock(config); svc.Setup(s => s.GetByIdAsync("id")).ReturnsAsync((Spawnable)null); var controller = new SpawnableController(svc.Object); var result = await controller.Update("id", new UpdateSpawnableRequest { Name="n", SpawnRate=1, CollectAction="a", ConsumeOnSuccess = false }); Assert.IsType(result); } }