public async Task TestContactsAreCachedAndOnTangleShouldExcludeRejectedContactsAndSetCache() { var pubKeyAddress = Seed.Random().Value; var contactRequestAddress = new Address(Seed.Random().Value); var rejectedContactAddress = Seed.Random().Value; var storedContactAddress = Seed.Random().Value; var contactRepository = new InMemoryContactRepository(); await contactRepository.AddContactAsync(storedContactAddress, true, pubKeyAddress); await contactRepository.AddContactAsync(rejectedContactAddress, false, pubKeyAddress); var approvedContactMessage = TryteString.FromUtf8String(JsonConvert.SerializeObject(new Contact { ChatAddress = storedContactAddress })); var rejectedContactBundle = CreateBundle( contactRequestAddress, TryteString.FromUtf8String(JsonConvert.SerializeObject(new Contact { ChatAddress = rejectedContactAddress, Rejected = true }))); var approvedContactBundle = CreateBundle(contactRequestAddress, approvedContactMessage); var iotaRepository = new InMemoryIotaRepository(); iotaRepository.SentBundles.Add(rejectedContactBundle); iotaRepository.SentBundles.Add(approvedContactBundle); iotaRepository.SentBundles.Add( CreateBundle( contactRequestAddress, TryteString.FromUtf8String(JsonConvert.SerializeObject(new Contact { ChatAddress = storedContactAddress, Request = true })))); var transactionCache = new InMemoryTransactionCache(); var cacheItem = new TransactionCacheItem { Address = contactRequestAddress, TransactionHash = approvedContactBundle.Transactions[0].Hash, TransactionTrytes = approvedContactMessage }; transactionCache.Items.Add(cacheItem); var interactor = new GetContactsInteractor(contactRepository, transactionCache, iotaRepository); var response = await interactor.ExecuteAsync( new GetContactsRequest { PublicKeyAddress = new Address(pubKeyAddress), ContactRequestAddress = contactRequestAddress }); Assert.AreEqual(1, response.ApprovedContacts.Count); Assert.AreEqual(1, response.PendingContactRequests.Count); Assert.AreEqual(3, transactionCache.Items.Count); }
/// <inheritdoc /> public async Task SaveTransactionAsync(TransactionCacheItem item) { var sqlLiteMessage = new SqLiteMessage { TransactionHash = item.TransactionHash.Value, ChatAddress = item.Address.Value, MessageTryteString = item.TransactionTrytes.ToUtf8String() }; await this.Connection.InsertAsync(sqlLiteMessage); }
public async Task SaveTransactionAsync(TransactionCacheItem item) { await Task.Run(() => { var transactionCache = new DbTransactionCache() { TransactionHash = item.TransactionHash.Value, ChatAddress = item.Address.Value, MessageTryte = item.TransactionTrytes.Value }; AppBase.Database.TransactionCache.AddObject(transactionCache); }); }
public async Task TestContactsAreContainedCachedAndApproved() { var pubKeyAddress = Seed.Random().Value; var contactRequestAddress = new Address(Seed.Random().Value); var storedContactAddress = Seed.Random().Value; var contactRepository = new InMemoryContactRepository(); var transactionCache = new InMemoryTransactionCache(); var cacheItem = new TransactionCacheItem { Address = contactRequestAddress, TransactionHash = new Hash(Seed.Random().Value), TransactionTrytes = TryteString.FromUtf8String( JsonConvert.SerializeObject( new Contact { ChatAddress = storedContactAddress })) }; await transactionCache.SaveTransactionAsync(cacheItem); 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> { cacheItem.TransactionHash } }); var interactor = new GetContactsInteractor(contactRepository, transactionCache, iotaRepositoryMock.Object); var response = await interactor.ExecuteAsync( new GetContactsRequest { PublicKeyAddress = new Address(pubKeyAddress), ContactRequestAddress = contactRequestAddress }); Assert.AreEqual(1, response.ApprovedContacts.Count); }
/// <summary> /// The save transaction. /// </summary> /// <param name="item"> /// The item. /// </param> /// <returns> /// The <see cref="Task"/>. /// </returns> public async Task SaveTransactionAsync(TransactionCacheItem item) { this.Items.Add(item); }