diff --git a/Controllers/PlayerController.cs b/Controllers/PlayerController.cs index ebb19bb..7145b19 100644 --- a/Controllers/PlayerController.cs +++ b/Controllers/PlayerController.cs @@ -223,7 +223,8 @@ public class PlayerController : ControllerBase var tempItem = new Item { Name = s.Name, - LocationId = null + LocationId = null, + UsesRemaining = s.Uses }; await _itemService.CreateAsync(tempItem); diff --git a/GameAuthApi.Tests/PlayerControllerTests.cs b/GameAuthApi.Tests/PlayerControllerTests.cs index dbb145a..77bcdd7 100644 --- a/GameAuthApi.Tests/PlayerControllerTests.cs +++ b/GameAuthApi.Tests/PlayerControllerTests.cs @@ -218,4 +218,45 @@ public class PlayerControllerTests itemSvc.Verify(); } + + [Fact] + public async Task Move_SpawnableSetsItemUses() + { + var playerSvc = new Mock(cfg); + var player = new Player { Id = "p", UserId = "u", LocationId = "loc" }; + playerSvc.Setup(p => p.GetByUserIdAsync("u")).ReturnsAsync(player); + playerSvc.Setup(p => p.UpdateAsync(It.IsAny())).Returns(Task.CompletedTask); + + var current = new Location { Id = "loc", X = 0, Y = 0, Z = 0 }; + var locSvc = new Mock(cfg); + locSvc.Setup(l => l.GetByIdAsync("loc")).ReturnsAsync(current); + locSvc.Setup(l => l.GetByCoordinatesAsync(It.IsAny(), It.IsAny(), It.IsAny())) + .ReturnsAsync((Location?)null); + locSvc.Setup(l => l.CreateAsync(It.IsAny())).Returns(Task.CompletedTask); + locSvc.Setup(l => l.UpdateAsync(It.IsAny())).Returns(Task.CompletedTask); + locSvc.Setup(l => l.RemovePlayerFromLocationAsync("loc", "p")).Returns(Task.CompletedTask); + locSvc.Setup(l => l.AddPlayerToLocationAsync(It.IsAny(), "p")).Returns(Task.CompletedTask); + + var spawned = new Spawnable { Name = "wood", SpawnRate = 100, Uses = 3 }; + var spawnSvc = new Mock(cfg); + spawnSvc.Setup(s => s.GetAllAsync()).ReturnsAsync([spawned]); + + var itemSvc = new Mock(cfg); + Item? created = null; + itemSvc.Setup(i => i.CreateAsync(It.IsAny())) + .Callback(it => { created = it; it.Id = "i"; }) + .Returns(Task.CompletedTask); + itemSvc.Setup(i => i.GetByIdAsync("i")).ReturnsAsync(() => created!); + itemSvc.Setup(i => i.UpdateAsync(It.IsAny())).Returns(Task.CompletedTask); + + var controller = new PlayerController(playerSvc.Object, locSvc.Object, spawnSvc.Object, itemSvc.Object) + { + ControllerContext = ContextWithUser("u") + }; + + await controller.Move(new MoveRequest { Direction = "N" }); + + Assert.NotNull(created); + Assert.Equal(3, created!.UsesRemaining); + } }