예제 #1
0
        public async Task CreateCrisis_RequestOk_ReturnViewModel()
        {
            using var context = new AppDbContext(DbHelper.GetDbContextOptions());
            context.Teams.Add(new Team(name: "Team 1", description: "Description 1"));
            context.Teams.Add(new Team(name: "Team 2", description: "Description 2"));
            context.SaveChanges();
            var request = new CreateCrisisRequest()
            {
                Name        = "test",
                Description = "test",
                TeamIds     = new List <int>()
                {
                    1, 2
                }
            };
            var handler = new CreateCrisisHandler(context);

            var result = await handler.Handle(request, CancellationTokenHelper.GetCancellationToken());

            result.IsSuccess.Should().BeTrue();
            result.Value.Should().BeOfType <BaseCrisisViewModel>();
            result.Value.Name.Should().Be("test");
            result.Value.Id.Should().NotBe(0);
            result.Value.Teams.Count.Should().Be(2);
        }
예제 #2
0
        public async Task CreateCrisis_RequestTeamIdsEmpty_ReturnFail()
        {
            var request = new CreateCrisisRequest()
            {
                Name = "test", TeamIds = new List <int>()
            };

            using var context = new AppDbContext(DbHelper.GetDbContextOptions());
            var handler = new CreateCrisisHandler(context);

            var result = await handler.Handle(request, CancellationTokenHelper.GetCancellationToken());

            result.IsFailed.Should().BeTrue();
            result.WithError("Request team empty");
        }
예제 #3
0
        public async Task <Result <BaseCrisisViewModel> > Handle(CreateCrisisRequest request, CancellationToken cancellationToken)
        {
            if (request.TeamIds.Count == 0)
            {
                return(Result.Fail("Request team empty"));
            }

            var teams = await _dbContext
                        .Teams
                        .Where(t => request.TeamIds.Contains(t.Id))
                        .ToListAsync(cancellationToken);

            if (teams.Count != request.TeamIds.Count)
            {
                return(Result.Fail("Not all teams found"));
            }

            var crisisName = CrisisName.Create(request.Name);

            if (crisisName.IsFailed)
            {
                // TODO return result error
            }

            var crisis = new Crisis(crisisName.Value, request.Description);

            foreach (var team in teams)
            {
                var result = crisis.AddTeam(team);
            }

            _dbContext.Crisises.Add(crisis);
            await _dbContext.SaveChangesAsync(cancellationToken);

            var viewModel = BaseCrisisViewModel.Map(crisis);

            return(Result.Ok(viewModel));
        }
예제 #4
0
        public async Task CreateCrisis_NotAllTeamsFound_ReturnFail()
        {
            var context = new AppDbContext(DbHelper.GetDbContextOptions());

            context.Teams.Add(new Team(name: "Team 1", description: "Description 1"));
            context.Teams.Add(new Team(name: "Team 2", description: "Description 2"));
            context.SaveChanges();

            var request = new CreateCrisisRequest()
            {
                Name        = "test",
                Description = "test",
                TeamIds     = new List <int>()
                {
                    1, 2, 3
                }
            };
            var handler = new CreateCrisisHandler(context);

            var result = await handler.Handle(request, CancellationTokenHelper.GetCancellationToken());

            result.IsFailed.Should().BeTrue();
            result.WithError("Not all teams found");
        }
예제 #5
0
        public async Task <ActionResult <object> > Create([FromBody] CreateCrisisRequest request)
        {
            var result = await _mediator.Send(request);

            return(Ok(result));
        }