public async Task UnlockTestAsync() { // Arrange var id = new KeePassId(Guid.NewGuid()); var log = Substitute.For <ILogger>(); var filePicker = Substitute.For <IFilePicker>(); var db = Substitute.For <IFile>(); filePicker.GetDatabaseAsync().Returns(Task.FromResult(db)); var access = Substitute.For <IDatabaseFileAccess>(); access.GetDatabaseAsync(id).Returns(db); var credentialProvider = Substitute.For <ICredentialProvider>(); var credentials = new KeePassCredentials(db, "pass"); credentialProvider.GetCredentialsAsync(db).Returns(credentials); var cache = Substitute.ForPartsOf <DatabaseCache>(log, access, filePicker); var kpDb = Substitute.For <IKeePassDatabase>(); cache.UnlockAsync(db, Arg.Any <KeePassCredentials>()).Returns(kpDb); // Act var result = await cache.UnlockAsync(id, credentialProvider); // Assert Assert.Equal(kpDb, result); await access.Received(1).GetDatabaseAsync(id); await credentialProvider.Received(1).GetCredentialsAsync(db); }
public async Task InvalidUnlockTestAsync(string db, string password, bool hasKey) { var kdbx = TestAssets.GetFile(db); var unlocker = new KdbxDatabaseCache(Substitute.For <ILogger>(), Substitute.For <IDatabaseFileAccess>()); var key = hasKey ? TestAssets.GetFile(Path.ChangeExtension(db, "key")) : null; var credentials = new KeePassCredentials(key, password); await Assert.ThrowsAsync <InvalidCredentialsException>(async() => await unlocker.UnlockAsync(kdbx, credentials)); }
public async Task UnlockTestAsync(string db, string password, bool hasKey) { var kdbx = TestAssets.GetFile(db); var unlocker = new KdbxDatabaseCache(Substitute.For <ILogger>(), Substitute.For <IDatabaseFileAccess>()); var key = hasKey ? TestAssets.GetFile(Path.ChangeExtension(db, "key")) : null; var credentials = new KeePassCredentials(key, password); var result = await unlocker.UnlockAsync(kdbx, credentials); Assert.NotNull(result); Assert.Equal(result.Id, kdbx.IdFromPath()); }