public async Task ShouldFailToSetGoalCompletedIdNotFound()
        {
            Guid profileId = Guid.NewGuid();

            List <Goal> goals = new List <Goal>
            {
                new Goal(profileId, "Novo para teste", "Testando")
            };

            goals.First().SetCompleted(DateTime.Now, "Completado para testes");

            SetCompletedGoalCommand command = new SetCompletedGoalCommand
            {
                GoalId = Guid.NewGuid()
            };

            GoalFakeRepository goalFakeRepository = new GoalFakeRepository(goals);
            GoalCommandHandler handler            = new GoalCommandHandler(
                goalFakeRepository,
                GetIdentityService(profileId),
                GetMediator(),
                GetUnitOfWork(),
                GetLogger()
                );

            CommandResult commandResult = await handler.Handle(command, default(CancellationToken));

            Assert.IsFalse(commandResult.Success);
            Assert.AreEqual("Falha ao buscar Objetivo no banco de dados.", commandResult.Notifications.FirstOrDefault().Description);
        }
        public async Task ShouldSetCompleted()
        {
            Guid profileId = Guid.NewGuid();

            List <Goal> goals = new List <Goal>
            {
                new Goal(profileId, "Novo para teste", "Testando")
            };

            SetCompletedGoalCommand command = new SetCompletedGoalCommand
            {
                GoalId = goals.FirstOrDefault().Id,
                AccomplishmentDetails = "Ëu completei !!!!",
                DateCompleted         = DateTime.Now
            };

            GoalFakeRepository goalFakeRepository = new GoalFakeRepository(goals);
            GoalCommandHandler handler            = new GoalCommandHandler(
                goalFakeRepository,
                GetIdentityService(profileId),
                GetMediator(),
                GetUnitOfWork(),
                GetLogger()
                );

            CommandResult commandResult = await handler.Handle(command, default(CancellationToken));

            Assert.IsTrue(commandResult.Success);
            Assert.IsTrue(goals.First().Status.IsCompleted);
        }
        public async Task ShouldFailToSetCompletedTwice()
        {
            Guid profileId = Guid.NewGuid();

            List <Goal> goals = new List <Goal>
            {
                new Goal(profileId, "Novo para teste", "Testando")
            };

            SetCompletedGoalCommand command = new SetCompletedGoalCommand
            {
                GoalId = goals.FirstOrDefault().Id,
                AccomplishmentDetails = "Foi completado primeira vez, será completado de novo",
                DateCompleted         = DateTime.Now
            };

            GoalFakeRepository goalFakeRepository = new GoalFakeRepository(goals);
            GoalCommandHandler handler            = new GoalCommandHandler(
                goalFakeRepository,
                GetIdentityService(profileId),
                GetMediator(),
                GetUnitOfWork(),
                GetLogger()
                );

            CommandResult commandResult = await handler.Handle(command, default(CancellationToken));

            Assert.IsTrue(commandResult.Success);
            Assert.IsTrue(goals.First().Status.IsCompleted);

            CommandResult commandResultTwo = await handler.Handle(command, default(CancellationToken));

            Assert.IsFalse(commandResultTwo.Success);
            Assert.AreEqual("Esse objetivo já está marcado como completo.", commandResultTwo.Notifications.FirstOrDefault().Description);
        }
예제 #4
0
        public async Task <CommandResult> Handle(SetCompletedGoalCommand request, CancellationToken cancellationToken)
        {
            Goal goal = await _goalRepository.GetByIdAsync(request.GoalId);

            if (!FoundValidGoal(goal))
            {
                return(FailureDueToGoalNotFound());
            }

            goal.SetCompleted(request.DateCompleted, request.AccomplishmentDetails);
            if (!goal.IsValid)
            {
                return(FailureDueToEntityStateInconsistency(goal));
            }

            await _goalRepository.UpdateAsync(goal);

            return(await CommitAndPublishAsync(new GoalCompletedDomainEvent(
                                                   goal.Id,
                                                   goal.ProfileId,
                                                   request.WritePost
                                                   )));
        }
예제 #5
0
        public async Task <IActionResult> SetCompletedAsync(Guid id, [FromBody] SetCompletedGoalCommand command)
        {
            command.GoalId = id;

            return(await CreateCommandResponse(command));
        }