public void WhenAScriptIsInMoreThanOneGroup_AndOneGroupWasExplicitlyRequired_ThenGroupExplicitlyRequiredGroupIsIncluded()
        {
            var aOnlyFile = _finder.CreateResource("~/a/script.js");
            var bOnlyFile = _finder.CreateResource("~/b/scripts.js");
            var fileInBothGroups = _finder.CreateResource("~/shared/script.js");

            var groupA = new ScriptGroupElement();
            groupA.ConsolidatedUrl = "~/groups/groupA.js";
            groupA.Include.AddPath(aOnlyFile.VirtualPath);
            groupA.Include.AddPath(fileInBothGroups.VirtualPath);
            _context.ScriptGroups.Add(groupA);

            var groupB = new ScriptGroupElement();
            groupB.ConsolidatedUrl = "~/groups/groupB.js";
            groupB.Include.AddPath(bOnlyFile.VirtualPath);
            groupB.Include.AddPath(fileInBothGroups.VirtualPath);
            _context.ScriptGroups.Add(groupB);

            var scriptRegistry1 = _accessor.ScriptRegistry;
            scriptRegistry1.Require(fileInBothGroups.VirtualPath);
            scriptRegistry1.Require(groupB.ConsolidatedUrl);

            var includedScripts = scriptRegistry1.GetIncludes().ToList();
            includedScripts.CountShouldEqual(1);
            includedScripts[0].ShouldEqual(groupB.ConsolidatedUrl);
        }
        public void SetupContext()
        {
            _context = AssmanContext.Create(ResourceMode.Debug);
            _groupElement = new ScriptGroupElement();
            _groupElement.ConsolidatedUrl = "~" + ConsolidatedPath;
            _context.ScriptGroups.Add(_groupElement);

            _configLoader = new Mock<IConfigLoader>();
            _configLoader.Setup(l => l.GetSection<CompilationSection>(It.IsAny<string>())).Returns(new CompilationSection());

            _handlerFactory = new ResourceHttpHandlerFactory(_context, _configLoader.Object);
        }
        public void FilesInSecondGroupAndNotInFirstReturnSecondGroupUrl()
        {
            const string secondGroupUrl = "~/mysecondconsolidation.js";
            _context.ConsolidateScripts = true;
            _groupElement.Exclude.AddPattern(mySecondScript);
            var secondGroupElement = new ScriptGroupElement();
            _context.ScriptGroups.Add(secondGroupElement);
            secondGroupElement.ConsolidatedUrl = secondGroupUrl;

            _registry.Require(mySecondScript);
            string scriptToInclude = _registry.GetIncludes().Single();

            Assert.That(scriptToInclude, Is.EqualTo(secondGroupUrl).IgnoreCase);
        }
        public void AfterPreConsolidatedReportIsLoaded_WhenUrlForFileThatDoesNotExistButWhosePatternMatchesGroup_ItsGroupUrlCanStillBeResolved()
        {
            var group = new ScriptGroupElement();
            group.ConsolidatedUrl = "~/scripts/consolidated/common.js";
            group.Include.AddPattern("~/scripts/.+");
            _context.ScriptGroups.Add(group);

            var preConsolidationReport = new PreCompilationReport();
            var scriptGroup = new PreCompiledResourceGroup
            {
                ConsolidatedUrl = "~/scripts/consolidated/common.js",
                Resources = new List<string>
                {
                     "~/scripts/myscript.js"
                }
            };
            preConsolidationReport.Scripts.Groups.Add(scriptGroup);

            _context.LoadPreCompilationReport(preConsolidationReport);

            var resolvedUrl = _context.ScriptPathResolver.GetMatchingGroupUrls("~/scripts/bogusscript.js").Single();
            resolvedUrl.ShouldEqual("~/scripts/consolidated/common.js");
        }
        public void WhenTwoScriptsMappingToTheSameGroupAreRequiredInTwoSeparateRegistries_TheGroupIsOnlyIncludedInOneRegistry()
        {
            var scriptA = _finder.CreateResource("~/scriptA.js");
            var scriptB = _finder.CreateResource("~/scriptB.js");

            var group = new ScriptGroupElement();
            group.ConsolidatedUrl = "~/groups.js";
            group.Include.AddPath(scriptA.VirtualPath);
            group.Include.AddPath(scriptB.VirtualPath);
            _context.ScriptGroups.Add(group);

            var scriptRegistry1 = _accessor.ScriptRegistry;
            scriptRegistry1.Require(scriptA.VirtualPath);

            var scriptRegistry2 = _accessor.NamedScriptRegistry("another");
            scriptRegistry2.Require(scriptB.VirtualPath);

            var includedScripts1 = scriptRegistry1.GetIncludes().ToList();
            includedScripts1.CountShouldEqual(1);
            includedScripts1[0].ShouldEqual(group.ConsolidatedUrl);

            scriptRegistry2.GetIncludes().CountShouldEqual(0);
        }
        public void WhenAScriptIsRequiredThatIsPartOfAGroupAlreadyClaimed_ItIsIgnored()
        {
            var scriptA = _finder.CreateResource("~/scriptA.js");
            var scriptB = _finder.CreateResource("~/scriptB.js");

            var group = new ScriptGroupElement();
            group.ConsolidatedUrl = "~/groups.js";
            group.Include.AddPath(scriptA.VirtualPath);
            group.Include.AddPath(scriptB.VirtualPath);
            _context.ScriptGroups.Add(group);

            var scriptRegistry1 = _accessor.ScriptRegistry;
            scriptRegistry1.Require(scriptA.VirtualPath);

            var includedScripts1 = scriptRegistry1.GetIncludes().ToList();
            includedScripts1.CountShouldEqual(1);
            includedScripts1[0].ShouldEqual(group.ConsolidatedUrl);

            var scriptRegistry2 = _accessor.NamedScriptRegistry("another");
            scriptRegistry2.Require(scriptB.VirtualPath);

            scriptRegistry2.GetIncludes().CountShouldEqual(0);
        }
        public void WhenGroupUrlIsRequiredThatMatchesThePatternOfAPreviousGroup_TheGroupUrlIsReturned()
        {
            var anotherGroup = new ScriptGroupElement();
            anotherGroup.ConsolidatedUrl = "~/another_consolidated_url.js";
            anotherGroup.Include.AddPath(myScript);
            _context.ScriptGroups.Add(anotherGroup);
            _groupElement.Include.AddPattern("another_consolidated_url");

            _registry.Require(anotherGroup.ConsolidatedUrl);
            var resolvedScriptPath = _registry.GetIncludes().Single();

            resolvedScriptPath.ShouldEqual(anotherGroup.ConsolidatedUrl);
        }
        public void WhenGroupUrlIsPassedIntoGetResourceUrlAndConsolidationIsEnabled_GroupUrlIsReturned()
        {
            _groupElement.Include.AddPattern("~/Scripts/.+");

            var secondGroup = new ScriptGroupElement();
            secondGroup.ConsolidatedUrl = "~/Scripts/Consolidated/SecondGroup.js";
            _context.ScriptGroups.Add(secondGroup);

            _registry.Require(secondGroup.ConsolidatedUrl);
            var resolvedScriptPath = _registry.GetIncludes().Single();

            resolvedScriptPath.ShouldEqual(secondGroup.ConsolidatedUrl);
        }
        public void Init()
        {
            _finder = new StubResourceFinder();
            _finder.CreateResource(myScript);
            _finder.CreateResource(mySecondScript);
            _finder.CreateResource(excludedScript);

            _dependencyProvider = new StubDependencyProvider();
            DependencyManagerFactory.ClearDependencyCache();

            _context = AssmanContext.Create(ResourceMode.Debug);
            _context.ConsolidateScripts = true;
            _context.ConfigurationLastModified = DateTime.MinValue;
            _context.AddFinder(_finder);
            _context.MapExtensionToDependencyProvider(".js", _dependencyProvider);
            _groupElement = new ScriptGroupElement();
            _groupElement.ConsolidatedUrl = consolidatedScript;
            _groupElement.Exclude.AddPattern(excludedScript);
            _context.ScriptGroups.Add(_groupElement);

            _registry = new ConsolidatingResourceRegistry(new ResourceRequirementCollection(), "Default", _context.ScriptPathResolver, new ConfiguredVersioningStrategy(() => _context.Version));
        }