public void DiscoverMetadataProperties(PackageMetadata discoveredMetadata, string discoveryRoot)
 {
     discoveredMetadata.Id = "Package";
     discoveredMetadata.Version = new SemanticVersion(0, 0, 0, 0);
     discoveredMetadata.Description = "Package description";
     discoveredMetadata.Authors.Add("Author");
 }
        public void VersionInMetaData_MapsToPackage()
        {
            var metaData = new PackageMetadata { Version = new SemanticVersion(9,8,7,6) };

            var packageBuilt = _pc.BuildPackage(_files, metaData);

            Assert.That(packageBuilt.Version, Is.EqualTo(new SemanticVersion(9, 8, 7, 6)));
        }
        public void IdInMetaData_MapsToPackage()
        {
            var metaData = new PackageMetadata { Id = "something" };

            var packageBuilt = _pc.BuildPackage(_files, metaData);

            Assert.That(packageBuilt.Id, Is.EqualTo("something"));
        }
        public void DescriptionInMetaData_MapsToPackage()
        {
            var metaData = new PackageMetadata { Description = "my huge package" };

            var packageBuilt = _pc.BuildPackage(_files, metaData);

            Assert.That(packageBuilt.Description, Is.EqualTo("my huge package"));
        }
        public void AuthorsInMetaData_MapsToPackage()
        {
            var metaData = new PackageMetadata { Authors = new List<string> {"SomeAuthor"} };

            var packageBuilt = _pc.BuildPackage(_files, metaData);

            Assert.That(packageBuilt.Authors.First(), Is.EqualTo("SomeAuthor"));
        }
        public void PackageMetadata_WhenNoExesFoundButManyDllsExist_FindsDllMatchingUpperDirectoryName()
        {
            var meta = new PackageMetadata();
            _dllFilesOnDisk.Add(_rootDir + "\\file.dll");

            _ipdfsfe.DiscoverMetadataProperties(meta, _rootDir);

            _mapper.Verify(x => x.MapAssemblyInfoToPackage(_rootDir + "\\file.dll", It.IsAny<PackageMetadata>()));
        }
        public void OnePackageManifestPresent_LoadsPackageSettingsFile()
        {
            var meta = new PackageMetadata();
            _packageManifests.Add(SettingsFilename);
            _settingsLoader.Setup(x => x.Load(SettingsFilename)).Returns(new ConventionsSettingsFile());

            _heuristic.DiscoverMetadataProperties(meta, _discoveryRoot);

            _settingsLoader.Verify(x => x.Load(SettingsFilename), Times.Once());
        }
        public void MoreThanOnePackageManifestPresent_ThrowsException()
        {
            var meta = new PackageMetadata();
            _packageManifests.Add(SettingsFilename);
            _packageManifests.Add("settings2.deployd-package");

            var ex = Assert.Throws<InvalidOperationException>(() => _heuristic.DiscoverMetadataProperties(meta, _discoveryRoot));

            Assert.That(ex.Message, Is.EqualTo("More than one packing convention file found in source directory."));
        }
        public void PackageMetadata_WhenMoreThanOneExeIsFound_MapperNotCalled()
        {
            var meta = new PackageMetadata();
            _exeFilesOnDisk.Add(_rootDir + "\\one.exe");
            _exeFilesOnDisk.Add(_rootDir + "\\two.exe");

            _ipdfsfe.DiscoverMetadataProperties(meta, _rootDir);

            _mapper.Verify(x => x.MapAssemblyInfoToPackage(It.IsAny<string>(), It.IsAny<PackageMetadata>()), Times.Never());
        }
        public void FileInList_AddedToPackage()
        {
            var metaData = new PackageMetadata();
            var file = new PhysicalPackageFile();
            _files.Add(file);

            var packageBuilt = _pc.BuildPackage(_files, metaData);

            Assert.That(packageBuilt.Files[0], Is.EqualTo(file));
        }
        public void PackageMetadata_WhenNoExesFoundButSingleDll_CallsMapperToMapFromThatDll()
        {
            var meta = new PackageMetadata();
            _dllFilesOnDisk.Add(_rootDir + "\\bin\\something-else.dll");
            _dllFilesOnDisk.Add(_rootDir + "\\bin\\package-source-dir.dll");

            _ipdfsfe.DiscoverMetadataProperties(meta, _rootDir);

            _mapper.Verify(x => x.MapAssemblyInfoToPackage(_rootDir + "\\bin\\package-source-dir.dll", It.IsAny<PackageMetadata>()));
        }
        public void PackageMetadata_WhenOneSingleExeIsFound_CallsMapperToMapFromThatExe()
        {
            var meta = new PackageMetadata();
            _exeFilesOnDisk.Add(_rootDir + "\\one.exe");

            _ipdfsfe.DiscoverMetadataProperties(meta, _rootDir);

            _mapper.Verify();
            Assert.That(meta.Description, Is.EqualTo("Updated"));
        }
        public void PackageMetadata_WhenMultipleExesFound_DllsArentCheckedAsTheyAreLessImportant()
        {
            var meta = new PackageMetadata();
            _exeFilesOnDisk.Add(_rootDir + "\\one.exe");
            _exeFilesOnDisk.Add(_rootDir + "\\two.exe");
            _dllFilesOnDisk.Add(_rootDir + "\\file.dll");

            _ipdfsfe.DiscoverMetadataProperties(meta, _rootDir);

            _mapper.Verify(x => x.MapAssemblyInfoToPackage(_rootDir + "\\file.dll", It.IsAny<PackageMetadata>()), Times.Never());
        }
        public void DiscoverPackageMetadata_MetadataGeneratedHasSensibleDefaults()
        {
            var meta = new PackageMetadata();

            _disc.DiscoverMetadataProperties(meta, string.Empty);

            Assert.That(meta.Authors[0], Is.EqualTo("Author"));
            Assert.That(meta.Description, Is.EqualTo("Package description"));
            Assert.That(meta.Id, Is.EqualTo("Package"));
            Assert.That(meta.Version, Is.EqualTo(new SemanticVersion(0, 0, 0, 0)));
            Assert.That(meta.PackageFilename, Is.EqualTo("Package-0.0.0.0.nupkg"));
        }
        public void DiscoverMetadataProperties(PackageMetadata discoveredMetadata, string discoveryRoot)
        {
            var matchingFiles = _fs.Directory.GetFiles(discoveryRoot, "*.deployd-package", System.IO.SearchOption.AllDirectories).ToList();

            if (matchingFiles.Count == 0)
            {
                return;
            }

            if (matchingFiles.Count > 1)
            {
                throw new InvalidOperationException("More than one packing convention file found in source directory.");
            }

            var conventionsFile = _settingsFileLoader.Load(matchingFiles[0]);
        }
        public void DiscoverMetadataProperties(PackageMetadata discoveredMetadata, string discoveryRoot)
        {
            var exesFound = _fs.Directory.GetFiles(discoveryRoot, "*.exe", System.IO.SearchOption.AllDirectories).ToList();
            exesFound.RemoveAll(x => x.Contains(".vshost"));

            if (exesFound.Count == 1)
            {
                _log.Info("Infering metadata from " + exesFound[0]);

                _fromAssemblyMapper.MapAssemblyInfoToPackage(exesFound[0], discoveredMetadata);
                return;
            }

            if (exesFound.Count > 1)
            {
                return;
            }

            var dllsFound = _fs.Directory.GetFiles(discoveryRoot, "*.dll", System.IO.SearchOption.AllDirectories).ToList();

            if (dllsFound.Count == 1)
            {
                _log.Info("Infering metadata from " + dllsFound[0]);

                _fromAssemblyMapper.MapAssemblyInfoToPackage(dllsFound[0], discoveredMetadata);
            }

            foreach (var dll in dllsFound)
            {
                var captures = Regex.Matches(dll, @"(.*?)\\bin\\(.*?).dll");
                if (captures.Count == 0 || captures[0].Groups.Count < 3)
                {
                    continue;
                }

                var directoryStub = captures[0].Groups[1].Value;
                var dllName = captures[0].Groups[2].Value;

                if (directoryStub.EndsWith(dllName))
                {
                    _log.Info("Infering metadata from " + dll);

                    _fromAssemblyMapper.MapAssemblyInfoToPackage(dll, discoveredMetadata);
                    break;
                }
            }
        }
        public void MapAssemblyInfoToPackage(string assembly, PackageMetadata package)
        {
            _log.Info("Loading assembly metadata... ");

            var versionInfo = FileVersionInfo.GetVersionInfo(assembly);

            _log.Info("Product Name: " + versionInfo.ProductName);
            _log.Info("File Description: " + versionInfo.FileDescription);

            package.Id = versionInfo.ProductName;
            package.Description = versionInfo.FileDescription;

            package.Version = new SemanticVersion(versionInfo.FileMajorPart, versionInfo.FileMinorPart,
                                                  versionInfo.FileBuildPart, versionInfo.FilePrivatePart);

            if (!string.IsNullOrWhiteSpace(versionInfo.CompanyName))
            {
                package.Authors.Clear();
                package.Authors.Add(versionInfo.CompanyName);
            }
        }
        public PackageBuilder BuildPackage(IEnumerable<IPackageFile> packageFiles, PackageMetadata metaData)
        {
            var package = new PackageBuilder
            {
                Id = metaData.Id,
                Version = metaData.Version,
                Description = metaData.Description
            };

            foreach (var item in metaData.Authors)
            {
                package.Authors.Add(item);
            }

            foreach (var file in packageFiles)
            {
                package.Files.Add(file);
            }

            return package;
        }
 public void DiscoverMetadataProperties(PackageMetadata discoveredMetadata, string discoveryRoot)
 {
     Executed = true;
 }