Пример #1
0
        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();
            }
        }