public void GetAllAsync_DoorReadersExist_DoorReadersRetrieved()
        {
            // Arrange
            var doorReader1 = new DoorReader
            {
                Id           = 1,
                SerialNumber = "123-01",
                DoorId       = 1,
                Type         = DoorReaderType.Entrance,
            };

            var doorReader2 = new DoorReader
            {
                Id           = 2,
                SerialNumber = "123-02",
                DoorId       = 1,
                Type         = DoorReaderType.Exit,
            };

            _applicationContext.DoorReaders.AddRange(doorReader1, doorReader2);
            _applicationContext.SaveChanges();

            // Act
            var receivedDoorReaderDtos = _doorReaderManager
                                         .GetAllAsync()
                                         .GetAwaiter()
                                         .GetResult();

            // Assert
            Assert.Equal(2, receivedDoorReaderDtos.Count());
        }
        public void GetAllAsync_DoorReadersExist_DoorReadersRetrievedBySerialNumbersFilter()
        {
            // Arrange
            var doorReader1 = new DoorReader
            {
                Id           = 1,
                SerialNumber = "123-01",
                DoorId       = 1,
                Type         = DoorReaderType.Entrance,
            };

            var doorReader2 = new DoorReader
            {
                Id           = 2,
                SerialNumber = "123-02",
                DoorId       = 1,
                Type         = DoorReaderType.Exit,
            };

            _applicationContext.DoorReaders.AddRange(doorReader1, doorReader2);
            _applicationContext.SaveChanges();

            // Act
            var receivedDoorReaderDtos = _doorReaderManager
                                         .GetAllAsync(serialNumbers: new string[] { doorReader1.SerialNumber })
                                         .GetAwaiter()
                                         .GetResult();

            // Assert
            Assert.Single(receivedDoorReaderDtos.Where(doorReaderDto => doorReaderDto.Id == doorReader1.Id));
        }
        public void GetAllAsync_DoorReadersExist_DoorReadersRetrievedWithIncludes()
        {
            // Arrange
            var doorReader = new DoorReader
            {
                Id           = 1,
                SerialNumber = "123-01",
                DoorId       = 1,
                Type         = DoorReaderType.Entrance,
            };

            var door = new Door
            {
                Id     = 1,
                Name   = "Test door 1",
                Level  = LevelType.Admin,
                Status = DoorStatusType.Active,
            };

            _applicationContext.DoorReaders.Add(doorReader);
            _applicationContext.Doors.Add(door);
            _applicationContext.SaveChanges();

            // Act
            var receivedDoorReaderDtos = _doorReaderManager
                                         .GetAllAsync(includes: new string[] { nameof(DoorReader.Door) })
                                         .GetAwaiter()
                                         .GetResult();

            // Assert
            Assert.Equal(door.Id, receivedDoorReaderDtos.FirstOrDefault().Door.Id);
        }
        public void GetAllAsync_DoorActionsExist_DoorActionRetrievedWithIncludes()
        {
            // Arrange
            var card = new Card
            {
                Id           = 1,
                UserId       = "QWERTY123",
                UniqueNumber = "123-45",
                Status       = CardStatusType.Active,
                Level        = LevelType.Admin,
            };

            var door = new Door
            {
                Id          = 1,
                Name        = "Door1",
                Description = "DoorDescription1",
                Level       = LevelType.Admin,
                Status      = DoorStatusType.Active,
            };

            var doorReader = new DoorReader
            {
                Id           = 1,
                SerialNumber = "123-01",
                DoorId       = door.Id,
                Type         = DoorReaderType.Entrance,
            };

            var doorAction = new DoorAction
            {
                Id           = 1,
                DoorReaderId = doorReader.Id,
                CardId       = card.Id,
                Status       = DoorActionStatusType.Success,
                TimeStamp    = new DateTime(2000, 1, 1),
            };

            _applicationContext.Cards.Add(card);
            _applicationContext.Doors.Add(door);
            _applicationContext.DoorReaders.Add(doorReader);
            _applicationContext.DoorActions.Add(doorAction);
            _applicationContext.SaveChanges();

            // Act
            var includes = new string[]
            {
                nameof(DoorActionDto.Card),
                nameof(DoorActionDto.DoorReader),
                nameof(DoorReader.Door)
            };

            var receivedDoorActionDtos = _doorActionManager
                                         .GetAllAsync(includes: includes)
                                         .GetAwaiter()
                                         .GetResult();

            // Assert
            Assert.Single(receivedDoorActionDtos.Where(doorActionDto => doorActionDto.Id == doorAction.Id));
            Assert.Single(receivedDoorActionDtos.Where(doorActionDto => doorActionDto.Card.Id == card.Id));
            Assert.Single(receivedDoorActionDtos.Where(doorActionDto => doorActionDto.DoorReader.Id == doorReader.Id));
            Assert.Single(receivedDoorActionDtos.Where(doorActionDto => doorActionDto.DoorReader.Door.Id == door.Id));
        }