public async Task TestNoContactsExistShouldReturnEmptyList() { var interactor = new GetContactsInteractor(new InMemoryContactRepository(), new InMemoryTransactionCache(), new InMemoryIotaRepository()); var response = await interactor.ExecuteAsync(new GetContactsRequest { PublicKeyAddress = new Address(Hash.Empty.Value) }); Assert.AreEqual(0, response.ApprovedContacts.Count); }
public async Task TestExceptionGetsThrownShouldReturnErrorCode() { var interactor = new GetContactsInteractor(new ExceptionContactRepository(), new InMemoryTransactionCache(), new InMemoryIotaRepository()); var response = await interactor.ExecuteAsync(new GetContactsRequest { PublicKeyAddress = new Address(Hash.Empty.Value) }); Assert.AreEqual(ResponseCode.ContactsUnavailable, response.Code); }
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 keyPair = InMemoryContactRepository.NtruKeyPair; var contactRepository = new InMemoryContactRepository(); await contactRepository.AddContactAsync(storedContactAddress, true, pubKeyAddress); await contactRepository.AddContactAsync(rejectedContactAddress, false, pubKeyAddress); var rejectedContactBundle = CreateBundle( contactRequestAddress, ContactExchange.Create( new Contact { ChatAddress = rejectedContactAddress, PublicKeyAddress = rejectedContactAddress, Rejected = true }, keyPair.PublicKey, keyPair.PublicKey).Payload); var approvedContactBundle = CreateBundle( contactRequestAddress, ContactExchange.Create( new Contact { ChatAddress = storedContactAddress, PublicKeyAddress = storedContactAddress }, keyPair.PublicKey, keyPair.PublicKey).Payload); var requestBundle = CreateBundle( contactRequestAddress, ContactExchange.Create( new Contact { ChatAddress = storedContactAddress, PublicKeyAddress = storedContactAddress, Request = true, Name = "Requester" }, keyPair.PublicKey, keyPair.PublicKey).Payload); var messenger = new InMemoryMessenger(); messenger.SentMessages.Add(new Message(rejectedContactBundle.Transactions.Aggregate(new TryteString(), (current, transaction) => current.Concat(transaction.Fragment)), contactRequestAddress)); messenger.SentMessages.Add(new Message(approvedContactBundle.Transactions.Aggregate(new TryteString(), (current, transaction) => current.Concat(transaction.Fragment)), contactRequestAddress)); messenger.SentMessages.Add(new Message(requestBundle.Transactions.Aggregate(new TryteString(), (current, transaction) => current.Concat(transaction.Fragment)), contactRequestAddress)); var interactor = new GetContactsInteractor(contactRepository, messenger, NtruEncryption.Key); var response = await interactor.ExecuteAsync( new GetContactsRequest { PublicKeyAddress = new Address(pubKeyAddress), RequestAddress = contactRequestAddress, KeyPair = keyPair }); Assert.AreEqual(ResponseCode.Success, response.Code); Assert.AreEqual(1, response.ApprovedContacts.Count); Assert.AreEqual(1, response.PendingContactRequests.Count); }
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); }
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 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); }