Lets a writer select several beats and add one character to all of them at once, without disturbing each beat's existing characters. Surfaced through the REST API, the embedded agent, and the MCP server per the project's rule that all three share the same service methods.
74 lines
3.6 KiB
C#
74 lines
3.6 KiB
C#
using Novelly.Api.Beats;
|
|
using Novelly.Api.Chapters;
|
|
using Novelly.Api.Characters;
|
|
using Novelly.Api.Genres;
|
|
using Novelly.Api.Projects;
|
|
using Novelly.Api.Questions;
|
|
using Novelly.Api.Tags;
|
|
|
|
namespace Novelly.Api.Tests;
|
|
|
|
public abstract class ServiceTestFixture
|
|
{
|
|
protected TestDatabase Db { get; private set; } = null!;
|
|
protected TagService Tags { get; private set; } = null!;
|
|
protected ProjectService Projects { get; private set; } = null!;
|
|
protected CharacterService Characters { get; private set; } = null!;
|
|
protected ChapterService Chapters { get; private set; } = null!;
|
|
protected BeatService Beats { get; private set; } = null!;
|
|
protected CharacterArcService Arcs { get; private set; } = null!;
|
|
protected OpenQuestionService Questions { get; private set; } = null!;
|
|
protected GenreService Genres { get; private set; } = null!;
|
|
|
|
protected CapturingLogger<ProjectService> ProjectLogs { get; private set; } = null!;
|
|
protected CapturingLogger<CharacterService> CharacterLogs { get; private set; } = null!;
|
|
protected CapturingLogger<ChapterService> ChapterLogs { get; private set; } = null!;
|
|
protected CapturingLogger<BeatService> BeatLogs { get; private set; } = null!;
|
|
protected CapturingLogger<TagService> TagLogs { get; private set; } = null!;
|
|
protected CapturingLogger<CharacterArcService> ArcLogs { get; private set; } = null!;
|
|
protected CapturingLogger<OpenQuestionService> QuestionLogs { get; private set; } = null!;
|
|
protected CapturingLogger<GenreService> GenreLogs { get; private set; } = null!;
|
|
|
|
[SetUp]
|
|
public void SetUpFixture()
|
|
{
|
|
Db = new TestDatabase();
|
|
|
|
TagLogs = new CapturingLogger<TagService>();
|
|
ProjectLogs = new CapturingLogger<ProjectService>();
|
|
CharacterLogs = new CapturingLogger<CharacterService>();
|
|
ChapterLogs = new CapturingLogger<ChapterService>();
|
|
BeatLogs = new CapturingLogger<BeatService>();
|
|
ArcLogs = new CapturingLogger<CharacterArcService>();
|
|
QuestionLogs = new CapturingLogger<OpenQuestionService>();
|
|
GenreLogs = new CapturingLogger<GenreService>();
|
|
|
|
Tags = new TagService(Db.Context, TagLogs, new CreateTagRequestValidator(), new UpdateTagRequestValidator());
|
|
Projects = new ProjectService(Db.Context, ProjectLogs, new CreateProjectRequestValidator(), new UpdateProjectRequestValidator());
|
|
Characters = new CharacterService(
|
|
Db.Context, Tags, CharacterLogs,
|
|
new CreateCharacterRequestValidator(), new UpdateCharacterRequestValidator(), new CreateRelationshipRequestValidator());
|
|
Chapters = new ChapterService(Db.Context, Tags, ChapterLogs, new CreateChapterRequestValidator(), new UpdateChapterRequestValidator());
|
|
Beats = new BeatService(
|
|
Db.Context, Tags, BeatLogs,
|
|
new CreateBeatRequestValidator(), new UpdateBeatRequestValidator(), new ReorderBeatsRequestValidator(),
|
|
new AssignCharacterToBeatsRequestValidator());
|
|
Arcs = new CharacterArcService(
|
|
Db.Context, ArcLogs,
|
|
new CreateArcStageRequestValidator(), new UpdateArcStageRequestValidator(), new ReorderArcStagesRequestValidator());
|
|
Questions = new OpenQuestionService(
|
|
Db.Context, QuestionLogs,
|
|
new CreateOpenQuestionRequestValidator(), new UpdateOpenQuestionRequestValidator(), new ResolveOpenQuestionRequestValidator());
|
|
Genres = new GenreService(Db.Context, GenreLogs);
|
|
|
|
OnSetUp();
|
|
}
|
|
|
|
protected virtual void OnSetUp()
|
|
{
|
|
}
|
|
|
|
[TearDown]
|
|
public void TearDownFixture() => Db.Dispose();
|
|
}
|