public void ComputeDevelopmentManifest_IncludesAllAssets()
        {
            // 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.html"))),
                Environment.CurrentDirectory);

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

            var assets   = new[] { 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_DifferentCasingEndUpInDifferentNodes()
        {
            // 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")))),
                    ("CSS", CreateIntermediateNode(("site.css", CreateMatchNode(0, "CSS/site.css"))))),
                Environment.CurrentDirectory);

            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"),
            };

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

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

            // Assert
            manifest.ShouldBeEquivalentTo(expectedManifest);
        }
        public void ComputeDevelopmentManifest_MapsPatternsFromOtherProjects()
        {
            // 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, "**", 2)))))),
                Path.GetFullPath("wwwroot"));

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

            var assets   = Array.Empty <StaticWebAsset>();
            var patterns = new[] { CreatePattern(basePath: "_other/_project", source: "OtherProject") };

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

            // Assert
            manifest.ShouldBeEquivalentTo(expectedManifest);
        }
        public void ComputeDevelopmentManifest_UsesRelativePathContentRootDoesNotStartByIdentity()
        {
            // 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.html"))),
                Path.GetFullPath(Path.Combine("bin", "debug", "wwwroot")));

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

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

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

            // Assert
            manifest.ShouldBeEquivalentTo(expectedManifest);
        }
        public void ComputeDevelopmentManifest_ExcludesReferenceAssets()
        {
            // 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,
                Source      = "CurrentProjectId"
            };

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

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

            // Assert
            manifest.ShouldBeEquivalentTo(expectedManifest);
        }
        public void SkipsManifestGenerationWhen_ThereAreNoAssetsNorDiscoveryPatterns()
        {
            // 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 task = new GenerateStaticWebAssetsDevelopmentManifest()
            {
                BuildEngine       = buildEngine.Object,
                Assets            = Array.Empty <ITaskItem>(),
                DiscoveryPatterns = Array.Empty <ITaskItem>()
            };

            // Act
            var result = task.Execute();

            // Assert
            result.Should().BeTrue();
            messages.Should().HaveCount(1);
        }