private QuizAggregate ExecuteCommand(Action <QuizAggregate> command) { var quizId = Guid.NewGuid(); var quiz = QuizAggregate.Create(quizId); command(quiz); return(quiz); }
public async Task Start(int id) { var quizModel = QuizModelFactory.Create(id); var quiz = new QuizAggregate(); quiz.Start(quizModel); await _quizRepository.Save(quiz); }
public async Task <object> Start() { var quizModel = QuizModelFactory.Create(); var quiz = new QuizAggregate(); quiz.Start(quizModel); await _quizRepository.Save(quiz); return(new { QuizId = quiz.Id, Questions = quiz.QuizModel.Questions }); }
public void Given_A_Quiz_When_Closing_Then_QuizClosedEvent_Raised() { // Arrange var quiz = new QuizAggregate(); // Act quiz.Close(); // Assert var closedEvent = quiz.GetPendingEvents().FirstOrDefault(); Assert.NotNull(closedEvent); Assert.IsAssignableFrom(typeof(QuizClosedEvent), closedEvent); }
public void Given_A_Quiz_When_Starting_Then_QuizStartedEvent_Raised() { // Arrange var quiz = new QuizAggregate(); var quizModel = QuizModelFactory.Create(1); // Act quiz.Start(quizModel); // Assert var startEvent = quiz.GetPendingEvents().FirstOrDefault(); Assert.NotNull(startEvent); Assert.IsAssignableFrom(typeof(QuizStartedEvent), startEvent); }
public void Given_An_Started_Quiz_When_Voting_For_WrongAnswer_Then_QuestionWrongAnsweredEvent_Raised() { // Arrange var quiz = new QuizAggregate(); var quizModel = QuizModelFactory.Create(1); var selectedQuestion = quizModel.Questions.FirstOrDefault(); var selectedOption = selectedQuestion.Options.FirstOrDefault(x => !x.IsCorrect); // Act quiz.Start(quizModel); quiz.Vote(selectedQuestion.Id, selectedOption.Id); // Assert var startedEvent = quiz.GetPendingEvents().FirstOrDefault(); var answeredEvent = quiz.GetPendingEvents().LastOrDefault(); Assert.NotNull(startedEvent); Assert.IsAssignableFrom(typeof(QuizStartedEvent), startedEvent); Assert.NotNull(answeredEvent); Assert.IsAssignableFrom(typeof(QuestionWrongAnsweredEvent), answeredEvent); }
private async Task <QuizAggregate> CreateAggregate(IDocumentSession session, Guid quizId) { var events = (await session.Events.FetchStreamAsync(quizId)).Select(@event => @event.Data).ToArray(); return(QuizAggregate.Create(quizId, events)); }