public override void Register(ContainerBuilder builder)
        {
            _tempFolderName = Path.GetTempFileName();
            File.Delete(_tempFolderName);
            var assembly = GetType().Assembly;

            foreach (var name in assembly.GetManifestResourceNames())
            {
                if (name.StartsWith(DataPrefix))
                {
                    string text;
                    using (var stream = assembly.GetManifestResourceStream(name))
                    {
                        using (var reader = new StreamReader(stream))
                            text = reader.ReadToEnd();
                    }

                    // Pro filtering
                    var relativePath = name
                                       .Substring(DataPrefix.Length)
                                       .Replace(".txt", ":txt")
                                       .Replace(".recipe.xml", ":recipe:xml")
                                       .Replace('.', Path.DirectorySeparatorChar)
                                       .Replace(":txt", ".txt")
                                       .Replace(":recipe:xml", ".recipe.xml");

                    var targetPath = Path.Combine(_tempFolderName, relativePath);

                    Directory.CreateDirectory(Path.GetDirectoryName(targetPath));
                    using (var stream = new FileStream(targetPath, FileMode.Create))
                    {
                        using (var writer = new StreamWriter(stream))
                        {
                            writer.Write(text);
                        }
                    }
                }
            }

            var harvester = new ExtensionHarvester(new StubCacheManager(), new StubWebSiteFolder(), new Mock <ICriticalErrorProvider>().Object);

            _folders = new ModuleFolders(new[] { _tempFolderName }, harvester);
            builder.RegisterType <RecipeManager>().As <IRecipeManager>();
            builder.RegisterType <RecipeHarvester>().As <IRecipeHarvester>();
            builder.RegisterType <RecipeStepExecutor>().As <IRecipeStepExecutor>();
            builder.RegisterType <StubStepQueue>().As <IRecipeStepQueue>().InstancePerLifetimeScope();
            builder.RegisterType <StubRecipeScheduler>().As <IRecipeScheduler>();
            builder.RegisterType <ExtensionManager>().As <IExtensionManager>();
            builder.RegisterType <StubAppDataFolder>().As <IAppDataFolder>();
            builder.RegisterType <StubClock>().As <IClock>();
            builder.RegisterType <StubCacheManager>().As <ICacheManager>();
            builder.RegisterType <StubParallelCacheContext>().As <IParallelCacheContext>();
            builder.RegisterType <StubAsyncTokenProvider>().As <IAsyncTokenProvider>();
            builder.RegisterInstance(_folders).As <IExtensionFolders>();
            builder.RegisterInstance(new Mock <IRecipeExecuteEventHandler>().Object);
            builder.RegisterType <ExtensionManagerTests.StubLoaders>().As <IExtensionLoader>();
            builder.RegisterType <RecipeParser>().As <IRecipeParser>();
            builder.RegisterType <StubWebSiteFolder>().As <IWebSiteFolder>();
            builder.RegisterType <CustomRecipeHandler>().As <IRecipeHandler>();
        }
 public IEnumerable <ExtensionDescriptor> AvailableExtensions()
 {
     foreach (var e in Manifests)
     {
         string name = e.Key;
         yield return(ExtensionHarvester.GetDescriptorForExtension("~/", name, _extensionType, Manifests[name]));
     }
 }
Ejemplo n.º 3
0
        public void ModuleTxtShouldBeParsedAndReturnedAsYamlDocument()
        {
            var harvester             = new ExtensionHarvester(new StubCacheManager(), new StubWebSiteFolder(), new Mock <ICriticalErrorProvider>().Object);
            IExtensionFolders folders = new ModuleFolders(new[] { _tempFolderName }, harvester);
            var sample1 = folders.AvailableExtensions().Single(d => d.Id == "Sample1");

            Assert.That(sample1.Id, Is.Not.Empty);
            Assert.That(sample1.Author, Is.EqualTo("Bertrand Le Roy")); // Sample1
        }
Ejemplo n.º 4
0
        public void NamesFromFoldersWithModuleTxtShouldFallBackToIdIfNotGiven()
        {
            var harvester             = new ExtensionHarvester(new StubCacheManager(), new StubWebSiteFolder(), new Mock <ICriticalErrorProvider>().Object);
            IExtensionFolders folders = new ModuleFolders(new[] { _tempFolderName }, harvester);
            var names = folders.AvailableExtensions().Select(d => d.Name);

            Assert.That(names.Count(), Is.EqualTo(5));
            Assert.That(names, Has.Some.EqualTo("Le plug-in français"));      // Sample1
            Assert.That(names, Has.Some.EqualTo("This is another test.txt")); // Sample3
            Assert.That(names, Has.Some.EqualTo("Sample4"));                  // Sample4
            Assert.That(names, Has.Some.EqualTo("SampleSix"));                // Sample6
            Assert.That(names, Has.Some.EqualTo("Sample7"));                  // Sample7
        }
Ejemplo n.º 5
0
        public void PathsFromFoldersWithModuleTxtShouldFallBackAppropriatelyIfNotGiven()
        {
            var harvester             = new ExtensionHarvester(new StubCacheManager(), new StubWebSiteFolder(), new Mock <ICriticalErrorProvider>().Object);
            IExtensionFolders folders = new ModuleFolders(new[] { _tempFolderName }, harvester);
            var paths = folders.AvailableExtensions().Select(d => d.Path);

            Assert.That(paths.Count(), Is.EqualTo(5));
            Assert.That(paths, Has.Some.EqualTo("Sample1"));        // Sample1 - Id, Name invalid URL segment
            Assert.That(paths, Has.Some.EqualTo("Sample3"));        // Sample3 - Id, Name invalid URL segment
            Assert.That(paths, Has.Some.EqualTo("ThisIs.Sample4")); // Sample4 - Path
            Assert.That(paths, Has.Some.EqualTo("SampleSix"));      // Sample6 - Name, no Path
            Assert.That(paths, Has.Some.EqualTo("Sample7"));        // Sample7 - Id, no Name or Path
        }
Ejemplo n.º 6
0
        public void IdsFromFoldersWithModuleTxtShouldBeListed()
        {
            var harvester             = new ExtensionHarvester(new StubCacheManager(), new StubWebSiteFolder(), new Mock <ICriticalErrorProvider>().Object);
            IExtensionFolders folders = new ModuleFolders(new[] { _tempFolderName }, harvester);
            var ids = folders.AvailableExtensions().Select(d => d.Id);

            Assert.That(ids.Count(), Is.EqualTo(5));
            Assert.That(ids, Has.Some.EqualTo("Sample1")); // Sample1 - obviously
            Assert.That(ids, Has.Some.EqualTo("Sample3")); // Sample3
            Assert.That(ids, Has.Some.EqualTo("Sample4")); // Sample4
            Assert.That(ids, Has.Some.EqualTo("Sample6")); // Sample6
            Assert.That(ids, Has.Some.EqualTo("Sample7")); // Sample7
        }
        public void ModuleTxtShouldBeParsedAndReturnedAsYamlDocument()
        {
            var harvester = new ExtensionHarvester(new StubWebSiteFolder(), new StubLoggerFactory());
            var options   = new ExtensionHarvestingOptions();

            options.ModuleLocationExpanders.Add(ModuleFolder(_tempFolderName));
            var folders = new ExtensionLocator(
                new FakeOptions(options),
                harvester);

            var sample1 = folders.AvailableExtensions().Single(d => d.Id == "Sample1");

            Assert.NotEmpty(sample1.Id);
            Assert.Equal("Bertrand Le Roy", sample1.Author); // Sample1
        }
        public void ModuleTxtShouldBeParsedAndReturnedAsYamlDocument()
        {
            var harvester = new ExtensionHarvester(new StubHostingEnvironment(),
                                                   new NullLogger <ExtensionHarvester>());
            var options = new ExtensionHarvestingOptions();

            options.ExtensionLocationExpanders.Add(ModuleFolder(_subPath));
            var folders = new ExtensionLocator(
                new FakeOptions(options),
                harvester);

            var sample1 = folders.AvailableExtensions().Single(d => d.Id == "Sample1");

            Assert.NotEmpty(sample1.Id);
            Assert.Equal("Bertrand Le Roy", sample1.Author); // Sample1
        }
Ejemplo n.º 9
0
        public void ModuleTxtShouldBeParsedAndReturnedAsYamlDocument()
        {
            var harvester = new ExtensionHarvester(new OrchardFileSystem(" ",
                                                                         new PhysicalFileProvider("/"),
                                                                         new NullLogger <OrchardFileSystem>()),
                                                   new NullLogger <ExtensionHarvester>());
            var options = new ExtensionHarvestingOptions();

            options.ExtensionLocationExpanders.Add(ModuleFolder(_tempFolderName));
            var folders = new ExtensionLocator(
                new FakeOptions(options),
                harvester);

            var sample1 = folders.AvailableExtensions().Single(d => d.Id == "Sample1");

            Assert.NotEmpty(sample1.Id);
            Assert.Equal("Bertrand Le Roy", sample1.Author); // Sample1
        }
 public IEnumerable <ExtensionDescriptor> AvailableExtensions()
 {
     if (_extensionTypes.Contains(DefaultExtensionTypes.Module))
     {
         foreach (var e in Manifests)
         {
             string name = e.Key;
             yield return(ExtensionHarvester.GetDescriptorForExtension("~/", name, DefaultExtensionTypes.Module, Manifests[name]));
         }
     }
     if (_extensionTypes.Contains(DefaultExtensionTypes.Theme))
     {
         foreach (var e in ThemeManifests)
         {
             string name = e.Key;
             yield return(ExtensionHarvester.GetDescriptorForExtension("~/", name, DefaultExtensionTypes.Theme, ThemeManifests[name]));
         }
     }
 }
        public void IdsFromFoldersWithModuleTxtShouldBeListed()
        {
            var harvester = new ExtensionHarvester(new StubWebSiteFolder(), new StubLoggerFactory());
            var options   = new ExtensionHarvestingOptions();

            options.ModuleLocationExpanders.Add(ModuleFolder(_tempFolderName));
            var folders = new ExtensionLocator(
                new FakeOptions(options),
                harvester);

            var ids = folders.AvailableExtensions().Select(d => d.Id);

            Assert.Equal(5, ids.Count());
            Assert.Contains("Sample1", ids); // Sample1 - obviously
            Assert.Contains("Sample3", ids); // Sample3
            Assert.Contains("Sample4", ids); // Sample4
            Assert.Contains("Sample6", ids); // Sample6
            Assert.Contains("Sample7", ids); // Sample7
        }
        public void NamesFromFoldersWithModuleTxtShouldFallBackToIdIfNotGiven()
        {
            var harvester = new ExtensionHarvester(new StubWebSiteFolder(), new StubLoggerFactory());
            var options   = new ExtensionHarvestingOptions();

            options.ModuleLocationExpanders.Add(ModuleFolder(_tempFolderName));
            var folders = new ExtensionLocator(
                new FakeOptions(options),
                harvester);

            var names = folders.AvailableExtensions().Select(d => d.Name);

            Assert.Equal(5, names.Count());
            Assert.Contains("Le plug-in français", names);      // Sample1
            Assert.Contains("This is another test.txt", names); // Sample3
            Assert.Contains("Sample4", names);                  // Sample4
            Assert.Contains("SampleSix", names);                // Sample6
            Assert.Contains("Sample7", names);                  // Sample7
        }
        public void PathsFromFoldersWithModuleTxtShouldFallBackAppropriatelyIfNotGiven()
        {
            var harvester = new ExtensionHarvester(new StubWebSiteFolder(), new StubLoggerFactory());
            var options   = new ExtensionHarvestingOptions();

            options.ModuleLocationExpanders.Add(ModuleFolder(_tempFolderName));
            var folders = new ExtensionLocator(
                new FakeOptions(options),
                harvester);

            var paths = folders.AvailableExtensions().Select(d => d.Path);

            Assert.Equal(5, paths.Count());
            Assert.Contains("Sample1", paths);        // Sample1 - Id, Name invalid URL segment
            Assert.Contains("Sample3", paths);        // Sample3 - Id, Name invalid URL segment
            Assert.Contains("ThisIs.Sample4", paths); // Sample4 - Path
            Assert.Contains("SampleSix", paths);      // Sample6 - Name, no Path
            Assert.Contains("Sample7", paths);        // Sample7 - Id, no Name or Path
        }
        public void IdsFromFoldersWithModuleTxtShouldBeListed()
        {
            var harvester = new ExtensionHarvester(new StubHostingEnvironment(),
                                                   new NullLogger <ExtensionHarvester>());
            var options = new ExtensionHarvestingOptions();

            options.ExtensionLocationExpanders.Add(ModuleFolder(_subPath));
            var folders = new ExtensionLocator(
                new FakeOptions(options),
                harvester);

            var ids = folders.AvailableExtensions().Select(d => d.Id);

            Assert.Equal(5, ids.Count());
            Assert.Contains("Sample1", ids); // Sample1 - obviously
            Assert.Contains("Sample3", ids); // Sample3
            Assert.Contains("Sample4", ids); // Sample4
            Assert.Contains("Sample6", ids); // Sample6
            Assert.Contains("Sample7", ids); // Sample7
        }
Ejemplo n.º 15
0
        public void IdsFromFoldersWithModuleTxtShouldBeListed()
        {
            var harvester = new ExtensionHarvester(new OrchardFileSystem(" ",
                                                                         new PhysicalFileProvider("/"),
                                                                         new NullLogger <OrchardFileSystem>()),
                                                   new NullLogger <ExtensionHarvester>());
            var options = new ExtensionHarvestingOptions();

            options.ExtensionLocationExpanders.Add(ModuleFolder(_tempFolderName));
            var folders = new ExtensionLocator(
                new FakeOptions(options),
                harvester);

            var ids = folders.AvailableExtensions().Select(d => d.Id);

            Assert.Equal(5, ids.Count());
            Assert.Contains("Sample1", ids); // Sample1 - obviously
            Assert.Contains("Sample3", ids); // Sample3
            Assert.Contains("Sample4", ids); // Sample4
            Assert.Contains("Sample6", ids); // Sample6
            Assert.Contains("Sample7", ids); // Sample7
        }
Ejemplo n.º 16
0
        public void NamesFromFoldersWithModuleTxtShouldFallBackToIdIfNotGiven()
        {
            var harvester = new ExtensionHarvester(new OrchardFileSystem(" ",
                                                                         new PhysicalFileProvider("/"),
                                                                         new NullLogger <OrchardFileSystem>()),
                                                   new NullLogger <ExtensionHarvester>());
            var options = new ExtensionHarvestingOptions();

            options.ExtensionLocationExpanders.Add(ModuleFolder(_tempFolderName));
            var folders = new ExtensionLocator(
                new FakeOptions(options),
                harvester);

            var names = folders.AvailableExtensions().Select(d => d.Name);

            Assert.Equal(5, names.Count());
            Assert.Contains("Le plug-in français", names);      // Sample1
            Assert.Contains("This is another test.txt", names); // Sample3
            Assert.Contains("Sample4", names);                  // Sample4
            Assert.Contains("SampleSix", names);                // Sample6
            Assert.Contains("Sample7", names);                  // Sample7
        }
Ejemplo n.º 17
0
        public static ExtensionDescriptor GetExtensionDescriptor(this IPackage package, string extensionType)
        {
            IPackageFile packageFile = package.GetFiles().FirstOrDefault(file => {
                var fileName = Path.GetFileName(file.Path);
                return(fileName != null && fileName.Equals(
                           DefaultExtensionTypes.IsModule(extensionType) ? "module.txt" : "theme.txt",
                           StringComparison.OrdinalIgnoreCase));
            });

            if (packageFile != null)
            {
                var directoryName = Path.GetDirectoryName(packageFile.Path);
                if (directoryName != null)
                {
                    string extensionId = Path.GetFileName(directoryName.TrimEnd('/', '\\'));
                    using (var streamReader = new StreamReader(packageFile.GetStream())) {
                        return(ExtensionHarvester.GetDescriptorForExtension("", extensionId, extensionType, streamReader.ReadToEnd()));
                    }
                }
            }

            return(null);
        }