/// <summary>
 /// Verifies if bot sent an event.
 /// <remarks>
 /// Assertion is based on activity type and name. Name verification is case sensitive.
 /// </remarks>
 /// </summary>
 /// <param name="recorder">Bot recorder.</param>
 /// <param name="name">Event name.</param>
 /// <returns>Story recorder.</returns>
 public static IStoryRecorder <IMessageActivity> SendsEvent(
     this IBotRecorder <IMessageActivity> recorder,
     string name)
 {
     return(recorder.SendsActivity(activity => activity != null &&
                                   activity.Type == ActivityTypes.Event &&
                                   activity.AsEventActivity()?.Name == name));
 }
 /// <summary>
 /// Verifies if bot sent an event.
 /// <remarks>
 /// Assertion is based on event activity predicate.
 /// </remarks>
 /// </summary>
 /// <param name="recorder">Bot recorder.</param>
 /// <param name="eventPredicate">Predicate used for event assertion.</param>
 /// <returns>Story recorder.</returns>
 public static IStoryRecorder <IMessageActivity> SendsEvent(
     this IBotRecorder <IMessageActivity> recorder,
     Func <IEventActivity, bool> eventPredicate)
 {
     return(recorder.SendsActivity(activity => activity != null &&
                                   activity.Type == ActivityTypes.Event &&
                                   eventPredicate(activity.AsEventActivity())));
 }
        /// <summary>
        /// Verifies if bot responded with choice list.
        /// <remarks>
        /// Assertion is based on activity's SuggestedActions.
        /// For other list styles please use <see cref="IBotRecorder{T}.Says(string)"/> or
        /// <see cref="IBotRecorder{T}.SendsActivity(Predicate{T})"/>
        /// </remarks>
        /// </summary>
        /// <param name="recorder">Bot recorder.</param>
        /// <param name="prompt">Prompt message text.</param>
        /// <param name="options">List of expected options.</param>
        /// <returns>Story recorder.</returns>
        public static IStoryRecorder <IMessageActivity> GivesChoice(this IBotRecorder <IMessageActivity> recorder, string prompt, string[] options)
        {
            return(recorder.SendsActivity(activity =>
            {
                var actions = activity.SuggestedActions?.Actions;

                return actions != null &&
                actions.Count == options.Length &&
                options.All(x => actions.Any(a => a.Title == x));
            }));
        }