public void WhenConstructingTheRepository_ItWill_BeCreated()
        {
            sut = new BrilligRepository(_db);

            Assert.NotNull(sut);
            Assert.IsAssignableFrom <IKeyedRepository <Brillig, string> >(sut);
        }
        public async Task GetAsync_WillReturnNull_WhenNotExists(string id)
        {
            // Arrange
            sut = new BrilligRepository(_db);

            // Act
            Brillig result = await sut.GetAsync(id);

            // Assert
            Assert.Null(result);
        }
        public async Task CheckingExistence_WillReturnFalse_WhenNotExists(string id)
        {
            // Arrange
            sut = new BrilligRepository(_db);

            // Act
            bool result = await sut.Exists(id);

            // Assert
            Assert.False(result);
        }
        public async Task GetAsyncMultiple_WillReturnAllMatchingEntities(string id1, string id2, string id3)
        {
            // Arrange
            sut = new BrilligRepository(_db);

            // Act
            IEnumerable <Brillig> result = await sut.GetAsync(id1, id2, id3);

            // Assert
            Assert.NotEmpty(result);
            Assert.Equal(3, result.Count());
        }
        public async Task GetAsync_WillReturnTheCorrectValue_WhenExists(string id)
        {
            // Arrange
            sut = new BrilligRepository(_db);

            // Act
            Brillig result = await sut.GetAsync(id);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(id, result.Id);
        }
        public async Task CheckingExistenceOfMultiples_WillReturnFalse_WhenAnyNotExist(string id1, string id2, string id3)
        {
            // Arrange


            sut = new BrilligRepository(_db);

            // Act
            bool result = await sut.Exists(id1, id2, id3);

            // Assert
            Assert.False(result);
        }
        public async Task AttemptingADelete_WithEmptyIds_HasNoEffect()
        {
            // Arrange
            sut = new BrilligRepository(_db);
            var preBrilligs = await _db.Brilligs.CountAsync();

            // Act
            await sut.DeleteAsync();

            // Assert
            var postBrilligs = await _db.Brilligs.CountAsync();

            Assert.Equal(preBrilligs, postBrilligs);
        }
        public async Task CheckingExistenceOfMultiples_WillReturnTrue_WhenAllExist(string id1, string id2, string id3)
        {
            // Arrange
            await _db.Database.EnsureDeletedAsync();

            await _db.Database.EnsureCreatedAsync();

            sut = new BrilligRepository(_db);

            // Act
            bool result = await sut.Exists(id1, id2, id3);

            // Assert
            Assert.True(result);
        }
        public async Task DeletingEntitiesByKey_WillNotAffectNonExistentKeys()
        {
            // Arrange
            await _db.Database.EnsureDeletedAsync();

            await _db.Database.EnsureCreatedAsync();

            var targetIds   = new[] { "2", "22", "33" };
            var preBrilligs = _db.Brilligs.Where(x => targetIds.Contains(x.Id)).ToArray();

            Assert.Single(preBrilligs);

            sut = new BrilligRepository(_db);

            // Act
            await sut.DeleteAsync(targetIds);

            // Assert
            var postBrilligs = _db.Brilligs.Where(x => targetIds.Contains(x.Id)).ToArray();

            Assert.Empty(postBrilligs);
        }
        public async Task DeletingEntitiesByKey_RemoveEntriesWithExisitngKeys()
        {
            // Arrange
            await _db.Database.EnsureDeletedAsync();

            await _db.Database.EnsureCreatedAsync();

            var targetIds = new[] { "1", "2", "3" };

            var preBrilligs = _db.Brilligs.Where(x => targetIds.Contains(x.Id)).ToArray();

            Assert.Equal(3, preBrilligs.Length);

            sut = new BrilligRepository(_db);

            // Act
            await sut.DeleteAsync(targetIds);

            // Assert
            var postBrilligs = _db.Brilligs.Where(x => targetIds.Contains(x.Id)).ToArray();

            Assert.Empty(postBrilligs);
        }