Пример #1
0
        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);
        }
Пример #2
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);
        }