public void Generates_sequential_values() { var stateEntry = TestHelpers.CreateStateEntry <AnEntity>(_model); var property = stateEntry.EntityType.GetProperty("Id"); var sequenceName = RedisDatabase.ConstructRedisValueGeneratorKeyName(property); var blockSize = 1; var incrementingValue = 0L; var dbConfigurationMock = new Mock <DbContextConfiguration>(); var redisDatabaseMock = new Mock <RedisDatabase>(dbConfigurationMock.Object); redisDatabaseMock .Setup(db => db.GetNextGeneratedValue(It.IsAny <IProperty>(), It.IsAny <long>(), It.IsAny <string>())) .Returns <IProperty, long, string>((p, l, s) => { var originalValue = incrementingValue; incrementingValue += l; return(originalValue); }); var intProperty = stateEntry.EntityType.GetProperty("Id"); var longProperty = stateEntry.EntityType.GetProperty("Long"); var shortProperty = stateEntry.EntityType.GetProperty("Short"); var byteProperty = stateEntry.EntityType.GetProperty("Byte"); var uintProperty = stateEntry.EntityType.GetProperty("UnsignedInt"); var ulongProperty = stateEntry.EntityType.GetProperty("UnsignedLong"); var ushortProperty = stateEntry.EntityType.GetProperty("UnsignedShort"); var sbyteProperty = stateEntry.EntityType.GetProperty("SignedByte"); var generator = new RedisSequenceValueGenerator(redisDatabaseMock.Object, sequenceName, blockSize); for (var i = 0; i < 15; i++) { generator.Next(stateEntry, intProperty); Assert.Equal(i, stateEntry[intProperty]); Assert.False(stateEntry.HasTemporaryValue(intProperty)); } for (var i = 15; i < 30; i++) { generator.Next(stateEntry, longProperty); Assert.Equal((long)i, stateEntry[longProperty]); Assert.False(stateEntry.HasTemporaryValue(longProperty)); } for (var i = 30; i < 45; i++) { generator.Next(stateEntry, shortProperty); Assert.Equal((short)i, stateEntry[shortProperty]); Assert.False(stateEntry.HasTemporaryValue(shortProperty)); } for (var i = 45; i < 60; i++) { generator.Next(stateEntry, byteProperty); Assert.Equal((byte)i, stateEntry[byteProperty]); Assert.False(stateEntry.HasTemporaryValue(byteProperty)); } for (var i = 60; i < 75; i++) { generator.Next(stateEntry, uintProperty); Assert.Equal((uint)i, stateEntry[uintProperty]); Assert.False(stateEntry.HasTemporaryValue(uintProperty)); } for (var i = 75; i < 90; i++) { generator.Next(stateEntry, ulongProperty); Assert.Equal((ulong)i, stateEntry[ulongProperty]); Assert.False(stateEntry.HasTemporaryValue(ulongProperty)); } for (var i = 90; i < 105; i++) { generator.Next(stateEntry, ushortProperty); Assert.Equal((ushort)i, stateEntry[ushortProperty]); Assert.False(stateEntry.HasTemporaryValue(ushortProperty)); } for (var i = 105; i < 120; i++) { generator.Next(stateEntry, sbyteProperty); Assert.Equal((sbyte)i, stateEntry[sbyteProperty]); Assert.False(stateEntry.HasTemporaryValue(sbyteProperty)); } }