Beispiel #1
0
        public void BuildsExpectedIndexForCodeGeneratedEventDto()
        {
            var searchIndex = new EventSearchIndexDefinition <DepositedEventDTO>();

            var depositedEventDto = new DepositedEventDTO
            {
                NewBalance = new HexBigInteger("100"),
                Value      = new HexBigInteger("10"),
                Sender     = "adsfadsfasdfasdf"
            };

            Assert.Equal("Deposited", searchIndex.IndexName);
            Assert.Equal(12, searchIndex.Fields.Length);

            var senderField = searchIndex.Field(nameof(depositedEventDto.Sender));

            Assert.NotNull(senderField);
            Assert.Equal(typeof(string), senderField.DataType);
            Assert.False(senderField.IsKey);
            Assert.False(senderField.Ignore);
            Assert.True(senderField.IsFacetable);
            Assert.True(senderField.IsFilterable);
            Assert.True(senderField.IsSearchable);
            Assert.True(senderField.IsSortable);
            Assert.Equal(depositedEventDto.Sender, senderField.EventValue(depositedEventDto));

            var valueField = searchIndex.Field(nameof(depositedEventDto.Value));

            Assert.NotNull(valueField);
            Assert.Equal(typeof(BigInteger), valueField.DataType);
            Assert.False(valueField.IsKey);
            Assert.False(valueField.Ignore);
            Assert.False(valueField.IsSearchable);
            Assert.False(valueField.IsFilterable);
            Assert.False(valueField.IsFacetable);
            Assert.False(valueField.IsSortable);
            Assert.Equal(depositedEventDto.Value, valueField.EventValue(depositedEventDto));

            var newBalanceField = searchIndex.Field(nameof(depositedEventDto.NewBalance));

            Assert.NotNull(newBalanceField);
            Assert.Equal(typeof(BigInteger), newBalanceField.DataType);
            Assert.False(newBalanceField.IsKey);
            Assert.False(newBalanceField.Ignore);
            Assert.False(newBalanceField.IsSearchable);
            Assert.False(newBalanceField.IsFilterable);
            Assert.False(newBalanceField.IsFacetable);
            Assert.False(newBalanceField.IsSortable);
            Assert.Equal(depositedEventDto.NewBalance, newBalanceField.EventValue(depositedEventDto));

            var log_key              = searchIndex.Field(PresetSearchFieldName.log_key);
            var log_removed          = searchIndex.Field(PresetSearchFieldName.log_removed);
            var log_type             = searchIndex.Field(PresetSearchFieldName.log_type);
            var log_logIndex         = searchIndex.Field(PresetSearchFieldName.log_log_index);
            var log_transactionIndex = searchIndex.Field(PresetSearchFieldName.log_transaction_index);
            var log_transactionHash  = searchIndex.Field(PresetSearchFieldName.log_transaction_hash);
            var log_blockHash        = searchIndex.Field(PresetSearchFieldName.log_block_hash);
            var log_blockNumber      = searchIndex.Field(PresetSearchFieldName.log_block_number);
            var log_address          = searchIndex.Field(PresetSearchFieldName.log_address);

            var filterLog = new FilterLog
            {
                Type             = "type",
                Address          = "address",
                BlockHash        = "block_hash",
                BlockNumber      = new HexBigInteger(101),
                TransactionHash  = "transaction_hash",
                TransactionIndex = new HexBigInteger(3),
                LogIndex         = new HexBigInteger(9),
                Removed          = false
            };

            Assert.NotNull(log_key);
            Assert.Equal(typeof(string), log_key.DataType);
            Assert.True(log_key.IsKey);
            Assert.True(log_key.IsSortable);
            Assert.False(log_key.Ignore);
            Assert.False(log_key.IsSearchable);
            Assert.False(log_key.IsFacetable);
            Assert.False(log_key.IsFilterable);
            Assert.Equal("101_3_9", log_key.LogValueCallback(filterLog));

            Assert.NotNull(log_removed);
            Assert.Equal(typeof(bool), log_removed.DataType);
            Assert.False(log_removed.Ignore);
            Assert.False(log_removed.IsKey);
            Assert.False(log_removed.IsFacetable);
            Assert.True(log_removed.IsFilterable);
            Assert.False(log_removed.IsSearchable);
            Assert.True(log_removed.IsSortable);
            Assert.Equal(filterLog.Removed, log_removed.LogValueCallback(filterLog));

            Assert.NotNull(log_type);
            Assert.Equal(typeof(string), log_type.DataType);
            Assert.False(log_type.Ignore);
            Assert.False(log_type.IsKey);
            Assert.False(log_type.IsFacetable);
            Assert.True(log_type.IsFilterable);
            Assert.False(log_type.IsSearchable);
            Assert.True(log_type.IsSortable);
            Assert.Equal(filterLog.Type, log_type.LogValueCallback(filterLog));

            Assert.NotNull(log_logIndex);
            Assert.Equal(typeof(HexBigInteger), log_logIndex.DataType);
            Assert.False(log_logIndex.Ignore);
            Assert.False(log_logIndex.IsKey);
            Assert.False(log_logIndex.IsFacetable);
            Assert.False(log_logIndex.IsFilterable);
            Assert.False(log_logIndex.IsSearchable);
            Assert.False(log_logIndex.IsSortable);
            Assert.Equal(filterLog.LogIndex, log_logIndex.LogValueCallback(filterLog));

            Assert.NotNull(log_transactionHash);
            Assert.Equal(typeof(string), log_transactionHash.DataType);
            Assert.False(log_transactionHash.Ignore);
            Assert.False(log_transactionHash.IsKey);
            Assert.False(log_transactionHash.IsFacetable);
            Assert.False(log_transactionHash.IsFilterable);
            Assert.True(log_transactionHash.IsSearchable);
            Assert.False(log_transactionHash.IsSortable);
            Assert.Equal(filterLog.TransactionHash, log_transactionHash.LogValueCallback(filterLog));

            Assert.NotNull(log_transactionIndex);
            Assert.Equal(typeof(HexBigInteger), log_transactionIndex.DataType);
            Assert.False(log_transactionIndex.Ignore);
            Assert.False(log_transactionIndex.IsKey);
            Assert.False(log_transactionIndex.IsFacetable);
            Assert.False(log_transactionIndex.IsFilterable);
            Assert.False(log_transactionIndex.IsSearchable);
            Assert.False(log_transactionIndex.IsSortable);
            Assert.Equal(filterLog.TransactionIndex, log_transactionIndex.LogValueCallback(filterLog));

            Assert.NotNull(log_blockHash);
            Assert.Equal(typeof(string), log_blockHash.DataType);
            Assert.False(log_blockHash.Ignore);
            Assert.False(log_blockHash.IsKey);
            Assert.False(log_blockHash.IsFacetable);
            Assert.False(log_blockHash.IsFilterable);
            Assert.False(log_blockHash.IsSearchable);
            Assert.False(log_blockHash.IsSortable);
            Assert.Equal(filterLog.BlockHash, log_blockHash.LogValueCallback(filterLog));

            Assert.NotNull(log_blockNumber);
            Assert.Equal(typeof(HexBigInteger), log_blockNumber.DataType);
            Assert.False(log_blockNumber.Ignore);
            Assert.False(log_blockNumber.IsKey);
            Assert.False(log_blockNumber.IsFacetable);
            Assert.True(log_blockNumber.IsFilterable);
            Assert.True(log_blockNumber.IsSearchable);
            Assert.True(log_blockNumber.IsSortable);
            Assert.Equal(filterLog.BlockNumber, log_blockNumber.LogValueCallback(filterLog));

            Assert.NotNull(log_address);
            Assert.Equal(typeof(string), log_address.DataType);
            Assert.False(log_address.Ignore);
            Assert.False(log_address.IsKey);
            Assert.False(log_address.IsFacetable);
            Assert.True(log_address.IsFilterable);
            Assert.True(log_address.IsSearchable);
            Assert.True(log_address.IsSortable);
            Assert.Equal(filterLog.Address, log_address.LogValueCallback(filterLog));
        }
Beispiel #2
0
        public void BuildsExpectedIndexForCodeGeneratedEventDto()
        {
            var searchIndex = new EventIndexDefinition <DepositedEventDTO>();

            var depositedEventDto = new DepositedEventDTO
            {
                NewBalance = new HexBigInteger("100"),
                Value      = new HexBigInteger("10"),
                Sender     = "adsfadsfasdfasdf",
                Detail     = new DepositDetailDTO
                {
                    Currency   = "GBP",
                    Timestamp  = DateTimeOffset.UnixEpoch.ToUnixTimeSeconds(),
                    Categories = new List <CategoryDTO>
                    {
                        new CategoryDTO {
                            Name = "Dodgy"
                        },
                        new CategoryDTO {
                            Name = "International"
                        }
                    },
                    Tags = new List <string> {
                        "A", "B"
                    }
                }
            };

            var filterLog = new FilterLog
            {
                Type             = "type",
                Address          = "address",
                BlockHash        = "block_hash",
                BlockNumber      = new HexBigInteger(101),
                TransactionHash  = "transaction_hash",
                TransactionIndex = new HexBigInteger(3),
                LogIndex         = new HexBigInteger(9),
                Removed          = false
            };

            var eventLog = new EventLog <DepositedEventDTO>(depositedEventDto, filterLog);

            Assert.Equal("Deposited", searchIndex.IndexName);
            Assert.Equal(18, searchIndex.Fields.Length);

            searchIndex
            .Assertions(eventLog)
            .HasField(nameof(depositedEventDto.Sender),
                      f => f.IsString(),
                      f => f.HasFlags(isSearchable: true, isFacetable: true, isFilterable: true, isSortable: true),
                      f => f.ReturnsValue(depositedEventDto.Sender))
            .HasField(nameof(depositedEventDto.Value),
                      f => f.DataType <BigInteger>(),
                      f => f.HasFlags(),
                      f => f.ReturnsValue(depositedEventDto.Value))
            .HasField(nameof(depositedEventDto.NewBalance),
                      f => f.DataType <BigInteger>(),
                      f => f.HasFlags(),
                      f => f.ReturnsValue(depositedEventDto.NewBalance))
            .HasField("Detail.Currency",
                      f => f.IsString(),
                      f => f.HasFlags(isSearchable: true, isFilterable: true, isFacetable: true),
                      f => f.ReturnsValue(depositedEventDto.Detail.Currency))
            .HasField("Detail.Categories.Name",
                      f => f.IsString(),
                      f => f.ReturnsValue <string[]>(categoryNameArray =>
            {
                var x = depositedEventDto.Detail.Categories.Select(cat => cat.Name).ToCommaSeparatedString();
                var y = categoryNameArray.ToCommaSeparatedString();
                return(x, y);
            }))
            .HasField("Detail.Tags",
                      f => f.DataType <List <string> >(),
                      f => f.HasFlags(isCollection: true),
                      f => f.ReturnsValue <string[]>(tags =>
            {
                var x = depositedEventDto.Detail.Tags.ToCommaSeparatedString();
                var y = tags.ToCommaSeparatedString();
                return(x, y);
            }))
            .HasField(PresetSearchFieldName.log_key,
                      f => f.IsString(),
                      f => f.HasFlags(isKey: true, isSortable: true),
                      f => f.ReturnsValue(filterLog.Key()))
            .HasField(PresetSearchFieldName.log_removed,
                      f => f.DataType <bool>(),
                      f => f.HasFlags(isFilterable: true, isSortable: true),
                      f => f.ReturnsValue(filterLog.Removed))
            .HasField(PresetSearchFieldName.log_type,
                      f => f.IsString(),
                      f => f.HasFlags(isFilterable: true, isSortable: true),
                      f => f.ReturnsValue(filterLog.Type))
            .HasField(PresetSearchFieldName.log_log_index,
                      f => f.IsHexBigInteger(),
                      f => f.HasFlags(isFilterable: true),
                      f => f.ReturnsValue(filterLog.LogIndex))
            .HasField(PresetSearchFieldName.log_transaction_hash,
                      f => f.IsString(),
                      f => f.HasFlags(isSearchable: true, isFilterable: true, isFacetable: true),
                      f => f.ReturnsValue(filterLog.TransactionHash))
            .HasField(PresetSearchFieldName.log_transaction_index,
                      f => f.IsHexBigInteger(),
                      f => f.HasFlags(isFilterable: true),
                      f => f.ReturnsValue(filterLog.TransactionIndex))
            .HasField(PresetSearchFieldName.log_block_hash,
                      f => f.IsString(),
                      f => f.HasFlags(),
                      f => f.ReturnsValue(filterLog.BlockHash))
            .HasField(PresetSearchFieldName.log_block_number,
                      f => f.IsHexBigInteger(),
                      f => f.HasFlags(isFilterable: true, isSearchable: true, isSortable: true, isFacetable: true),
                      f => f.ReturnsValue(filterLog.BlockNumber))
            .HasField(PresetSearchFieldName.log_address,
                      f => f.IsString(),
                      f => f.HasFlags(isFilterable: true, isSearchable: true, isSortable: true, isFacetable: true),
                      f => f.ReturnsValue(filterLog.Address))
            .HasField(PresetSearchFieldName.log_topics,
                      f => f.IsString(),
                      f => f.HasFlags(isFilterable: true, isSearchable: true, isFacetable: true, isCollection: true),
                      f => f.ReturnsValue(filterLog.Topics));
        }