public void PackageManagerConflictsWithStdLib() { var pkgLoader = GetPackageLoader(); pkgLoader.StandardLibraryDirectory = StandardLibraryTestDirectory; // Load a std lib package var stdPackageLocation = Path.Combine(StandardLibraryTestDirectory, "SignedPackage2"); pkgLoader.ScanPackageDirectory(stdPackageLocation); var stdLibPkg = pkgLoader.LocalPackages.Where(x => x.Name == "SignedPackage").FirstOrDefault(); Assert.IsNotNull(stdLibPkg); // Simulate the user downloading the same package from PM var mockGreg = new Mock <IGregClient>(); mockGreg.Setup(x => x.Execute(It.IsAny <PackageDownload>())).Throws(new Exception("Failed to get your package!")); var client = new Dynamo.PackageManager.PackageManagerClient(mockGreg.Object, MockMaker.Empty <IPackageUploadBuilder>(), string.Empty); var pmVm = new PackageManagerClientViewModel(ViewModel, client); var dlgMock = new Mock <MessageBoxService.IMessageBox>(); dlgMock.Setup(m => m.Show(It.IsAny <string>(), It.IsAny <string>(), It.Is <MessageBoxButton>(x => x == MessageBoxButton.OKCancel || x == MessageBoxButton.OK), It.IsAny <MessageBoxImage>())) .Returns(MessageBoxResult.OK); MessageBoxService.OverrideMessageBoxDuringTests(dlgMock.Object); // // 1. User downloads the exact version of a std lib package // { var id = "test-123"; var deps = new List <Dependency>() { new Dependency() { _id = id, name = stdLibPkg.Name } }; var depVers = new List <string>() { stdLibPkg.VersionName }; mockGreg.Setup(m => m.ExecuteAndDeserializeWithContent <PackageVersion>(It.IsAny <Request>())) .Returns(new ResponseWithContentBody <PackageVersion>() { content = new PackageVersion() { version = stdLibPkg.VersionName, engine_version = stdLibPkg.EngineVersion, name = stdLibPkg.Name, id = id, full_dependency_ids = deps, full_dependency_versions = depVers }, success = true }); var pkgInfo = new Dynamo.Graph.Workspaces.PackageInfo(stdLibPkg.Name, VersionUtilities.PartialParse(stdLibPkg.VersionName)); pmVm.DownloadAndInstallPackage(pkgInfo); // Users should get 2 warnings : // 1. To confirm that they want to download the specified package. // 2. That a package with the same name and version already exists as part of the Standard Library. dlgMock.Verify(x => x.Show(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <MessageBoxButton>(), It.IsAny <MessageBoxImage>()), Times.Exactly(2)); dlgMock.ResetCalls(); } // // 2. User downloads a different version of a std lib package // { var id = "test-234"; var deps = new List <Dependency>() { new Dependency() { _id = id, name = stdLibPkg.Name } }; var stdLibPkgVers = VersionUtilities.PartialParse(stdLibPkg.VersionName); var newPkgVers = new Version(stdLibPkgVers.Major + 1, stdLibPkgVers.Minor, stdLibPkgVers.Build); var depVers = new List <string>() { newPkgVers.ToString() }; mockGreg.Setup(m => m.ExecuteAndDeserializeWithContent <PackageVersion>(It.IsAny <Request>())) .Returns(new ResponseWithContentBody <PackageVersion>() { content = new PackageVersion() { version = newPkgVers.ToString(), engine_version = stdLibPkg.EngineVersion, name = stdLibPkg.Name, id = id, full_dependency_ids = deps, full_dependency_versions = depVers }, success = true }); var pkgInfo = new Dynamo.Graph.Workspaces.PackageInfo(stdLibPkg.Name, newPkgVers); pmVm.DownloadAndInstallPackage(pkgInfo); // Users should get 2 warnings : // 1. To confirm that they want to download the specified package. // 2. That a package with a different version already exists as part of the Standard Library. dlgMock.Verify(x => x.Show(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <MessageBoxButton>(), It.IsAny <MessageBoxImage>()), Times.Exactly(2)); dlgMock.ResetCalls(); } // // 3. User downloads a package that is not part of a std lib package // { var id = "test-345"; var deps = new List <Dependency>() { new Dependency() { _id = id, name = "non-std-libg" } }; var pkgVersion = new Version(1, 0, 0); var depVers = new List <string>() { pkgVersion.ToString() }; mockGreg.Setup(m => m.ExecuteAndDeserializeWithContent <PackageVersion>(It.IsAny <Request>())) .Returns(new ResponseWithContentBody <PackageVersion>() { content = new PackageVersion() { version = pkgVersion.ToString(), engine_version = stdLibPkg.EngineVersion, name = "non-std-libg", id = id, full_dependency_ids = deps, full_dependency_versions = depVers }, success = true }); var pkgInfo = new Dynamo.Graph.Workspaces.PackageInfo("Non-stdlib-package", new Version(1, 0, 0)); pmVm.DownloadAndInstallPackage(pkgInfo); // Users should get 1 warning : // 1. To confirm that they want to download the specified package. dlgMock.Verify(x => x.Show(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <MessageBoxButton>(), It.IsAny <MessageBoxImage>()), Times.Exactly(1)); dlgMock.ResetCalls(); } }