public void Method_Throws_ArgumentNullException()
 {
     Assert.Throws <ArgumentNullException>(() =>
                                           _doorActionManager.AddAsync(null)
                                           .GetAwaiter()
                                           .GetResult());
 }
        public async Task <IActionResult> PostAsync([FromBody] PassageRequest request)
        {
            var currentCardDto = (await _cardManager
                                  .GetAllAsync(uniqueNumbers: new string[] { request.CardUniqueNumber }))
                                 .FirstOrDefault();

            if (currentCardDto is null)
            {
                return(NotFound());
            }

            var currentDoorReaderDto = (await _doorReaderManager
                                        .GetAllAsync(
                                            serialNumbers: new string[] { request.DoorReaderSerialNumber },
                                            includes: new string[] { nameof(DoorReader.Door) }))
                                       .FirstOrDefault();

            if (currentDoorReaderDto is null)
            {
                return(NotFound());
            }

            var doorActionStatus = DoorActionStatusType.Success;

            if (currentCardDto.Status == CardStatusType.Locked)
            {
                doorActionStatus = DoorActionStatusType.Error;
            }

            if (currentDoorReaderDto.Door.Status != DoorStatusType.Active)
            {
                doorActionStatus = DoorActionStatusType.Error;
            }

            if (currentCardDto.Level < currentDoorReaderDto.Door.Level)
            {
                doorActionStatus = DoorActionStatusType.Denied;
            }

            var doorActionDto = new DoorActionDto
            {
                CardId       = currentCardDto.Id,
                DoorReaderId = currentDoorReaderDto.Id,
                Status       = doorActionStatus,
                TimeStamp    = DateTime.Now,
            };

            await _doorActionManager.AddAsync(doorActionDto);

            await _commitManager.SaveAsync();

            return(doorActionStatus != DoorActionStatusType.Success
                ? BadRequest()
                : Ok());
        }