Ejemplo n.º 1
0
        public async Task Remove_WhenAnEntityIsDeleted_ThenItCannotBeRetrieved()
        {
            // arrange
            var firstEntityType1 = new TestType1Entity {
                Name = "test1_1", Id = "1"
            };
            var secondEntityType1 = new TestType1Entity {
                Name = "test1_2", Id = "2"
            };
            var entityType2 = new TestType2Entity {
                Name = "test2", Id = "1"
            };

            await _cacheType1.Set(new[] { firstEntityType1, secondEntityType1 });

            await _cacheType2.Set(new[] { entityType2 });

            // act
            await _cacheType1.Remove(firstEntityType1.Id);

            var deletedEntityType1Found = await _cacheType1.Get(firstEntityType1.Id);

            var secondEntityType1Found = await _cacheType1.Get(secondEntityType1.Id);

            var entityType2Found = await _cacheType2.Get(entityType2.Id);

            // assert
            Assert.That(deletedEntityType1Found, Is.Null);
            Assert.That(secondEntityType1Found.Name, Is.EqualTo(secondEntityType1.Name));
            Assert.That(entityType2Found.Name, Is.EqualTo(entityType2.Name));
        }
        public async Task AddOrUpdate_WhenAnEntityIsAdded_ThenUniqueIndexMustBeChanged()
        {
            // arrange
            var entity = new TestType1Entity {
                Name = "test", Id = "1"
            };

            // act
            await _cacheType1.AddOrUpdate(entity);

            var retrievedEntity   = (await _cacheType1.GetItemsByIndex("name", entity.Name)).FirstOrDefault();
            var retrievedEntityId = (await _cacheType1.GetKeysByIndex("name", entity.Name)).FirstOrDefault();

            var entityChanged = new TestType1Entity {
                Name = "changed", Id = "1"
            };
            await _cacheType1.AddOrUpdate(entityChanged);

            retrievedEntity   = (await _cacheType1.GetItemsByIndex("name", entity.Name)).FirstOrDefault();
            retrievedEntityId = (await _cacheType1.GetKeysByIndex("name", entity.Name)).FirstOrDefault();

            var retrievedChangedEntity   = (await _cacheType1.GetItemsByIndex("name", entityChanged.Name)).FirstOrDefault();
            var retrievedChangedEntityId = (await _cacheType1.GetKeysByIndex("name", entityChanged.Name)).FirstOrDefault();

            // assert
            Assert.That(retrievedEntityId, Is.Null);
            Assert.That(retrievedEntity, Is.Null);
            Assert.That(retrievedChangedEntityId, Is.EqualTo(entityChanged.Id));
            Assert.That(retrievedChangedEntity.Name, Is.EqualTo(entityChanged.Name));
        }
Ejemplo n.º 3
0
        public async Task Remove_WhenKeyNotFound_ShouldGracefullyPass()
        {
            // arrange
            var entity1 = new TestType1Entity {
                Name = "test1", Id = "1"
            };
            await _cacheType1.Set(new[] { entity1 });

            // act
            await _cacheType1.Remove("any");

            // assert
            Assert.Pass();
        }
Ejemplo n.º 4
0
        public async Task AddOrUpdate_WhenAnEntityIsAdded_ThenItCanBeRetrieved()
        {
            // arrange
            var entity = new TestType1Entity {
                Name = "test", Id = "1"
            };

            // act
            await _cacheType1.AddOrUpdate(entity);

            var retrievedEntity = await _cacheType1.Get(entity.Id);

            // assert
            Assert.That(retrievedEntity.Name, Is.EqualTo(entity.Name));
        }
Ejemplo n.º 5
0
        public async Task Set_GivenEmptyStore_WhenItemsAddedAreEmpty_ThenTheKeyMustBeFoundAndContainsNoItems()
        {
            // arrange
            var emptyCollection = new TestType1Entity[] {};

            // act
            await _cacheType1.Set(emptyCollection);

            var allKeys =
                _connection.GetEndPoints()
                .SelectMany(
                    endPoint => _connection.GetServer(endPoint).Keys().Select(key => key.ToString()).ToArray())
                .ToArray();

            // assert
            Assert.That(allKeys, Is.Not.Empty);
        }
Ejemplo n.º 6
0
        public async Task AddOrUpdate_WhenEntityAlreadyExists_ThenEntityIsUpdated()
        {
            // arrange
            var entity = new TestType1Entity {
                Name = "test1", Id = "1"
            };
            await _cacheType1.Set(new[] { entity });

            // act
            entity.Name = "test1_changed";

            await _cacheType1.AddOrUpdate(entity);

            var retrievedEntity = await _cacheType1.Get(entity.Id);

            // assert
            Assert.That(retrievedEntity.Name, Is.EqualTo(entity.Name));
            Assert.That(retrievedEntity.Id, Is.EqualTo(entity.Id));
        }
Ejemplo n.º 7
0
        public async Task AddOrUpdate_WhenAnEntityIsAddedWithExpiryOf1Second_ThenItCannotBeRetrieved()
        {
            // arrange
            var entity = new TestType1Entity {
                Name = "test", Id = "1"
            };

            // act
            await _cacheType1WithExpiry.AddOrUpdate(entity);

            var retrievedEntityBeforeExpiry = await _cacheType1WithExpiry.Get(entity.Id);

            await Task.Delay(1500);

            var retrievedEntityAfterExpiry = await _cacheType1WithExpiry.Get(entity.Id);

            // assert
            Assert.That(retrievedEntityBeforeExpiry.Name, Is.EqualTo(entity.Name));
            Assert.That(retrievedEntityAfterExpiry, Is.Null);
        }
Ejemplo n.º 8
0
        public async Task Remove_GivenEmptyStore_WhenItemAddedThenRemoved_ThenTheKeyMustBeFoundButEmpty()
        {
            // arrange
            var entity = new TestType1Entity {
                Name = "test1_1", Id = "1"
            };

            // act
            await _cacheType1.AddOrUpdate(entity);

            await _cacheType1.Remove(entity.Id);

            var allKeys =
                _connection.GetEndPoints()
                .SelectMany(
                    endPoint => _connection.GetServer(endPoint).Keys().Select(key => key.ToString()).ToArray())
                .ToArray();

            // assert
            Assert.That(allKeys, Is.Not.Empty);
        }
Ejemplo n.º 9
0
        public async Task AddOrUpdate_WhenTheSameKeyIsAddedTwice_ThenItIsAddedThenUpdated()
        {
            // arrange
            var firstEntity = new TestType1Entity {
                Name = "test_original", Id = "1"
            };
            var secondEntity = new TestType1Entity {
                Name = "test_changed", Id = "1"
            };

            // act
            await _cacheType1.AddOrUpdate(firstEntity);

            await _cacheType1.AddOrUpdate(secondEntity);

            var retrievedAllEntities = (await _cacheType1.GetAll()).ToArray();
            var retrievedEntity      = await _cacheType1.Get(firstEntity.Id);

            // assert
            Assert.That(retrievedEntity.Name, Is.EqualTo(secondEntity.Name)); // name updated properly
            Assert.That(retrievedAllEntities, Has.Length.EqualTo(1));         // no duplicate
        }
Ejemplo n.º 10
0
        public async Task GetAll_WhenAnEntityOfDifferentTypeAreAdded_ThenAllCanBeRetrieved()
        {
            // arrange
            var firstEntityType1 = new TestType1Entity {
                Name = "test1_1", Id = "1"
            };
            var secondEntityType1 = new TestType1Entity {
                Name = "test1_2", Id = "2"
            };
            var firstEntityType2 = new TestType2Entity {
                Name = "test2_1", Id = "1"
            };
            var secondEntityType2 = new TestType2Entity {
                Name = "test2_2", Id = "2"
            };


            await _cacheType1.AddOrUpdate(firstEntityType1);

            await _cacheType1.AddOrUpdate(secondEntityType1);

            await _cacheType2.AddOrUpdate(firstEntityType2);

            await _cacheType2.AddOrUpdate(secondEntityType2);


            // act
            var retrievedAllType1Entities = (await _cacheType1.GetAll()).ToArray();
            var retrievedAllType2Entities = (await _cacheType2.GetAll()).ToArray();

            // assert
            Assert.That(retrievedAllType1Entities, Has.Length.EqualTo(2));
            Assert.That(retrievedAllType2Entities, Has.Length.EqualTo(2));
            Assert.That(retrievedAllType1Entities.Select(item => item.Name),
                        Contains.Item(firstEntityType1.Name).And.Contains(secondEntityType1.Name));
            Assert.That(retrievedAllType2Entities.Select(item => item.Name),
                        Contains.Item(firstEntityType2.Name).And.Contains(secondEntityType2.Name));
        }
Ejemplo n.º 11
0
        public async Task Flush_WhenAnEntityOfType1AndType2AreAdded_ThenFlushed_ThenStoreMustBeEmpty()
        {
            // arrange
            var entity1 = new TestType1Entity {
                Name = "test1", Id = "1"
            };
            var entity2 = new TestType2Entity {
                Name = "test2", Id = "1"
            };

            await _cacheType1.Set(new[] { entity1 });

            await _cacheType2.Set(new[] { entity2 });

            // act (flush type 1)
            await _cacheType1.Flush();

            var entity1Found = await _cacheType1.Get(entity1.Id);

            var entity2Found = await _cacheType2.Get(entity2.Id);

            // assert
            Assert.That(entity1Found, Is.Null);
            Assert.That(entity2Found.Name, Is.EqualTo(entity2.Name));

            // act (flush type 2)
            await _cacheType2.Flush();

            entity1Found = await _cacheType1.Get(entity1.Id);

            entity2Found = await _cacheType2.Get(entity2.Id);

            // assert
            Assert.That(entity1Found, Is.Null);
            Assert.That(entity2Found, Is.Null);
        }