Ejemplo n.º 1
0
 public static GenericSearchDocument ToAzureDocument <TFunctionMessage>(
     this TransactionForFunctionVO <TFunctionMessage> transactionAndFunction,
     FunctionIndexDefinition <TFunctionMessage> indexDefinition)
     where TFunctionMessage : FunctionMessage, new()
 {
     return(CreateFieldWithValueDictionary(transactionAndFunction, indexDefinition.Fields, (field) => field.GetTransactionForFunctionValue(transactionAndFunction)));
 }
        public void ParameterFieldsCanBeIgnored()
        {
            var searchIndex = new FunctionIndexDefinition <DepositDto>(addPresetTransactionFields: false);
            var dto         = new DepositDto();

            Assert.Null(searchIndex.Field(nameof(dto.Approver)));
        }
        public async Task <IFunctionIndexer <TFunctionMessage> > CreateFunctionIndexer <TFunctionMessage>(string indexName = null, bool addPresetEventLogFields = true) where TFunctionMessage : FunctionMessage, new()
        {
            var searchIndexDefinition =
                new FunctionIndexDefinition <TFunctionMessage>(indexName, addPresetEventLogFields);

            return(await CreateFunctionIndexer(searchIndexDefinition));
        }
Ejemplo n.º 4
0
        public async Task <IAzureFunctionSearchIndex <TFunctionMessage> > GetOrCreateIndex <TFunctionMessage>(
            FunctionIndexDefinition <TFunctionMessage> searchIndexDefinition)
            where TFunctionMessage : FunctionMessage, new()
        {
            var azureIndex = await GetOrCreateAzureIndex(searchIndexDefinition);

            return(new AzureFunctionSearchIndex <TFunctionMessage>(searchIndexDefinition, azureIndex, _client.Indexes.GetClient(azureIndex.Name)));
        }
        public void SupportsExcludingPresetTransactionRelatedFields()
        {
            var searchIndex = new FunctionIndexDefinition <EmptyDto>(
                addPresetTransactionFields: false);

            Assert.Empty(searchIndex
                         .Fields
                         .Where(f => f.IsPresetSearchField()).ToArray());
        }
        public void WillAddParametersToSearchData_ButWillNotBeSearchableByDefault()
        {
            var searchIndex = new FunctionIndexDefinition <DepositDto>(addPresetTransactionFields: false);
            var dto         = new DepositDto();

            var amountField = searchIndex.Field(nameof(dto.Amount));

            Assert.Equal(dto.Amount, amountField.GetValue(dto));
            Assert.False(amountField.IsSearchable);
        }
Ejemplo n.º 7
0
        public IIndexer <TransactionForFunctionVO <TFunctionMessage> > CreateIndexerForFunctionMessage <TFunctionMessage>(
            string indexName, int documentsPerBatch)
            where TFunctionMessage : FunctionMessage, new()
        {
            var indexDefinition = new FunctionIndexDefinition <TFunctionMessage>(indexName);
            var indexer         = new ElasticFunctionIndexer <TFunctionMessage>(indexName, _elasticClient, indexDefinition, documentsPerBatch);

            _indexers.Add(indexer);
            return(indexer);
        }
        public void APrimaryKeyFieldCanBeConfigured()
        {
            var searchIndex = new FunctionIndexDefinition <DepositDto>(addPresetTransactionFields: false);
            var dto         = new DepositDto();

            var idField = searchIndex.Field(nameof(dto.Id));

            Assert.True(idField.IsKey);
            Assert.True(idField.IsSearchable);
            Assert.Equal(dto.Id, idField.GetValue(dto));
        }
        public void AllowsSearchCustomisationOfParameterFields()
        {
            var searchIndex = new FunctionIndexDefinition <DepositDto>(addPresetTransactionFields: false);
            var dto         = new DepositDto();

            var currencyField = searchIndex.Field(nameof(dto.Currency));

            Assert.Equal(dto.Currency, currencyField.GetValue(dto));
            Assert.True(currencyField.IsFacetable);
            Assert.True(currencyField.IsFilterable);
        }
Ejemplo n.º 10
0
        public IIndexer <TransactionForFunctionVO <TFunctionMessage> > CreateIndexerForFunctionMessage <TFunctionMessage>(
            string indexName, int documentsPerBatch = 1)
            where TFunctionMessage : FunctionMessage, new()
        {
            var indexClient     = GetOrCreateIndexClient(indexName);
            var indexDefinition = new FunctionIndexDefinition <TFunctionMessage>(indexName);
            var azureIndexer    = new AzureFunctionIndexer <TFunctionMessage>(indexClient, indexDefinition, documentsPerBatch);

            _indexers.Add(azureIndexer);
            return(azureIndexer);
        }
        public void UserDefinedPrimaryKeysOverridePresets()
        {
            var searchIndex = new FunctionIndexDefinition <DepositDto>(
                addPresetTransactionFields: true);

            var dto = new DepositDto();

            var uidField = searchIndex.Field(PresetSearchFieldName.tx_uid);

            Assert.False(uidField.IsKey);

            Assert.Equal(nameof(dto.Id), searchIndex.KeyField().Name);
        }
        public void CanIncludeNonParameterFieldsWithSearchFieldAttribute()
        {
            var searchIndex = new FunctionIndexDefinition <DepositDto>(addPresetTransactionFields: false);
            var dto         = new DepositDto {
                Category = "test"
            };

            var categoryField = searchIndex.Field(nameof(dto.Category));

            Assert.True(categoryField.IsFacetable);
            Assert.True(categoryField.IsFilterable);
            Assert.Equal(dto.Category, categoryField.GetValue(dto));
        }
        public static object ToAzureDocument <TFunctionMessage>(
            this FunctionCall <TFunctionMessage> transactionAndFunction,
            FunctionIndexDefinition <TFunctionMessage> indexDefinition)
            where TFunctionMessage : FunctionMessage, new()
        {
            var dictionary = new Dictionary <string, object>();

            foreach (var field in indexDefinition.Fields)
            {
                var azureField = field.ToAzureField();

                var val = field.GetValue(transactionAndFunction)?.ToAzureFieldValue();
                if (val != null)
                {
                    dictionary.Add(azureField.Name, val);
                }
            }

            return(dictionary);
        }
Ejemplo n.º 14
0
        public async Task MapsFunctionDtoToGenericSearchDocument()
        {
            var indexDefinition       = new FunctionIndexDefinition <TransferFunction>();
            var mockSearchIndexClient = new MockElasticClient();

            var indexer = new ElasticFunctionIndexer <TransferFunction>("transfer-functions",
                                                                        mockSearchIndexClient.ElasticClient, indexDefinition);

            TransactionForFunctionVO <TransferFunction> transactionForFunction = IndexerTestData.CreateSampleTransactionForFunction();

            await indexer.IndexAsync(transactionForFunction);

            Assert.Single(mockSearchIndexClient.BulkRequests);
            var indexedDoc = mockSearchIndexClient.GetFirstBulkOperation().GetBody() as GenericSearchDocument;

            //check generic mapping
            Assert.Equal(transactionForFunction.Transaction.BlockNumber.ToString(), indexedDoc[PresetSearchFieldName.tx_block_number.ToString()]);
            //check function message mapping
            Assert.Equal(transactionForFunction.FunctionMessage.To, indexedDoc["to"]);
            Assert.Equal(transactionForFunction.FunctionMessage.Value.ToString(), indexedDoc["value"]);
        }
        public static GenericSearchDocument ToGenericElasticSearchDoc <TFunctionMessage>(
            this TransactionForFunctionVO <TFunctionMessage> functionCall,
            FunctionIndexDefinition <TFunctionMessage> indexDefinition) where TFunctionMessage : FunctionMessage, new()
        {
            var dictionary = new GenericSearchDocument();

            foreach (var field in indexDefinition.Fields)
            {
                var val = field.GetTransactionForFunctionValue(functionCall)?.ToElasticSearchFieldValue();
                if (val != null)
                {
                    dictionary.Add(field.Name.ToElasticName(), val);
                }
            }

            var id = indexDefinition.KeyField().GetTransactionForFunctionValue(functionCall);

            dictionary.SetId(id.ToString());

            return(dictionary);
        }
Ejemplo n.º 16
0
        public async Task MapsFunctionDtoToGenericSearchDocument()
        {
            var indexDefinition       = new FunctionIndexDefinition <TransferFunction>();
            var index                 = indexDefinition.ToAzureIndex();
            var mockSearchIndexClient = new SearchIndexClientMock <GenericSearchDocument>();

            var indexer = new AzureFunctionIndexer <TransferFunction>(
                mockSearchIndexClient.SearchIndexClient, indexDefinition);

            TransactionForFunctionVO <TransferFunction> transactionForFunction = IndexerTestData.CreateSampleTransactionForFunction();

            await indexer.IndexAsync(transactionForFunction);

            Assert.Single(mockSearchIndexClient.IndexedBatches);
            var firstIndexAction = mockSearchIndexClient.IndexedBatches[0].Actions.First();
            var document         = firstIndexAction.Document;

            //check generic mapping
            Assert.Equal(transactionForFunction.Transaction.BlockNumber.ToString(), document[PresetSearchFieldName.tx_block_number.ToString()]);
            //check function message mapping
            Assert.Equal(transactionForFunction.FunctionMessage.To, document["to"]);
            Assert.Equal(transactionForFunction.FunctionMessage.Value.ToString(), document["value"]);
        }
        public async Task <IFunctionIndexer <TFunctionMessage> > CreateFunctionIndexer <TFunctionMessage>(FunctionIndexDefinition <TFunctionMessage> searchIndexDefinition) where TFunctionMessage : FunctionMessage, new()
        {
            await CreateIfNotExists(searchIndexDefinition);

            var indexer =
                new ElasticFunctionIndexer <TFunctionMessage>(_elasticClient, searchIndexDefinition);

            return(indexer);
        }
 public AzureFunctionSearchIndex(FunctionIndexDefinition <TFunctionMessage> searchIndexDefinition, Index index, ISearchIndexClient indexClient)
     : base(index, indexClient)
 {
     _searchIndexDefinition = searchIndexDefinition;
 }
        public void AddsPresetTransactionRelatedFields()
        {
            var searchIndex = new FunctionIndexDefinition <EmptyDto>(
                addPresetTransactionFields: true);

            var dto = new EmptyDto();

            var presetFields = searchIndex
                               .Fields
                               .Where(f => f.IsPresetSearchField()).ToArray();

            Assert.Equal(13, presetFields.Length);

            var transactionWithReceipt = CreateDummyTransaction();
            var tx = transactionWithReceipt.Transaction;

            searchIndex
            .Assertions(dto, transactionWithReceipt)
            .HasField(PresetSearchFieldName.tx_uid, f =>
                      f.IsString()
                      .HasFlags(isKey: true, isSortable: true, isSearchable: true)
                      .ReturnsValue("1_1"))
            .HasField(PresetSearchFieldName.tx_hash, f =>
                      f.IsString()
                      .HasFlags(isSortable: true, isSearchable: true, isFilterable: true)
                      .ReturnsValue(tx.TransactionHash))
            .HasField(PresetSearchFieldName.tx_index, f =>
                      f.IsHexBigInteger()
                      .HasFlags(isSortable: true)
                      .ReturnsValue(tx.TransactionIndex))
            .HasField(PresetSearchFieldName.tx_block_hash, f =>
                      f.IsString()
                      .HasFlags()
                      .ReturnsValue(tx.BlockHash))
            .HasField(PresetSearchFieldName.tx_block_number, f =>
                      f.IsHexBigInteger()
                      .HasFlags(isSortable: true, isSearchable: true, isFilterable: true, isFacetable: true)
                      .ReturnsValue(tx.BlockNumber))
            .HasField(PresetSearchFieldName.tx_block_timestamp, f =>
                      f.IsHexBigInteger()
                      .HasFlags(isSortable: true)
                      .ReturnsValue(transactionWithReceipt.BlockTimestamp))
            .HasField(PresetSearchFieldName.tx_value, f =>
                      f.IsHexBigInteger()
                      .HasFlags(isSortable: true)
                      .ReturnsValue(tx.Value))
            .HasField(PresetSearchFieldName.tx_from, f =>
                      f.IsString()
                      .HasFlags(isSortable: true, isSearchable: true, isFilterable: true, isFacetable: true)
                      .ReturnsValue(tx.From))
            .HasField(PresetSearchFieldName.tx_to, f =>
                      f.IsString()
                      .HasFlags(isSortable: true, isSearchable: true, isFilterable: true, isFacetable: true)
                      .ReturnsValue(tx.To))
            .HasField(PresetSearchFieldName.tx_gas, f =>
                      f.IsHexBigInteger()
                      .HasFlags(isSortable: true)
                      .ReturnsValue(tx.Gas))
            .HasField(PresetSearchFieldName.tx_gas_price, f =>
                      f.IsHexBigInteger()
                      .HasFlags(isSortable: true)
                      .ReturnsValue(tx.GasPrice))
            .HasField(PresetSearchFieldName.tx_input, f =>
                      f.IsString()
                      .HasFlags()
                      .ReturnsValue(tx.Input))
            .HasField(PresetSearchFieldName.tx_nonce, f =>
                      f.IsHexBigInteger()
                      .HasFlags(isSortable: true, isSearchable: true, isFilterable: true)
                      .ReturnsValue(tx.Nonce));
        }
        public void DefinesExpectedName()
        {
            var searchIndex = new FunctionIndexDefinition <DepositDto>(addPresetTransactionFields: false);

            Assert.Equal("Deposit", searchIndex.IndexName);
        }