public void NuGetTelemetryService_EmitProjectInformation(NuGetProjectType projectType) { // Arrange var telemetrySession = new Mock <ITelemetrySession>(); TelemetryEvent lastTelemetryEvent = null; telemetrySession .Setup(x => x.PostEvent(It.IsAny <TelemetryEvent>())) .Callback <TelemetryEvent>(x => lastTelemetryEvent = x); var projectInformation = new ProjectTelemetryEvent( "3.5.0-beta2", "15e9591f-9391-4ddf-a246-ca9e0351277d", projectType, true, @"C:\path\to\project.csproj"); var target = new NuGetVSTelemetryService(telemetrySession.Object); // Act target.EmitTelemetryEvent(projectInformation); // Assert telemetrySession.Verify(x => x.PostEvent(It.IsAny <TelemetryEvent>()), Times.Once); Assert.NotNull(lastTelemetryEvent); Assert.Equal("ProjectInformation", lastTelemetryEvent.Name); Assert.Equal(4, lastTelemetryEvent.Count); var nuGetVersion = lastTelemetryEvent["NuGetVersion"]; Assert.NotNull(nuGetVersion); Assert.IsType <string>(nuGetVersion); Assert.Equal(projectInformation.NuGetVersion, nuGetVersion); var projectId = lastTelemetryEvent["ProjectId"]; Assert.NotNull(projectId); Assert.IsType <string>(projectId); Assert.Equal(projectInformation.ProjectId.ToString(), projectId); var actualProjectType = lastTelemetryEvent["NuGetProjectType"]; Assert.NotNull(actualProjectType); Assert.IsType <NuGetProjectType>(actualProjectType); Assert.Equal(projectInformation.NuGetProjectType, actualProjectType); var isPRUpgradable = lastTelemetryEvent["IsPRUpgradable"]; Assert.NotNull(isPRUpgradable); Assert.IsType <bool>(isPRUpgradable); Assert.Equal(projectInformation.IsProjectPRUpgradable, isPRUpgradable); var projectFilePath = lastTelemetryEvent .GetPiiData() .Where(kv => kv.Key == ProjectTelemetryEvent.ProjectFilePath) .First() .Value; Assert.IsType <string>(projectFilePath); Assert.True(!string.IsNullOrEmpty((string)projectFilePath)); }
public void HyperlinkClicked_RoundTrip_Succeeds(HyperlinkType hyperlinkTab, ContractsItemFilter currentTab, bool isSolutionView, string searchQuery) { // Arrange var telemetrySession = new Mock <ITelemetrySession>(); TelemetryEvent lastTelemetryEvent = null; _ = telemetrySession .Setup(x => x.PostEvent(It.IsAny <TelemetryEvent>())) .Callback <TelemetryEvent>(x => lastTelemetryEvent = x); var service = new NuGetVSTelemetryService(telemetrySession.Object); var evt = new HyperlinkClickedTelemetryEvent(hyperlinkTab, currentTab, isSolutionView, searchQuery); // Act service.EmitTelemetryEvent(evt); // Assert Assert.NotNull(lastTelemetryEvent); Assert.Equal(hyperlinkTab, lastTelemetryEvent[HyperlinkClickedTelemetryEvent.HyperLinkTypePropertyName]); Assert.Equal(currentTab, lastTelemetryEvent[HyperlinkClickedTelemetryEvent.CurrentTabPropertyName]); Assert.Equal(isSolutionView, lastTelemetryEvent[HyperlinkClickedTelemetryEvent.IsSolutionViewPropertyName]); Assert.Equal(searchQuery, lastTelemetryEvent.GetPiiData().Where(x => x.Key == HyperlinkClickedTelemetryEvent.AlternativePackageIdPropertyName).Select(x => x.Value).First()); }
public async Task ContinueSearchAsync_WhenSearchIsContinuable_Continues() { var telemetryService = new Mock <INuGetTelemetryService>(); var eventsQueue = new ConcurrentQueue <TelemetryEvent>(); telemetryService .Setup(x => x.EmitTelemetryEvent(It.IsAny <TelemetryEvent>())) .Callback <TelemetryEvent>(e => eventsQueue.Enqueue(e)); TelemetryActivity.NuGetTelemetryService = telemetryService.Object; using (NuGetPackageSearchService searchService = SetupSearchService()) { SearchResultContextInfo searchResult = await searchService.SearchAsync( _projects, new List <PackageSourceContextInfo> { PackageSourceContextInfo.Create(_sourceRepository.PackageSource) }, targetFrameworks : new List <string>() { "net45", "net5.0" }, searchText : "nuget", new SearchFilter(includePrerelease : true), NuGet.VisualStudio.Internal.Contracts.ItemFilter.All, useRecommender : true, CancellationToken.None); SearchResultContextInfo continueSearchResult = await searchService.ContinueSearchAsync(CancellationToken.None); Assert.True(searchResult.PackageSearchItems.First().Title.Equals("NuGet.Core1", StringComparison.OrdinalIgnoreCase)); Assert.True(continueSearchResult.PackageSearchItems.First().Title.Equals("NuGet.Core27", StringComparison.OrdinalIgnoreCase)); TelemetryEvent[] events = eventsQueue.ToArray(); Assert.True(4 == events.Length, string.Join(Environment.NewLine, events.Select(e => e.Name))); TelemetryEvent search = Assert.Single(events, e => e.Name == "Search"); Assert.Equal(true, search["IncludePrerelease"]); Assert.Equal("nuget", search.GetPiiData().First(p => p.Key == "Query").Value); string operationId = Assert.IsType <string>(search["OperationId"]); Guid parsedOperationId = Guid.ParseExact(operationId, "D"); TelemetryEvent sources = Assert.Single(events, e => e.Name == "SearchPackageSourceSummary"); Assert.Equal(1, sources["NumHTTPv3Feeds"]); Assert.Equal("NotPresent", sources["NuGetOrg"]); Assert.Equal(operationId, sources["ParentId"]); TelemetryEvent page0 = Assert.Single(events, e => e.Name == "SearchPage" && e["PageIndex"] is int && (int)e["PageIndex"] == 0); Assert.Equal("Ready", page0["LoadingStatus"]); Assert.Equal(operationId, page0["ParentId"]); Assert.IsType <int>(page0["ResultCount"]); Assert.IsType <double>(page0["Duration"]); Assert.IsType <double>(page0["ResultsAggregationDuration"]); Assert.IsType <string>(page0["IndividualSourceDurations"]); Assert.Equal(1, ((JArray)JsonConvert.DeserializeObject((string)page0["IndividualSourceDurations"])).Values <double>().Count()); TelemetryEvent page1 = Assert.Single(events, e => e.Name == "SearchPage" && e["PageIndex"] is int && (int)e["PageIndex"] == 1); Assert.Equal("Ready", page1["LoadingStatus"]); Assert.Equal(operationId, page1["ParentId"]); Assert.IsType <int>(page1["ResultCount"]); Assert.IsType <double>(page1["Duration"]); Assert.IsType <double>(page1["ResultsAggregationDuration"]); Assert.IsType <string>(page1["IndividualSourceDurations"]); Assert.Equal(1, ((JArray)JsonConvert.DeserializeObject((string)page1["IndividualSourceDurations"])).Values <double>().Count()); } }