public void GivenAnEmptySaltCacheHashWillGenerateSalt() { var mockSaltCache = new Mock <ISaltCache>(); var savedSaltKey = ""; var savedSaltValue = ""; mockSaltCache.Setup(s => s.TryAdd(It.IsAny <string>(), It.IsAny <string>())).Callback <string, string>( (key, value) => { savedSaltKey = key; savedSaltValue = value; }); var mockHashProvider = new Mock <IHashProvider>(); var hashResult = new HashResult(Root.Any.String(), Root.Any.String()); mockHashProvider.Setup(h => h.CreateHash(It.IsAny <string>(), It.IsAny <string>())).Returns(hashResult); var sut = new HashRepository(mockHashProvider.Object, mockSaltCache.Object, true); const string unhashed = "unhashed"; var entity = new WordMetric(unhashed, unhashed, Root.Any.Integer(), null); var hashedEntities = sut.Hash(new[] { entity }); var hashedEntity = hashedEntities.First(); Assert.IsFalse(unhashed == hashedEntity.Id); Assert.AreEqual(hashResult.Hash, hashedEntity.Id); Assert.AreEqual(hashResult.Salt, hashedEntity.Salt); Assert.AreEqual(hashResult.Salt, savedSaltValue); Assert.AreEqual(unhashed, savedSaltKey); }
public void GivenWordWhichExistsInTheCacheThenHashWillReuseSalt() { var mockSaltCache = new Mock <ISaltCache>(); var knownSalt = Root.Any.String(); var knownWord = Root.Any.String(); mockSaltCache.Setup(s => s.Get(knownWord)).Returns(knownSalt); var mockHashProvider = new Mock <IHashProvider>(); var hashResult = new HashResult(Root.Any.String(), knownSalt); mockHashProvider.Setup(h => h.CreateHash(knownWord, knownSalt)).Returns(hashResult); var sut = new HashRepository(mockHashProvider.Object, mockSaltCache.Object, true); var entity = new WordMetric(knownWord, knownWord, Root.Any.Integer(), null); var hashedEntities = sut.Hash(new[] { entity }); mockHashProvider.Verify(h => h.CreateHash(knownWord, knownSalt), Times.Once); }