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);
        }
Esempio n. 3
0
 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);
     });
 }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
 /// <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);
 }