public async Task TestContactsAreContainedCachedAndApproved() { var pubKeyAddress = Seed.Random().Value; var contactRequestAddress = new Address(Seed.Random().Value); var storedContactAddress = Seed.Random().Value; var keyPair = InMemoryContactRepository.NtruKeyPair; var contactRepository = new InMemoryContactRepository(); var transactionCache = new MemoryTransactionCache(); var bundle = CreateBundle( contactRequestAddress, ContactExchange.Create(new Contact { ChatAddress = storedContactAddress, Rejected = true }, keyPair.PublicKey, keyPair.PublicKey).Payload); bundle.Transactions.ForEach(async t => await transactionCache.SaveTransactionAsync(new TransactionCacheItem { Address = contactRequestAddress, TransactionHash = t.Hash, TransactionTrytes = t.ToTrytes() })); await contactRepository.AddContactAsync(storedContactAddress, true, pubKeyAddress); var iotaRepositoryMock = new Mock <IIotaRepository>(); iotaRepositoryMock.Setup(i => i.FindTransactionsByAddressesAsync(It.IsAny <List <Address> >())).ReturnsAsync( new TransactionHashList { Hashes = new List <Hash>(bundle.Transactions.Select(t => t.Hash)) }); iotaRepositoryMock.Setup(i => i.GetTrytesAsync(It.IsAny <List <Hash> >())).ReturnsAsync(new List <TransactionTrytes>()); var interactor = new GetContactsInteractor(contactRepository, new TangleMessenger(iotaRepositoryMock.Object, transactionCache), NtruEncryption.Key); var response = await interactor.ExecuteAsync( new GetContactsRequest { PublicKeyAddress = new Address(pubKeyAddress), RequestAddress = contactRequestAddress, KeyPair = keyPair }); Assert.AreEqual(1, response.ApprovedContacts.Count); }
public async Task TestTransactionIsCachedShouldMergeWithMessagesFromTangle() { var repository = new InMemoryIotaRepository(); var transactionCache = new MemoryTransactionCache(); var messenger = new TangleMessenger(repository, transactionCache); var receiver = new Address("GUEOJUOWOWYEXYLZXNQUYMLMETF9OOGASSKUZZWUJNMSHLFLYIDIVKXKLTLZPMNNJCYVSRZABFKCAVVIW"); var payload = TryteString.FromUtf8String("Hi. I'm a test"); var messageOne = new Message(payload, receiver); var bundle = new Bundle(); bundle.AddTransfer( new Transfer { Address = messageOne.Receiver, Message = messageOne.Payload, Tag = Constants.Tag, Timestamp = Timestamp.UnixSecondsTimestamp }); bundle.Finalize(); bundle.Sign(); await repository.SendTrytesAsync(bundle.Transactions); await transactionCache.SaveTransactionAsync( new TransactionCacheItem { Address = receiver, TransactionHash = new Hash(Seed.Random().Value), TransactionTrytes = new TransactionTrytes(TryteString.FromUtf8String("Hi. I'm a test").Value) }); var sentMessages = await messenger.GetMessagesByAddressAsync(receiver); Assert.AreEqual(2, sentMessages.Count); Assert.AreEqual("Hi. I'm a test", sentMessages[0].Payload.ToUtf8String()); Assert.AreEqual("Hi. I'm a test", sentMessages[1].Payload.ToUtf8String()); }