public void TestViewPackageDetailsCommand() { // Arrange string packageToOpen = "Sample View Extension"; List <User> packageAuthor = new List <User> { new User { _id = "1", username = "******" } }; string packageDescription = "Dynamo sample view extension."; PackageDetailsViewExtension.PackageManagerClientViewModel = ViewModel.PackageManagerClientViewModel; PackageHeader packageHeader = new PackageHeader { _id = null, name = packageToOpen, versions = PackageVersions, latest_version_update = System.DateTime.Now, num_versions = PackageVersions.Count, comments = null, num_comments = 0, latest_comment = null, votes = 0, downloads = 0, repository_url = null, site_url = null, banned = false, deprecated = false, @group = null, engine = null, license = null, used_by = null, host_dependencies = Hosts, num_dependents = 0, description = packageDescription, maintainers = packageAuthor, keywords = null }; PackageManagerSearchElement packageManagerSearchElement = new PackageManagerSearchElement(packageHeader); PackageDetailsViewExtension.OpenPackageDetails(packageManagerSearchElement); PackageDetailsView packageDetailsView = PackageDetailsViewExtension.PackageDetailsView; Assert.IsInstanceOf <PackageDetailsViewModel>(packageDetailsView.DataContext); PackageDetailsViewModel packageDetailsViewModel = packageDetailsView.DataContext as PackageDetailsViewModel; // Act PackageDetailsViewExtension.PackageManagerClientViewModel .DynamoViewModel .OnViewExtensionOpenWithParameterRequest("Package Details", packageManagerSearchElement); // Assert Assert.AreEqual(packageToOpen, packageDetailsViewModel.PackageName); Assert.AreEqual(packageAuthor.First().username, packageDetailsViewModel.PackageAuthorName); Assert.AreEqual(packageDescription, packageDetailsViewModel.PackageDescription); }
/// <summary> /// Adds a PackageHeader, recently downloaded from the Package Manager, to Search /// </summary> /// <param name="packageHeader">A PackageHeader object</param> public void Add(PackageHeader packageHeader) { var searchEle = new PackageManagerSearchElement(packageHeader); SearchDictionary.Add(searchEle, searchEle.Name); if (packageHeader.keywords != null && packageHeader.keywords.Count > 0) { SearchDictionary.Add(searchEle, packageHeader.keywords); } SearchDictionary.Add(searchEle, searchEle.Description); }
public void TestOpenDependencyDetails() { // Arrange string packageToOpen = "Sample View Extension"; string packageAuthor = "DynamoTeam"; string packageDescription = "Dynamo sample view extension."; PackageDetailsViewExtension.PackageManagerClientViewModel = ViewModel.PackageManagerClientViewModel; PackageHeader packageHeader = new PackageHeader { _id = null, name = string.Empty, versions = PackageVersions, latest_version_update = System.DateTime.Now, num_versions = PackageVersions.Count, comments = null, num_comments = 0, latest_comment = null, votes = 0, downloads = 0, repository_url = null, site_url = null, banned = false, deprecated = false, @group = null, engine = null, license = null, used_by = null, host_dependencies = Hosts, num_dependents = 0, description = null, maintainers = UsersList, keywords = null }; PackageManagerSearchElement packageManagerSearchElement = new PackageManagerSearchElement(packageHeader); PackageDetailsViewExtension.OpenPackageDetails(packageManagerSearchElement); PackageDetailsView packageDetailsView = PackageDetailsViewExtension.PackageDetailsView; Assert.IsInstanceOf <PackageDetailsViewModel>(packageDetailsView.DataContext); PackageDetailsViewModel packageDetailsViewModel = packageDetailsView.DataContext as PackageDetailsViewModel; // Act packageDetailsViewModel.OpenDependencyDetails(packageToOpen); // Assert PackageDetailsView newPackageDetailsView = PackageDetailsViewExtension.PackageDetailsView; PackageDetailsViewModel newPackageDetailsViewModel = newPackageDetailsView.DataContext as PackageDetailsViewModel; Assert.AreEqual(packageToOpen, newPackageDetailsViewModel.PackageName); Assert.AreEqual(packageAuthor, newPackageDetailsViewModel.PackageAuthorName); Assert.AreEqual(packageDescription, newPackageDetailsViewModel.PackageDescription); }
internal void OpenPackageDetails(PackageManagerSearchElement packageManagerSearchElement) { PackageDetailsViewModel = new PackageDetailsViewModel(this, packageManagerSearchElement); if (PackageDetailsView == null) { PackageDetailsView = new PackageDetailsView(); } PackageDetailsView.DataContext = PackageDetailsViewModel; ViewLoadedParamsReference?.AddToExtensionsSideBar(this, PackageDetailsView); }
public PackageManagerSearchElementViewModel(PackageManagerSearchElement element, bool canLogin) : base(element) { this.Model = element; this.ToggleIsExpandedCommand = new DelegateCommand(() => this.Model.IsExpanded = !this.Model.IsExpanded); this.DownloadLatestCommand = new DelegateCommand(() => OnRequestDownload(Model.Header.versions.Last())); this.UpvoteCommand = new DelegateCommand(Model.Upvote, () => canLogin); this.DownvoteCommand = new DelegateCommand(Model.Downvote, () => canLogin); this.VisitSiteCommand = new DelegateCommand(() => GoToUrl(FormatUrl(Model.SiteUrl)), () => !String.IsNullOrEmpty(Model.SiteUrl)); this.VisitRepositoryCommand = new DelegateCommand(() => GoToUrl(FormatUrl(Model.RepositoryUrl)), () => !String.IsNullOrEmpty(Model.RepositoryUrl)); }
public PackageManagerSearchElementViewModel(PackageManagerSearchElement element, bool canLogin) : base(element) { this.Model = element; this.ToggleIsExpandedCommand = new DelegateCommand(() => this.Model.IsExpanded = !this.Model.IsExpanded ); this.DownloadLatestCommand = new DelegateCommand(() => OnRequestDownload(Model.Header.versions.Last())); this.UpvoteCommand = new DelegateCommand(Model.Upvote, () => canLogin); this.DownvoteCommand = new DelegateCommand(Model.Downvote, () => canLogin); this.VisitSiteCommand = new DelegateCommand(() => GoToUrl(FormatUrl(Model.SiteUrl)), () => !String.IsNullOrEmpty(Model.SiteUrl)); this.VisitRepositoryCommand = new DelegateCommand(() => GoToUrl(FormatUrl(Model.RepositoryUrl)), () => !String.IsNullOrEmpty(Model.RepositoryUrl)); }
public List <PackageManagerSearchElement> ListAll() { CachedPackageList = new List <PackageManagerSearchElement>(); foreach (var header in Model.ListAll()) { var ele = new PackageManagerSearchElement(header); ele.UpvoteRequested += this.Model.Upvote; CachedPackageList.Add(ele); } return(CachedPackageList); }
public void TestNodeModelSearchElement() { //Arrange var searchElement = new PackageManagerSearchElement(new PackageHeader() { name = "Foo" }); searchElement.Executed += SearchElement_Executed; //Subscribe the function to the Executed event //Act searchElement.Execute(); //Assert Assert.AreEqual(searchElement.CreationName, "Foo"); //This will execute the Get method of the CreationName property Assert.IsTrue(bExecuted); //This just validates that the Execute event was raised }
public PackageManagerSearchElementViewModel(PackageManagerSearchElement element, bool canLogin) : base(element) { this.Model = element; this.ToggleIsExpandedCommand = new DelegateCommand(() => this.Model.IsExpanded = !this.Model.IsExpanded); this.DownloadLatestCommand = new DelegateCommand(() => OnRequestDownload(Model.Header.versions.Last(), false)); this.DownloadLatestToCustomPathCommand = new DelegateCommand(() => OnRequestDownload(Model.Header.versions.Last(), true)); this.UpvoteCommand = new DelegateCommand(Model.Upvote, () => canLogin); // TODO: Remove the initialization of the UI command in Dynamo 3.0 this.DownvoteCommand = new DelegateCommand(Model.Downvote, () => canLogin); this.VisitSiteCommand = new DelegateCommand(() => GoToUrl(FormatUrl(Model.SiteUrl)), () => !String.IsNullOrEmpty(Model.SiteUrl)); this.VisitRepositoryCommand = new DelegateCommand(() => GoToUrl(FormatUrl(Model.RepositoryUrl)), () => !String.IsNullOrEmpty(Model.RepositoryUrl)); }
public void TestVersionsDisplayedInView() { // Arrange PackageHeader packageHeader = new PackageHeader { _id = null, name = string.Empty, versions = PackageVersions, latest_version_update = System.DateTime.Now, num_versions = PackageVersions.Count, comments = null, num_comments = 0, latest_comment = null, votes = 0, downloads = 0, repository_url = null, site_url = null, banned = false, deprecated = false, @group = null, engine = null, license = null, used_by = null, host_dependencies = Hosts, num_dependents = 0, description = null, maintainers = UsersList, keywords = null }; PackageManagerSearchElement packageManagerSearchElement = new PackageManagerSearchElement(packageHeader); // Act PackageDetailsViewExtension.OpenPackageDetails(packageManagerSearchElement); PackageDetailsView packageDetailsView = PackageDetailsViewExtension.PackageDetailsView; // Assert Assert.IsNotNull(packageDetailsView.VersionsDataGrid); Assert.IsInstanceOf <PackageDetailsViewModel>(packageDetailsView.DataContext); PackageDetailsViewModel packageDetailsViewModel = packageDetailsView.DataContext as PackageDetailsViewModel; Assert.AreEqual(PackageVersions.Count, packageDetailsViewModel.PackageDetailItems.Count); }
/// <summary> /// Adds a PackageHeader, recently downloaded from the Package Manager, to Search /// </summary> /// <param name="packageHeader">A PackageHeader object</param> public void Add(PackageHeader packageHeader) { var searchEle = new PackageManagerSearchElement(packageHeader); SearchDictionary.Add(searchEle, searchEle.Name); if (packageHeader.keywords != null && packageHeader.keywords.Count > 0) SearchDictionary.Add(searchEle, packageHeader.keywords); SearchDictionary.Add(searchEle, searchEle.Description); SearchAndUpdateResultsSync(SearchText); }
internal void ExecutePackageDownload(string name, PackageVersion version, string downloadPath) { string msg = String.IsNullOrEmpty(downloadPath) ? String.Format(Resources.MessageConfirmToInstallPackage, name, version.version) : String.Format(Resources.MessageConfirmToInstallPackageToFolder, name, version.version, downloadPath); var result = MessageBox.Show(msg, Resources.PackageDownloadConfirmMessageBoxTitle, MessageBoxButton.OKCancel, MessageBoxImage.Question); var pmExt = DynamoViewModel.Model.GetPackageManagerExtension(); if (result == MessageBoxResult.OK) { // get all of the headers var headers = version.full_dependency_ids.Select(dep => dep._id).Select((id) => { PackageHeader pkgHeader; var res = Model.DownloadPackageHeader(id, out pkgHeader); if (!res.Success) { MessageBox.Show(String.Format(Resources.MessageFailedToDownloadPackage, id), Resources.PackageDownloadErrorMessageBoxTitle, MessageBoxButton.OK, MessageBoxImage.Error); } return(pkgHeader); }).ToList(); // if any header download fails, abort if (headers.Any(x => x == null)) { return; } var allPackageVersions = PackageManagerSearchElement.ListRequiredPackageVersions(headers, version); // determine if any of the packages contain binaries or python scripts. var containsBinaries = allPackageVersions.Any( x => x.Item2.contents.Contains(PackageManagerClient.PackageContainsBinariesConstant) || x.Item2.contains_binaries); var containsPythonScripts = allPackageVersions.Any( x => x.Item2.contents.Contains(PackageManagerClient.PackageContainsPythonScriptsConstant)); // if any do, notify user and allow cancellation if (containsBinaries || containsPythonScripts) { var res = MessageBox.Show(Resources.MessagePackageContainPythonScript, Resources.PackageDownloadMessageBoxTitle, MessageBoxButton.OKCancel, MessageBoxImage.Exclamation); if (res == MessageBoxResult.Cancel) { return; } } // Determine if there are any dependencies that are made with a newer version // of Dynamo (this includes the root package) var dynamoVersion = DynamoViewModel.Model.Version; var dynamoVersionParsed = VersionUtilities.PartialParse(dynamoVersion, 3); var futureDeps = allPackageVersions.FilterFuturePackages(dynamoVersionParsed); // If any of the required packages use a newer version of Dynamo, show a dialog to the user // allowing them to cancel the package download if (futureDeps.Any()) { var versionList = FormatPackageVersionList(futureDeps); if (MessageBox.Show(String.Format(Resources.MessagePackageNewerDynamo, DynamoViewModel.BrandingResourceProvider.ProductName, versionList), string.Format(Resources.PackageUseNewerDynamoMessageBoxTitle, DynamoViewModel.BrandingResourceProvider.ProductName), MessageBoxButton.OKCancel, MessageBoxImage.Warning) == MessageBoxResult.Cancel) { return; } } var localPkgs = pmExt.PackageLoader.LocalPackages; var uninstallsRequiringRestart = new List <Package>(); var uninstallRequiringUserModifications = new List <Package>(); var immediateUninstalls = new List <Package>(); // if a package is already installed we need to uninstall it, allowing // the user to cancel if they do not want to uninstall the package foreach (var localPkg in headers.Select(x => localPkgs.FirstOrDefault(v => v.Name == x.name))) { if (localPkg == null) { continue; } if (localPkg.LoadedAssemblies.Any()) { uninstallsRequiringRestart.Add(localPkg); continue; } if (localPkg.InUse(DynamoViewModel.Model)) { uninstallRequiringUserModifications.Add(localPkg); continue; } immediateUninstalls.Add(localPkg); } if (uninstallRequiringUserModifications.Any()) { MessageBox.Show(String.Format(Resources.MessageUninstallToContinue, DynamoViewModel.BrandingResourceProvider.ProductName, JoinPackageNames(uninstallRequiringUserModifications)), Resources.CannotDownloadPackageMessageBoxTitle, MessageBoxButton.OK, MessageBoxImage.Error); return; } var settings = DynamoViewModel.Model.PreferenceSettings; if (uninstallsRequiringRestart.Any()) { var message = string.Format(Resources.MessageUninstallToContinue2, DynamoViewModel.BrandingResourceProvider.ProductName, JoinPackageNames(uninstallsRequiringRestart), name + " " + version.version); // different message for the case that the user is // trying to install the same package/version they already have installed. if (uninstallsRequiringRestart.Count == 1 && uninstallsRequiringRestart.First().Name == name && uninstallsRequiringRestart.First().VersionName == version.version) { message = String.Format(Resources.MessageUninstallSamePackage, name + " " + version.version); } var dialogResult = MessageBox.Show(message, Resources.CannotDownloadPackageMessageBoxTitle, MessageBoxButton.YesNo, MessageBoxImage.Error); if (dialogResult == MessageBoxResult.Yes) { // mark for uninstallation uninstallsRequiringRestart.ForEach(x => x.MarkForUninstall(settings)); } return; } if (immediateUninstalls.Any()) { // if the package is not in use, tell the user we will be uninstall it and give them the opportunity to cancel if (MessageBox.Show(String.Format(Resources.MessageAlreadyInstallDynamo, DynamoViewModel.BrandingResourceProvider.ProductName, JoinPackageNames(immediateUninstalls)), Resources.DownloadWarningMessageBoxTitle, MessageBoxButton.OKCancel, MessageBoxImage.Warning) == MessageBoxResult.Cancel) { return; } } // add custom path to custom package folder list if (!String.IsNullOrEmpty(downloadPath)) { if (!settings.CustomPackageFolders.Contains(downloadPath)) { settings.CustomPackageFolders.Add(downloadPath); } } // form header version pairs and download and install all packages allPackageVersions .Select(x => new PackageDownloadHandle(x.Item1, x.Item2)) .ToList() .ForEach(x => DownloadAndInstall(x, downloadPath)); } }
/// <summary> /// PackageManagerSearchElementViewModel Constructor (only used for testing in Dynamo). /// </summary> /// <param name="element">A PackageManagerSearchElement</param> /// <param name="canLogin">A Boolean used for access control to certain internal packages.</param> public PackageManagerSearchElementViewModel(PackageManagerSearchElement element, bool canLogin) : this(element, canLogin, true) { }