private static bool ValidatePublishedEvents(
            ICollection <EventGridEvent> events,
            EventGridEventPublisherSettings settings)
        {
            if (events.Count != 11)
            {
                return(false);
            }

            foreach (var @event in events)
            {
                if (@event.Data is JObject json &&
                    @event.Id.Equals(json["sg_event_id"].Value <string>(), StringComparison.OrdinalIgnoreCase) &&
                    @event.Subject.Equals(settings.BuildEventSubject(json), StringComparison.OrdinalIgnoreCase) &&
                    @event.EventType.Equals(settings.BuildEventType(json), StringComparison.OrdinalIgnoreCase) &&
                    json["custom_arg1"].Value <string>().Equals("test!"))
                {
                    continue;
                }

                return(false);
            }

            return(true);
        }
        public async Task PublishEventsAsync_WithCustomBuilders_Test()
        {
            //Arrange
            var json = await GetEventJsonFromFileAsync("SendGridEvents.json").ConfigureAwait(false);

            var settings = new EventGridEventPublisherSettings(
                j => $"/my/custom/subject/{j["sg_event_id"].Value<string>()}",
                j => $"CustomEventType.{j["event"].Value<string>()}");

            var sut = new EventGridEventPublisher(_eventGridClient, _topicUri, settings);

            //Act
            await sut.PublishEventsAsync(json).ConfigureAwait(false);

            //Assert
            await _eventGridClient.Received()
            .PublishEventsWithHttpMessagesAsync(
                Arg.Is(_topicUri.Host),
                Arg.Is <IList <EventGridEvent> >(events => ValidatePublishedEvents(events, settings)))
            .ConfigureAwait(false);
        }
 public void Init()
 {
     _sut = EventGridEventPublisherSettings.Default;
 }