Example #1
0
        public async void GIVENAnyMessageActivity_WHENGetSentimentIsInvoked_THENScoreIsBeingReturned(
            ITextAnalyticsClient textAnalyticsClient,
            IActivityAdapter activity,
            double sentiment)
        {
            // Arrange
            var instrumentation = new SentimentClient(textAnalyticsClient);
            var response        = new HttpOperationResponse <SentimentBatchResult>
            {
                Body = new SentimentBatchResult(new[] { new SentimentBatchResultItem(null, sentiment) }),
            };

            Mock.Get(textAnalyticsClient)
            .Setup(tac => tac.SentimentWithHttpMessagesAsync(
                       It.IsAny <bool?>(),
                       It.IsAny <MultiLanguageBatchInput>(),
                       It.IsAny <Dictionary <string, List <string> > >(),
                       It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(response));

            // Act
            var score = await instrumentation.GetSentiment(activity)
                        .ConfigureAwait(false);

            // Assert
            score.Should().Be(sentiment);
        }
Example #2
0
        public static void TrackEvent(this IActivityAdapter activity, QueryResult queryResult, InstrumentationSettings settings, TelemetryClient telemetryClient)
        {
            if (activity is null)
            {
                throw new ArgumentNullException(nameof(activity));
            }

            if (queryResult is null)
            {
                throw new ArgumentNullException(nameof(queryResult));
            }

            if (telemetryClient is null)
            {
                throw new ArgumentNullException(nameof(telemetryClient));
            }

            var properties = new Dictionary <string, string>
            {
                { QnAConstants.UserQuery, activity.MessageActivity.Text },
                { QnAConstants.KnowledgeBaseQuestion, queryResult.KnowledgeBaseQuestion },
                { QnAConstants.KnowledgeBaseAnswer, queryResult.KnowledgeBaseAnswer },
                { QnAConstants.Score, queryResult.Score },
            };

            activity.TrackCustomEvent(telemetryClient, settings, EventTypes.QnaEvent, properties);
        }
        public void GIVENEmptySettings_WHENEventTelemetryBuilderIsConstructed_THENExceptionIsBeingThrown(
            IActivityAdapter activity)
        {
            // Arrange
            const InstrumentationSettings emptySettings = null;

            // Act
            // Assert
            Assert.Throws <ArgumentNullException>(() => new EventTelemetryBuilder(activity, emptySettings));
        }
        public void GIVENEmptyActivity_WHENTrackCustomEventIsInvoked_THENExceptionIsBeingThrown(
            InstrumentationSettings settings)
        {
            // Arrange
            const IActivityAdapter emptyActivity = null;

            // Act
            // Assert
            Assert.Throws <ArgumentNullException>(() => emptyActivity.TrackCustomEvent(this.telemetryClient, settings));
        }
        public void GIVENEmptyActivity_WHENToSentimentInputIsInvoked_THENEmptySentimentInputIsBeingReturned()
        {
            // Arrange
            const IActivityAdapter activity = null;

            // Act
            var actualResult = activity.ToSentimentInput();

            // Assert
            actualResult.Should().BeNull();
        }
        public async void GIVENEmptyActivity_WHENTrackMessageSentimentIsInvoked_THENExceptionIsBeingThrown(
            ISentimentClient sentimentClient,
            InstrumentationSettings settings)
        {
            // Arrange
            const IActivityAdapter emptyActivity = null;

            // Act
            // Assert
            await Assert.ThrowsAsync <ArgumentNullException>(() => emptyActivity.TrackMessageSentiment(this.telemetryClient, settings, sentimentClient))
            .ConfigureAwait(false);
        }
Example #7
0
        public async void GIVENEmptyMessageActivity_WHENGetSentimentIsInvoked_THENExceptionIsBeingThrown(
            ITextAnalyticsClient textAnalyticsClient)
        {
            // Arrange
            var instrumentation = new SentimentClient(textAnalyticsClient);
            const IActivityAdapter emptyMessageActivity = null;

            // Act
            // Assert
            await Assert.ThrowsAsync <ArgumentNullException>(() => instrumentation.GetSentiment(emptyMessageActivity))
            .ConfigureAwait(false);
        }
        public void GIVENEmptyActivity_WHENIsIncomingMessageIsInvoked_THENFalseIsBeingReturned()
        {
            // Arrange
            const IActivityAdapter activity       = null;
            const bool             expectedResult = false;

            // Act
            var actualResult = activity.IsIncomingMessage();

            // Assert
            actualResult.Should().Be(expectedResult);
        }
        public void GIVENAnyActivity_WHENTrackCustomEventIsInvoked_THENEventTelemetryIsBeingSent(
            IActivityAdapter activity,
            InstrumentationSettings settings)
        {
            // Arrange
            // Act
            activity.TrackCustomEvent(this.telemetryClient, settings);

            // Assert
            this.mockTelemetryChannel.Verify(
                tc => tc.Send(It.Is <EventTelemetry>(t =>
                                                     t.Name == EventTypes.CustomEvent)),
                Times.Once);
        }
Example #10
0
        public async void GIVENDisposedSentimentClient_WHENGetSentimentIsInvoked_THENExceptionIsBeingThrown(
            ITextAnalyticsClient textAnalyticsClient,
            IActivityAdapter activity)
        {
            // Arrange
            var instrumentation = new SentimentClient(textAnalyticsClient);

            instrumentation.Dispose();

            // Act
            // Assert
            await Assert.ThrowsAsync <ObjectDisposedException>(() => instrumentation.GetSentiment(activity))
            .ConfigureAwait(false);
        }
        public void GIVENAdditionalProperties_WHENBuildIsInvoked_THENEventTelemetryWithPropertiesIsBeingCreated(
            IActivityAdapter activity,
            InstrumentationSettings settings,
            IDictionary <string, string> properties)
        {
            // Arrange
            var builder = new EventTelemetryBuilder(activity, settings, properties);

            // Act
            var eventTelemetry = builder.Build();

            // Assert
            eventTelemetry.Properties.Should().HaveCountGreaterOrEqualTo(properties.Count);
            eventTelemetry.Properties.Should().Contain(properties);
        }
Example #12
0
 public static MultiLanguageBatchInput ToSentimentInput(this IActivityAdapter activity)
 {
     return(activity == null
         ? null
         : new MultiLanguageBatchInput(
                new List <MultiLanguageInput>
     {
         new MultiLanguageInput
         {
             // TODO: investigate the following Language = activity.Locale,
             Id = "1",
             Text = activity.MessageActivity.Text,
         },
     }));
 }
        public void GIVENActivity_WHENToSentimentInputIsInvoked_THENSentimentInputIsBeingReturned(
            IActivityAdapter activity)
        {
            // Arrange
            const int    expectedNumberOfDocuments = 1;
            const string expectedSentimentInputId  = "1";

            // Act
            var actualResult = activity.ToSentimentInput();

            // Assert
            actualResult.Documents.Should().HaveCount(expectedNumberOfDocuments);
            actualResult.Documents.Should().ContainSingle(i =>
                                                          i.Text == activity.MessageActivity.Text &&
                                                          i.Id == expectedSentimentInputId);
        }
Example #14
0
        public static void TrackCustomEvent(this IActivityAdapter activity, TelemetryClient telemetryClient, InstrumentationSettings settings, string eventName = EventTypes.CustomEvent, IDictionary <string, string> properties = null)
        {
            if (telemetryClient is null)
            {
                throw new ArgumentNullException(nameof(telemetryClient));
            }

            var builder        = new EventTelemetryBuilder(activity, settings, properties);
            var eventTelemetry = builder.Build();

            eventTelemetry.Name = string.IsNullOrWhiteSpace(eventName)
                ? EventTypes.CustomEvent
                : eventName;

            telemetryClient.TrackEvent(eventTelemetry);
        }
        public void GIVENAdditionalPropertyToReplaceOriginalOne_WHENBuildIsInvoked_THENEventTelemetryWithReplacedPropertyIsBeingCreated(
            IActivityAdapter activity,
            InstrumentationSettings settings,
            string additionalPropertyValue)
        {
            // Arrange
            var additionalProperties = new Dictionary <string, string> {
                { BotConstants.TypeProperty, additionalPropertyValue }
            };
            var builder = new EventTelemetryBuilder(activity, settings, additionalProperties);

            // Act
            var eventTelemetry = builder.Build();

            // Assert
            activity.Type.Should().NotBe(additionalPropertyValue);
            eventTelemetry.Properties.Should().Contain(additionalProperties);
        }
        GIVENAnyActivityAnyResultAnAnyProperty_WHENTrackIntentIsInvoked_THENEventTelemetryIsBeingSent(
            IActivityAdapter activity,
            IntentResult result,
            InstrumentationSettings settings)
        {
            // Arrange
            // Act
            activity.TrackIntent(result, this.telemetryClient, settings);

            // Assert
            this.mockTelemetryChannel.Verify(
                tc => tc.Send(It.Is <EventTelemetry>(t =>
                                                     t.Name == EventTypes.Intent &&
                                                     t.Properties[IntentConstants.Intent] == result.Intent &&
                                                     t.Properties[IntentConstants.Score] == result.Score &&
                                                     t.Properties[IntentConstants.Entities] == result.Entities)),
                Times.Once);
        }
        public async Task <double?> GetSentiment(IActivityAdapter activity)
        {
            if (activity == null)
            {
                throw new ArgumentNullException(nameof(activity));
            }

            if (this.disposed)
            {
                throw new ObjectDisposedException(this.GetType().FullName);
            }

            MultiLanguageBatchInput input  = activity.ToSentimentInput();
            SentimentBatchResult    result = await this.textAnalyticsClient.SentimentAsync(null, input)
                                             .ConfigureAwait(false);

            return(result?.Documents[0].Score);
        }
        public void GIVENAnyActivity_WHENTrackEventIsInvoked_THENEventTelemetryIsBeingSent(
            IActivityAdapter activity,
            QueryResult queryResult,
            InstrumentationSettings settings)
        {
            // Arrange
            // Act
            activity.TrackEvent(queryResult, settings, this.telemetryClient);

            // Assert
            this.mockTelemetryChannel.Verify(
                tc => tc.Send(It.Is <EventTelemetry>(t =>
                                                     t.Name == EventTypes.QnaEvent &&
                                                     t.Properties[QnAConstants.UserQuery] == activity.MessageActivity.Text &&
                                                     t.Properties[QnAConstants.KnowledgeBaseQuestion] == queryResult.KnowledgeBaseQuestion &&
                                                     t.Properties[QnAConstants.KnowledgeBaseAnswer] == queryResult.KnowledgeBaseAnswer &&
                                                     t.Properties[QnAConstants.Score] == queryResult.Score.ToString(CultureInfo.InvariantCulture))),
                Times.Once);
        }
Example #19
0
        public static void TrackIntent(this IActivityAdapter activity, IntentResult result, TelemetryClient telemetryClient, InstrumentationSettings settings)
        {
            if (result is null)
            {
                throw new ArgumentNullException(nameof(result));
            }

            if (telemetryClient is null)
            {
                throw new ArgumentNullException(nameof(telemetryClient));
            }

            var properties = new Dictionary <string, string>
            {
                { IntentConstants.Intent, result.Intent },
                { IntentConstants.Score, result.Score },
                { IntentConstants.Entities, result.Entities },
            };

            activity.TrackCustomEvent(telemetryClient, settings, EventTypes.Intent, properties);
        }
Example #20
0
        public static async Task TrackMessageSentiment(this IActivityAdapter activity, TelemetryClient telemetryClient, InstrumentationSettings settings, ISentimentClient sentimentClient)
        {
            if (telemetryClient is null)
            {
                throw new ArgumentNullException(nameof(telemetryClient));
            }

            if (sentimentClient is null)
            {
                throw new ArgumentNullException(nameof(sentimentClient));
            }

            var score = await sentimentClient.GetSentiment(activity)
                        .ConfigureAwait(false);

            var properties = new Dictionary <string, string>
            {
                { SentimentConstants.Score, score.Value.ToString(CultureInfo.InvariantCulture) },
            };

            activity.TrackCustomEvent(telemetryClient, settings, EventTypes.MessageSentiment, properties);
        }
        GIVENAnyActivityAnyEventNameAndAnyProperty_WHENTrackCustomEventIsInvoked_THENEventTelemetryIsBeingSent(
            IActivityAdapter activity,
            string eventName,
            string propertyKey,
            string propertyValue,
            InstrumentationSettings settings)
        {
            // Arrange
            var properties = new Dictionary <string, string> {
                { propertyKey, propertyValue }
            };

            // Act
            activity.TrackCustomEvent(this.telemetryClient, settings, eventName, properties);

            // Assert
            this.mockTelemetryChannel.Verify(
                tc => tc.Send(It.Is <EventTelemetry>(t =>
                                                     t.Name == eventName &&
                                                     t.Properties[propertyKey] == propertyValue)),
                Times.Once);
        }
        public async void GIVENAnyActivity_WHENTrackMessageSentimentIsInvoked_THENEventTelemetryIsBeingSent(
            double sentimentScore,
            IActivityAdapter activity,
            ISentimentClient sentimentClient,
            InstrumentationSettings settings)
        {
            // Arrange
            Mock.Get(sentimentClient)
            .Setup(s => s.GetSentiment(activity))
            .Returns(Task.FromResult <double?>(sentimentScore));

            // Act
            await activity.TrackMessageSentiment(this.telemetryClient, settings, sentimentClient)
            .ConfigureAwait(false);

            // Assert
            this.mockTelemetryChannel.Verify(
                tc => tc.Send(It.Is <EventTelemetry>(t =>
                                                     t.Name == EventTypes.MessageSentiment &&
                                                     t.Properties[SentimentConstants.Score] == sentimentScore.ToString(CultureInfo.InvariantCulture))),
                Times.Once);
        }
Example #23
0
 public static bool IsIncomingMessage(this IActivityAdapter activity)
 {
     return(activity?.Type == ActivityTypes.Message && activity?.ReplyToId == null);
 }
Example #24
0
 public void SetActivityLog(IActivityLogOperations <TObject, TResult, TSearch> activityLogInstance, IActivityAdapter activityAdapterInstance)
 {
     business.SetEventLog(activityLogInstance, activityAdapterInstance);
 }
Example #25
0
 public void SetActivityLog(IActivityLogOperations <TObject, TResult, TSearch, TKey> instance, IActivityAdapter adapter)
 {
     business.SetEventLog(instance, adapter);
 }
Example #26
0
 public void SetActivityLog(IActivityLogOperations <TObject> activityInstance, IActivityAdapter activityAdapterInstance)
 {
     business.SetEventLog(activityInstance, activityAdapterInstance);
 }
 public EventTelemetryBuilder(IActivityAdapter activity, InstrumentationSettings settings, IEnumerable <KeyValuePair <string, string> > additionalProperties = null)
 {
     this.activity             = activity ?? throw new ArgumentNullException(nameof(activity));
     this.settings             = settings ?? throw new ArgumentNullException(nameof(settings));
     this.additionalProperties = additionalProperties ?? Enumerable.Empty <KeyValuePair <string, string> >();
 }