Fixing the uses of the spawnable

This commit is contained in:
hz
2025-06-09 23:29:43 -05:00
parent 43f3e8f0e7
commit 34742c0759
2 changed files with 43 additions and 1 deletions
+2 -1
View File
@@ -223,7 +223,8 @@ public class PlayerController : ControllerBase
var tempItem = new Item var tempItem = new Item
{ {
Name = s.Name, Name = s.Name,
LocationId = null LocationId = null,
UsesRemaining = s.Uses
}; };
await _itemService.CreateAsync(tempItem); await _itemService.CreateAsync(tempItem);
@@ -218,4 +218,45 @@ public class PlayerControllerTests
itemSvc.Verify(); itemSvc.Verify();
} }
[Fact]
public async Task Move_SpawnableSetsItemUses()
{
var playerSvc = new Mock<PlayerService>(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<Player>())).Returns(Task.CompletedTask);
var current = new Location { Id = "loc", X = 0, Y = 0, Z = 0 };
var locSvc = new Mock<LocationService>(cfg);
locSvc.Setup(l => l.GetByIdAsync("loc")).ReturnsAsync(current);
locSvc.Setup(l => l.GetByCoordinatesAsync(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()))
.ReturnsAsync((Location?)null);
locSvc.Setup(l => l.CreateAsync(It.IsAny<Location>())).Returns(Task.CompletedTask);
locSvc.Setup(l => l.UpdateAsync(It.IsAny<Location>())).Returns(Task.CompletedTask);
locSvc.Setup(l => l.RemovePlayerFromLocationAsync("loc", "p")).Returns(Task.CompletedTask);
locSvc.Setup(l => l.AddPlayerToLocationAsync(It.IsAny<string>(), "p")).Returns(Task.CompletedTask);
var spawned = new Spawnable { Name = "wood", SpawnRate = 100, Uses = 3 };
var spawnSvc = new Mock<SpawnableService>(cfg);
spawnSvc.Setup(s => s.GetAllAsync()).ReturnsAsync([spawned]);
var itemSvc = new Mock<ItemService>(cfg);
Item? created = null;
itemSvc.Setup(i => i.CreateAsync(It.IsAny<Item>()))
.Callback<Item>(it => { created = it; it.Id = "i"; })
.Returns(Task.CompletedTask);
itemSvc.Setup(i => i.GetByIdAsync("i")).ReturnsAsync(() => created!);
itemSvc.Setup(i => i.UpdateAsync(It.IsAny<Item>())).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);
}
} }