75 lines
3.1 KiB
C#
75 lines
3.1 KiB
C#
using Microsoft.AspNetCore.Mvc.Testing;
|
|
|
|
namespace RpgRoller.Tests;
|
|
|
|
public sealed class CampaignApiTests : ApiTestBase
|
|
{
|
|
public CampaignApiTests(WebApplicationFactory<Program> factory)
|
|
: base(factory)
|
|
{
|
|
}
|
|
|
|
[Fact]
|
|
public async Task CampaignCharacterAndSkillFlow_EnforcesRulesetValidation()
|
|
{
|
|
using var factory = CreateFactory(6, 6, 6);
|
|
using var gmClient = factory.CreateClient(new WebApplicationFactoryClientOptions { AllowAutoRedirect = false });
|
|
|
|
await RegisterAsync(gmClient, "gm", "Password123", "Game Master");
|
|
await LoginAsync(gmClient, "gm", "Password123");
|
|
|
|
var campaign = await PostAsync<CreateCampaignRequest, CampaignSummary>(
|
|
gmClient,
|
|
"/api/campaigns",
|
|
new CreateCampaignRequest("Alpha Campaign", "dnd5e"));
|
|
|
|
var gmCharacter = await PostAsync<CreateCharacterRequest, CharacterSummary>(
|
|
gmClient,
|
|
"/api/characters",
|
|
new CreateCharacterRequest("Arin", campaign.Id));
|
|
|
|
var activateResponse = await gmClient.PostAsync($"/api/characters/{gmCharacter.Id}/activate", null);
|
|
Assert.Equal(HttpStatusCode.OK, activateResponse.StatusCode);
|
|
|
|
var createdSkill = await PostAsync<CreateSkillRequest, SkillSummary>(
|
|
gmClient,
|
|
$"/api/characters/{gmCharacter.Id}/skills",
|
|
new CreateSkillRequest("Arcana", "2d12+2"));
|
|
Assert.Equal("2d12+2", createdSkill.DiceRollDefinition);
|
|
|
|
var updatedSkill = await PutAsync<UpdateSkillRequest, SkillSummary>(
|
|
gmClient,
|
|
$"/api/skills/{createdSkill.Id}",
|
|
new UpdateSkillRequest("Arcana Mastery", "2d12+3"));
|
|
Assert.Equal("Arcana Mastery", updatedSkill.Name);
|
|
Assert.Equal("2d12+3", updatedSkill.DiceRollDefinition);
|
|
|
|
var invalidSkill = await gmClient.PostAsJsonAsync(
|
|
$"/api/characters/{gmCharacter.Id}/skills",
|
|
new CreateSkillRequest("Broken", "5D+4"));
|
|
Assert.Equal(HttpStatusCode.BadRequest, invalidSkill.StatusCode);
|
|
|
|
var details = await GetAsync<CampaignDetails>(gmClient, $"/api/campaigns/{campaign.Id}");
|
|
Assert.Equal(campaign.Id, details.Id);
|
|
Assert.Single(details.Characters);
|
|
Assert.Single(details.Skills);
|
|
|
|
var currentCampaignCharacters = await GetAsync<IReadOnlyList<CharacterSummary>>(gmClient, "/api/characters/current-campaign");
|
|
Assert.Single(currentCampaignCharacters);
|
|
Assert.Equal(gmCharacter.Id, currentCampaignCharacters[0].Id);
|
|
|
|
var otherCampaign = await PostAsync<CreateCampaignRequest, CampaignSummary>(
|
|
gmClient,
|
|
"/api/campaigns",
|
|
new CreateCampaignRequest("Beta Campaign", "d6"));
|
|
|
|
var updatedCharacter = await PutAsync<UpdateCharacterRequest, CharacterSummary>(
|
|
gmClient,
|
|
$"/api/characters/{gmCharacter.Id}",
|
|
new UpdateCharacterRequest("Arin Updated", otherCampaign.Id));
|
|
|
|
Assert.Equal("Arin Updated", updatedCharacter.Name);
|
|
Assert.Equal(otherCampaign.Id, updatedCharacter.CampaignId);
|
|
}
|
|
}
|