/// <summary> /// Handles Hyperlink controls inside this DetailControl class associated with /// <see cref="PackageManagerControlCommands.OpenExternalLink" /> /// </summary> /// <param name="sender">A Hyperlink control</param> /// <param name="e">Command arguments</param> private void ExecuteOpenExternalLink(object sender, ExecutedRoutedEventArgs e) { var hyperlink = e.OriginalSource as Hyperlink; if (hyperlink != null && hyperlink.NavigateUri != null) { Control.Model.UIController.LaunchExternalLink(hyperlink.NavigateUri); e.Handled = true; if (e.Parameter is not null and HyperlinkType hyperlinkType) { var evt = new HyperlinkClickedTelemetryEvent(hyperlinkType, UIUtility.ToContractsItemFilter(Control.ActiveFilter), Control.Model.IsSolution); TelemetryActivity.EmitTelemetryEvent(evt); } } }
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 void HyperlinkClicked_CorrelatesSearchSelectionAndAction_Succeeds() { // 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 testPackageId = "testPackage.id"; var testPackageVersion = new NuGetVersion(1, 0, 0); var evtHyperlink = new HyperlinkClickedTelemetryEvent( HyperlinkType.DeprecationAlternativeDetails, ContractsItemFilter.All, isSolutionView: false, testPackageId); var evtSearch = new SearchSelectionTelemetryEvent( parentId: It.IsAny <Guid>(), recommendedCount: It.IsAny <int>(), itemIndex: It.IsAny <int>(), packageId: testPackageId, packageVersion: testPackageVersion, isPackageVulnerable: It.IsAny <bool>(), isPackageDeprecated: true, hasDeprecationAlternativePackage: true); var evtActions = new VSActionsTelemetryEvent( operationId: It.IsAny <string>(), projectIds: new[] { Guid.NewGuid().ToString() }, operationType: NuGetOperationType.Install, source: OperationSource.PMC, startTime: DateTimeOffset.Now.AddSeconds(-1), status: NuGetOperationStatus.NoOp, packageCount: 1, endTime: DateTimeOffset.Now, duration: .40, isPackageSourceMappingEnabled: false); // Simulate UIActionEngine.AddUiActionEngineTelemetryProperties() var pkgAdded = new TelemetryEvent(eventName: null); pkgAdded.AddPiiData("id", VSTelemetryServiceUtility.NormalizePackageId(testPackageId)); pkgAdded.AddPiiData("version", testPackageVersion.ToNormalizedString()); var packages = new List <TelemetryEvent> { pkgAdded }; evtActions.ComplexData["AddedPackages"] = packages; // Act service.EmitTelemetryEvent(evtHyperlink); var hyperlinkEmitted = lastTelemetryEvent; service.EmitTelemetryEvent(evtSearch); var searchEmitted = lastTelemetryEvent; service.EmitTelemetryEvent(evtActions); var actionEmitted = lastTelemetryEvent; // Assert var packageIdHyperlink = hyperlinkEmitted.GetPiiData().First(x => x.Key == HyperlinkClickedTelemetryEvent.AlternativePackageIdPropertyName).Value; var packageIdSearch = searchEmitted.GetPiiData().First(x => x.Key == "PackageId").Value; var packageIdsAction = (IEnumerable <TelemetryEvent>)actionEmitted.ComplexData["AddedPackages"]; var packageIds = packageIdsAction.Select(x => x.GetPiiData().First(x => x.Key == "id").Value); Assert.Equal(packageIdHyperlink, packageIdSearch); Assert.Contains(packageIdHyperlink, packageIds); }