Пример #1
0
        public void EventParametersCanBeCustomIndexed()
        {
            var searchIndex    = new EventIndexDefinition <CustomEventDtoB>();
            var customEventDto = new CustomEventDtoB()
            {
                Sender = "Charles"
            };
            var eventLog = new EventLog <CustomEventDtoB>(customEventDto, null);

            searchIndex.Assertions(eventLog)
            .HasField("SenderAddress")
            .HasFlags(isSearchable: true, isSortable: true)
            .ReturnsValue(customEventDto.Sender);
        }
Пример #2
0
        public void WillIndexDtoWithOnlySearchFieldAttributes()
        {
            var searchIndex = new EventIndexDefinition <DtoWithoutParameterAttributes>(addPresetEventLogFields: false);

            var dto = new DtoWithoutParameterAttributes
            {
                Name     = "Test",
                Metadata = new MetadataDto {
                    Id = "A1", Description = "first description"
                },
                Tags = new List <TagDto>
                {
                    new TagDto()
                    {
                        Value = "Category A"
                    },
                    new TagDto()
                    {
                        Value = "Category B"
                    }
                },
                Values = new List <int>()
                {
                    1, 2, 3
                }
            };

            Assert.Equal("CustomIndexA", searchIndex.IndexName);

            Assert.Equal(5, searchIndex.Fields.Length);

            var eventLog = new EventLog <DtoWithoutParameterAttributes>(dto, null);

            searchIndex
            .Assertions(eventLog)
            .HasField(nameof(dto.Name),
                      f => f.ReturnsValue(dto.Name))
            .HasField(nameof(dto.Values),
                      f => f.IsCollection(),
                      f => f.ReturnsValue <int[]>(actualValues => (dto.Values.ToCommaSeparatedString(), actualValues.ToCommaSeparatedString())))
            .HasField($"{nameof(dto.Metadata)}.{nameof(dto.Metadata.Id)}",
                      f => f.HasFlags(isSearchable: true),
                      f => f.ReturnsValue(dto.Metadata.Id))
            .HasField($"{nameof(dto.Metadata)}.{nameof(dto.Metadata.Description)}",
                      f => f.HasFlags().ReturnsValue(dto.Metadata.Description))
            .HasField($"{nameof(dto.Tags)}.Value",
                      f => f.HasFlags(isCollection: true, isSearchable: true, isFilterable: true),
                      f => f.ReturnsValue <string[]>(actualTags => (dto.Tags.Select(item => item.Value).ToCommaSeparatedString(), actualTags.ToCommaSeparatedString()))
                      );
        }
Пример #3
0
        public void IndexCanIncludeCustomFieldsOutsideOfTheSolidityEvent()
        {
            var searchIndex = new EventIndexDefinition <CustomEventDtoA>();

            var customEventDto = new CustomEventDtoA()
            {
                Category = "CatA"
            };

            searchIndex
            .Assertions(new EventLog <CustomEventDtoA>(customEventDto, null))
            .HasField(nameof(customEventDto.Category),
                      f => f.IsString(),
                      f => f.HasFlags(isFacetable: true, isSearchable: true, isFilterable: true, isSortable: true),
                      f => f.ReturnsValue(customEventDto.Category));
        }
Пример #4
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));
        }