diff --git a/Directory.Packages.props b/Directory.Packages.props
index 23000a3..5e00833 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -17,13 +17,13 @@
-
-
+
+
-
+
diff --git a/src/Open5ETools.Core/Common/Interfaces/Services/DM/IDungeonService.cs b/src/Open5ETools.Core/Common/Interfaces/Services/DM/IDungeonService.cs
index b44fc52..87caacc 100644
--- a/src/Open5ETools.Core/Common/Interfaces/Services/DM/IDungeonService.cs
+++ b/src/Open5ETools.Core/Common/Interfaces/Services/DM/IDungeonService.cs
@@ -7,17 +7,26 @@ public interface IDungeonService
Task GetAllDungeonOptionsAsync(CancellationToken cancellationToken);
Task GetAllDungeonOptionsForUserAsync(int userId, CancellationToken cancellationToken);
Task GetDungeonOptionAsync(int id, CancellationToken cancellationToken);
- Task GetDungeonOptionByNameAsync(string dungeonName, int userId, CancellationToken cancellationToken);
+
+ Task GetDungeonOptionByNameAsync(string dungeonName, int userId,
+ CancellationToken cancellationToken);
+
Task GetDungeonAsync(int id, CancellationToken cancellationToken);
- Task CreateOrUpdateDungeonAsync(DungeonOptionModel optionModel, bool addDungeon, int level, CancellationToken cancellationToken);
+
+ Task CreateOrUpdateDungeonAsync(DungeonOptionModel optionModel, bool addDungeon, int level,
+ CancellationToken cancellationToken);
+
Task UpdateDungeonAsync(DungeonModel model, CancellationToken cancellationToken);
Task CreateDungeonOptionAsync(DungeonOptionModel dungeonOption, CancellationToken cancellationToken);
Task ListUserDungeonsAsync(int userId, CancellationToken cancellationToken);
- Task ListUserDungeonsByNameAsync(string dungeonName, int userId, CancellationToken cancellationToken);
+
+ Task ListUserDungeonsByNameAsync(string dungeonName, int userId,
+ CancellationToken cancellationToken);
+
Task AddDungeonAsync(DungeonModel savedDungeon, CancellationToken cancellationToken);
Task DeleteDungeonOptionAsync(int id, CancellationToken cancellationToken);
Task DeleteDungeonAsync(int id, CancellationToken cancellationToken);
- Task GenerateDungeonAsync(DungeonOptionModel model);
+ Task GenerateDungeonAsync(DungeonOptionModel model, CancellationToken cancellationToken);
Task RenameDungeonAsync(int optionId, int userId, string newName, CancellationToken cancellationToken);
Task ExportToJsonAsync(int dungeonId, CancellationToken cancellationToken);
}
\ No newline at end of file
diff --git a/src/Open5ETools.Core/Services/DM/DungeonService.cs b/src/Open5ETools.Core/Services/DM/DungeonService.cs
index 3f1782a..21adb72 100644
--- a/src/Open5ETools.Core/Services/DM/DungeonService.cs
+++ b/src/Open5ETools.Core/Services/DM/DungeonService.cs
@@ -111,7 +111,7 @@ public async Task CreateOrUpdateDungeonAsync(DungeonOptionModel op
private async Task UpdateExistingDungeonAsync(DungeonOptionModel optionModel,
DungeonOptionModel existingDungeonOption, DungeonModel oldDungeon, CancellationToken cancellationToken)
{
- var dungeonModel = await GenerateDungeonAsync(optionModel, existingDungeonOption.Id);
+ var dungeonModel = await GenerateDungeonAsync(optionModel, existingDungeonOption.Id, cancellationToken);
dungeonModel.Id = oldDungeon.Id;
dungeonModel.Level = oldDungeon.Level;
await UpdateDungeonAsync(dungeonModel, cancellationToken);
@@ -122,7 +122,7 @@ private async Task CreateOptionAndAddDungeonToItAsync(DungeonOptio
CancellationToken cancellationToken)
{
var dungeonOptionId = await CreateDungeonOptionAsync(optionModel, cancellationToken);
- var dungeonModel = await GenerateDungeonAsync(optionModel, dungeonOptionId);
+ var dungeonModel = await GenerateDungeonAsync(optionModel, dungeonOptionId, cancellationToken);
dungeonModel.Level = 1;
var id = await AddDungeonAsync(dungeonModel, cancellationToken);
dungeonModel.Id = id;
@@ -135,7 +135,7 @@ private async Task AddDungeonToExistingOptionAsync(DungeonOptionMo
var existingDungeons =
(await ListUserDungeonsByNameAsync(optionModel.DungeonName, optionModel.UserId, cancellationToken))
.ToList();
- var dungeonModel = await GenerateDungeonAsync(optionModel, optionModel.Id);
+ var dungeonModel = await GenerateDungeonAsync(optionModel, optionModel.Id, cancellationToken);
dungeonModel.Level = level;
if (existingDungeons.Exists(d => d.Level == level))
{
@@ -150,21 +150,23 @@ private async Task AddDungeonToExistingOptionAsync(DungeonOptionMo
return dungeonModel;
}
- private async Task GenerateDungeonAsync(DungeonOptionModel optionModel, int optionId)
+ private async Task GenerateDungeonAsync(DungeonOptionModel optionModel, int optionId,
+ CancellationToken cancellationToken)
{
- var dungeonModel = await GenerateDungeonAsync(optionModel);
+ var dungeonModel = await GenerateDungeonAsync(optionModel, cancellationToken);
dungeonModel.DungeonOptionId = optionId;
return dungeonModel;
}
- public async Task GenerateDungeonAsync(DungeonOptionModel model)
+ public async Task GenerateDungeonAsync(DungeonOptionModel model, CancellationToken cancellationToken)
{
try
{
ValidateModel(model);
if (model.Corridor)
- return await Task.FromResult(_dungeon.Generate(model));
- return await Task.FromResult(_dungeonNcDungeon.Generate(model));
+ return await Task.Run(async () => await Task.FromResult(_dungeon.Generate(model)), cancellationToken);
+ return await Task.Run(async () => await Task.FromResult(_dungeonNcDungeon.Generate(model)),
+ cancellationToken);
}
catch (Exception ex)
{
diff --git a/src/Open5ETools.Infrastructure/Data/AppDbContextInitializer.cs b/src/Open5ETools.Infrastructure/Data/AppDbContextInitializer.cs
index 299bfbf..f81a835 100644
--- a/src/Open5ETools.Infrastructure/Data/AppDbContextInitializer.cs
+++ b/src/Open5ETools.Infrastructure/Data/AppDbContextInitializer.cs
@@ -50,7 +50,7 @@ public async Task SeedDataAsync(CancellationToken cancellationToken)
await SeedMonstersAsync(cancellationToken);
await SeedTreasuresAsync(cancellationToken);
await SeedOptionsAsync(cancellationToken);
- await SeedDungeonsAsync(1, cancellationToken);
+ await SeedDungeonsAsync(TestAdminUserId, cancellationToken);
await SeedSpellsAsync(cancellationToken);
}
}
@@ -59,12 +59,12 @@ public async Task SeedTestBaseAsync(CancellationToken cancellationToken)
{
if (!_context.Users.Any())
{
- await SeedUsersAsync(cancellationToken);
+ await SeedUsersAsync(cancellationToken, true);
await SeedMonstersAsync(cancellationToken);
await SeedTreasuresAsync(cancellationToken);
await SeedOptionsAsync(cancellationToken);
- await SeedDungeonsAsync(1, cancellationToken);
- await SeedDungeonsAsync(2, cancellationToken);
+ await SeedDungeonsAsync(TestAdminUserId, cancellationToken);
+ await SeedDungeonsAsync(TestUserId, cancellationToken);
await SeedSpellsAsync(cancellationToken);
}
}
@@ -516,7 +516,7 @@ private async Task SeedDungeonsAsync(int userId, CancellationToken token)
UserId = dungeonOption.UserId
};
- var sd = await _dungeonService.GenerateDungeonAsync(model);
+ var sd = await _dungeonService.GenerateDungeonAsync(model, token);
sd.Level = 1;
await _dungeonService.AddDungeonAsync(sd, token);
@@ -563,12 +563,12 @@ private async Task SeedDungeonsAsync(int userId, CancellationToken token)
UserId = dungeonOption.UserId
};
- sd = await _dungeonService.GenerateDungeonAsync(model);
+ sd = await _dungeonService.GenerateDungeonAsync(model, token);
sd.Level = 1;
await _dungeonService.AddDungeonAsync(sd, token);
}
- private async Task SeedUsersAsync(CancellationToken token)
+ private async Task SeedUsersAsync(CancellationToken token, bool seedDeletedUtUser = false)
{
_context.Users.Add(new User
{
@@ -592,17 +592,20 @@ private async Task SeedUsersAsync(CancellationToken token)
Role = Role.User
});
- _context.Users.Add(new User
+ if (seedDeletedUtUser)
{
- Id = TestDeletedUserId,
- Username = "UT Deleted User",
- Password = PasswordHelper.EncryptPassword(config.Value.DefaultUserPassword),
- FirstName = "Test",
- LastName = "User",
- Email = "user@user.com",
- Role = Role.User,
- IsDeleted = true
- });
+ _context.Users.Add(new User
+ {
+ Id = TestDeletedUserId,
+ Username = "UT Deleted User",
+ Password = PasswordHelper.EncryptPassword(config.Value.DefaultUserPassword),
+ FirstName = "Test",
+ LastName = "User",
+ Email = "user@user.com",
+ Role = Role.User,
+ IsDeleted = true
+ });
+ }
await _context.SaveChangesAsync(token);
}
diff --git a/src/Open5ETools.Web/Open5ETools.Web.csproj b/src/Open5ETools.Web/Open5ETools.Web.csproj
index a657c20..4c6ee81 100644
--- a/src/Open5ETools.Web/Open5ETools.Web.csproj
+++ b/src/Open5ETools.Web/Open5ETools.Web.csproj
@@ -2,7 +2,7 @@
true
true
- 1.0.4.1
+ 1.0.4.2
diff --git a/tests/Open5ETools.Core.Tests/DungeonServiceTests/Create.cs b/tests/Open5ETools.Core.Tests/DungeonServiceTests/Create.cs
index e0fd2f6..a8fc5b8 100644
--- a/tests/Open5ETools.Core.Tests/DungeonServiceTests/Create.cs
+++ b/tests/Open5ETools.Core.Tests/DungeonServiceTests/Create.cs
@@ -32,7 +32,8 @@ public async Task CreateDungeonOptionAsync_WithOptionModel_ReturnsNewEntityId()
Corridor = false,
UserId = 1
};
- var result = await _dungeonService.CreateDungeonOptionAsync(optionsModel, TestContext.Current.CancellationToken);
+ var result =
+ await _dungeonService.CreateDungeonOptionAsync(optionsModel, TestContext.Current.CancellationToken);
result.ShouldBeGreaterThan(0);
}
@@ -41,7 +42,7 @@ public async Task AddDungeonAsync_WithDungeonModel_ReturnsNewEntityId()
{
var optionsModel =
(await _dungeonService.GetAllDungeonOptionsForUserAsync(1, TestContext.Current.CancellationToken)).First();
- var dungeon = await _dungeonService.GenerateDungeonAsync(optionsModel);
+ var dungeon = await _dungeonService.GenerateDungeonAsync(optionsModel, TestContext.Current.CancellationToken);
var result = await _dungeonService.AddDungeonAsync(dungeon, TestContext.Current.CancellationToken);
result.ShouldBeGreaterThan(1);
@@ -63,7 +64,8 @@ public async Task CreateOrUpdateDungeonAsync_WithInvalidModel_ReturnsServiceAggr
var act = async () =>
{
- await _dungeonService.CreateOrUpdateDungeonAsync(optionsModel, false, 1, TestContext.Current.CancellationToken);
+ await _dungeonService.CreateOrUpdateDungeonAsync(optionsModel, false, 1,
+ TestContext.Current.CancellationToken);
};
var result = await act.ShouldThrowAsync();
@@ -97,7 +99,8 @@ public async Task CreateOrUpdateDungeonAsync_WithValidNewModel_CreateOptionAndRe
UserId = 1
};
var result =
- await _dungeonService.CreateOrUpdateDungeonAsync(optionsModel, false, 1, TestContext.Current.CancellationToken);
+ await _dungeonService.CreateOrUpdateDungeonAsync(optionsModel, false, 1,
+ TestContext.Current.CancellationToken);
result.ShouldNotBeNull();
result.RoamingMonsterDescription.ShouldBe(Constants.Empty);
}
@@ -109,7 +112,8 @@ public async Task
const int userId = 1;
const int levelNumber = 2;
var existingDungeonOption =
- (await _dungeonService.GetAllDungeonOptionsForUserAsync(userId, TestContext.Current.CancellationToken)).First();
+ (await _dungeonService.GetAllDungeonOptionsForUserAsync(userId, TestContext.Current.CancellationToken))
+ .First();
var currentDungeonCount =
(await _dungeonService.ListUserDungeonsByNameAsync(existingDungeonOption.DungeonName, userId,
TestContext.Current.CancellationToken)).Count();
diff --git a/tests/Open5ETools.Core.Tests/DungeonServiceTests/Generate.cs b/tests/Open5ETools.Core.Tests/DungeonServiceTests/Generate.cs
index f568b49..1a27787 100644
--- a/tests/Open5ETools.Core.Tests/DungeonServiceTests/Generate.cs
+++ b/tests/Open5ETools.Core.Tests/DungeonServiceTests/Generate.cs
@@ -29,7 +29,7 @@ public async Task GenerateDungeonAsync_WithValidOptionModel_ReturnsDungeonModel(
RoomSize = 20,
Corridor = false,
UserId = 1
- });
+ }, TestContext.Current.CancellationToken);
result.DungeonTiles.ShouldNotBeNull();
}