public void ComputeDevelopmentManifest_PrefersBuildAssetsOverAllAssets()
        {
            // Arrange
            var messages    = new List <string>();
            var buildEngine = new Mock <IBuildEngine>();

            buildEngine.Setup(e => e.LogMessageEvent(It.IsAny <BuildMessageEventArgs>()))
            .Callback <BuildMessageEventArgs>(args => messages.Add(args.Message));

            var expectedManifest = CreateExpectedManifest(
                CreateIntermediateNode(
                    ("index.html", CreateMatchNode(0, "index.build.html"))),
                Environment.CurrentDirectory);

            var task = new GenerateStaticWebAssetsDevelopmentManifest()
            {
                BuildEngine = buildEngine.Object,
                Source      = "CurrentProjectId"
            };

            var assets = new[] {
                CreateAsset("index.build.html", "index.html", assetKind: StaticWebAsset.AssetKinds.Build),
                CreateAsset("index.html", "index.html", assetKind: StaticWebAsset.AssetKinds.All)
            };
            var patterns = Array.Empty <StaticWebAssetsManifest.DiscoveryPattern>();

            // Act
            var manifest = task.ComputeDevelopmentManifest(assets, patterns);

            // Assert
            manifest.ShouldBeEquivalentTo(expectedManifest);
        }
        public void ComputeDevelopmentManifest_UsesIdentityWhenContentRootStartsByIdentity()
        {
            // Arrange
            var messages    = new List <string>();
            var buildEngine = new Mock <IBuildEngine>();

            buildEngine.Setup(e => e.LogMessageEvent(It.IsAny <BuildMessageEventArgs>()))
            .Callback <BuildMessageEventArgs>(args => messages.Add(args.Message));

            var expectedManifest = CreateExpectedManifest(
                CreateIntermediateNode(
                    ("index.html", CreateMatchNode(0, StaticWebAsset.Normalize(Path.Combine("some", "subfolder", "index.build.html"))))),
                Environment.CurrentDirectory);

            var task = new GenerateStaticWebAssetsDevelopmentManifest()
            {
                BuildEngine = buildEngine.Object,
                Source      = "CurrentProjectId"
            };

            var assets = new[] {
                CreateAsset(Path.Combine("some", "subfolder", "index.build.html"), "index.html"),
            };
            var patterns = Array.Empty <StaticWebAssetsManifest.DiscoveryPattern>();

            // Act
            var manifest = task.ComputeDevelopmentManifest(assets, patterns);

            // Assert
            manifest.ShouldBeEquivalentTo(expectedManifest);
        }
        public void ComputeDevelopmentManifest_ExcludesPublishAssets()
        {
            // Arrange
            var messages    = new List <string>();
            var buildEngine = new Mock <IBuildEngine>();

            buildEngine.Setup(e => e.LogMessageEvent(It.IsAny <BuildMessageEventArgs>()))
            .Callback <BuildMessageEventArgs>(args => messages.Add(args.Message));

            var expectedManifest = CreateExpectedManifest(
                CreateIntermediateNode());

            var task = new GenerateStaticWebAssetsDevelopmentManifest()
            {
                BuildEngine = buildEngine.Object,
            };

            var assets   = new[] { CreateAsset("index.html", "index.html", assetKind: StaticWebAsset.AssetKinds.Publish) };
            var patterns = Array.Empty <StaticWebAssetsManifest.DiscoveryPattern>();

            // Act
            var manifest = task.ComputeDevelopmentManifest(assets, patterns);

            // Assert
            manifest.ShouldBeEquivalentTo(expectedManifest);
        }
        public void ComputeDevelopmentManifest_UsesBasePathForAssetsFromDifferentProjects()
        {
            // Arrange
            var messages    = new List <string>();
            var buildEngine = new Mock <IBuildEngine>();

            buildEngine.Setup(e => e.LogMessageEvent(It.IsAny <BuildMessageEventArgs>()))
            .Callback <BuildMessageEventArgs>(args => messages.Add(args.Message));

            var expectedManifest = CreateExpectedManifest(
                CreateIntermediateNode(
                    ("css", CreateIntermediateNode(("site.css", CreateMatchNode(0, "css/site.css")))),
                    ("_content", CreateIntermediateNode(
                         ("OtherProject", CreateIntermediateNode(
                              ("CSS", CreateIntermediateNode(("site.css", CreateMatchNode(1, "CSS/site.css"))))))))),
                Environment.CurrentDirectory,
                Path.GetFullPath("otherProject"));

            var task = new GenerateStaticWebAssetsDevelopmentManifest()
            {
                BuildEngine = buildEngine.Object,
                Source      = "CurrentProjectId"
            };

            var assets = new[]
            {
                CreateAsset(Path.Combine(Environment.CurrentDirectory, "css", "site.css"), "css/site.css"),
                CreateAsset(
                    Path.Combine(Environment.CurrentDirectory, "CSS", "site.css"),
                    "CSS/site.css",
                    basePath: "_content/OtherProject",
                    sourceType: "Project",
                    contentRoot: Path.GetFullPath("otherProject")),
            };

            var patterns = Array.Empty <StaticWebAssetsManifest.DiscoveryPattern>();

            // Act
            var manifest = task.ComputeDevelopmentManifest(assets, patterns);

            // Assert
            manifest.ShouldBeEquivalentTo(expectedManifest);
        }
        public void ComputeDevelopmentManifest_CanMapMultiplePatternsOnSameNodeWithDifferentContentRoots()
        {
            // Arrange
            var messages    = new List <string>();
            var buildEngine = new Mock <IBuildEngine>();

            buildEngine.Setup(e => e.LogMessageEvent(It.IsAny <BuildMessageEventArgs>()))
            .Callback <BuildMessageEventArgs>(args => messages.Add(args.Message));

            var expectedManifest = CreateExpectedManifest(
                CreateIntermediateNode(
                    ("_other", CreateIntermediateNode(
                         ("_project", CreateIntermediateNode().AddPatterns(
                              (0, "*.js", 2),
                              (1, "*.css", 2)))))),
                Path.GetFullPath("wwwroot"),
                Path.GetFullPath("styles"));

            var task = new GenerateStaticWebAssetsDevelopmentManifest()
            {
                BuildEngine = buildEngine.Object,
                Source      = "CurrentProjectId"
            };

            var assets   = Array.Empty <StaticWebAsset>();
            var patterns = new[]
            {
                CreatePattern(basePath: "_other/_project", source: "OtherProject", pattern: "*.js"),
                CreatePattern(basePath: "_other/_project", source: "OtherProject", pattern: "*.css", contentRoot: Path.GetFullPath("styles"))
            };

            // Act
            var manifest = task.ComputeDevelopmentManifest(assets, patterns);

            // Assert
            manifest.ShouldBeEquivalentTo(expectedManifest);
        }