public void ShouldCreateAssemblyInfoFileAtPathWhenNotExistsAndEnsureAssemblyInfo(string fileExtension)
        {
            var workingDir       = Path.GetTempPath();
            var assemblyInfoFile = Path.Combine("src", "Project", "Properties", "VersionAssemblyInfo." + fileExtension);
            var fullPath         = Path.Combine(workingDir, assemblyInfoFile);
            var variables        = variableProvider.GetVariablesFor(SemanticVersion.Parse("1.0.0", "v"), new TestEffectiveConfiguration(), false);

            using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fileSystem);
            assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, true, assemblyInfoFile));

            fileSystem.ReadAllText(fullPath).ShouldMatchApproved(c => c.SubFolder(Path.Combine("Approved", fileExtension)));
        }
        public void ShouldStartSearchFromWorkingDirectory()
        {
            fileSystem = Substitute.For <IFileSystem>();
            var workingDir        = Path.GetTempPath();
            var assemblyInfoFiles = Array.Empty <string>();
            var variables         = variableProvider.GetVariablesFor(SemanticVersion.Parse("1.0.0", "v"), new TestEffectiveConfiguration(), false);

            using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fileSystem);
            assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFiles.ToArray()));

            fileSystem.Received().DirectoryEnumerateFiles(Arg.Is(workingDir), Arg.Any <string>(), Arg.Any <SearchOption>());
        }
        public void ShouldNotCreateAssemblyInfoFileWhenNotExistsAndNotEnsureAssemblyInfo(string fileExtension)
        {
            var workingDir       = Path.GetTempPath();
            var assemblyInfoFile = "VersionAssemblyInfo." + fileExtension;
            var fullPath         = Path.Combine(workingDir, assemblyInfoFile);
            var variables        = variableProvider.GetVariablesFor(SemanticVersion.Parse("1.0.0", "v"), new TestEffectiveConfiguration(), false);

            using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fileSystem);
            assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile));

            fileSystem.Exists(fullPath).ShouldBeFalse();
        }
        public void ShouldNotCreateAssemblyInfoFileForUnknownSourceCodeAndEnsureAssemblyInfo()
        {
            fileSystem = Substitute.For <IFileSystem>();
            var workingDir       = Path.GetTempPath();
            var assemblyInfoFile = "VersionAssemblyInfo.js";
            var fullPath         = Path.Combine(workingDir, assemblyInfoFile);
            var variables        = variableProvider.GetVariablesFor(SemanticVersion.Parse("1.0.0", "v"), new TestEffectiveConfiguration(), false);

            using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fileSystem);
            assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, true, assemblyInfoFile));

            fileSystem.Received(0).WriteAllText(fullPath, Arg.Any <string>());
        }
        public void ShouldNotAddAssemblyInformationalVersionWhenVersionSchemeIsNone(string fileExtension, string assemblyFileContent)
        {
            var workingDir       = Path.GetTempPath();
            var assemblyInfoFile = "AssemblyInfo." + fileExtension;
            var fileName         = Path.Combine(workingDir, assemblyInfoFile);

            VerifyAssemblyInfoFile(assemblyFileContent, fileName, AssemblyVersioningScheme.None, verify: (fs, variables) =>
            {
                using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fs);
                assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile));

                assemblyFileContent = fs.ReadAllText(fileName);
                assemblyFileContent.ShouldMatchApproved(c => c.SubFolder(Path.Combine("Approved", fileExtension)));
            });
        }
        public void Issue1183ShouldAddFSharpAssemblyInformationalVersionBesideOtherAttributes(string fileExtension, string assemblyFileContent)
        {
            var workingDir       = Path.GetTempPath();
            var assemblyInfoFile = "AssemblyInfo." + fileExtension;
            var fileName         = Path.Combine(workingDir, assemblyInfoFile);

            VerifyAssemblyInfoFile(assemblyFileContent, fileName, verify: (fs, variables) =>
            {
                using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fs);
                assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile));

                assemblyFileContent = fs.ReadAllText(fileName);
                assemblyFileContent.ShouldMatchApproved(c => c.SubFolder(Path.Combine("Approved", fileExtension)));
            });
        }
        public void ShouldReplaceAssemblyVersionInRelativePathWithVariablesAndWhiteSpace(string fileExtension, string assemblyFileContent)
        {
            var workingDir       = Path.GetTempPath();
            var assemblyInfoFile = Path.Combine("Project", "src", "Properties", "AssemblyInfo." + fileExtension);
            var fileName         = Path.Combine(workingDir, assemblyInfoFile);

            VerifyAssemblyInfoFile(assemblyFileContent, fileName, AssemblyVersioningScheme.MajorMinor, (fs, variables) =>
            {
                using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fs);
                assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile));

                fs.Received().WriteAllText(fileName, Arg.Is <string>(s =>
                                                                     s.Contains(@"AssemblyVersion(""2.3.0.0"")") &&
                                                                     s.Contains(@"AssemblyInformationalVersion(""2.3.1+3.Branch.foo.Sha.hash"")") &&
                                                                     s.Contains(@"AssemblyFileVersion(""2.3.1.0"")")));
            });
        }
        public void ShouldReplaceAssemblyVersionWhenCreatingAssemblyVersionFileAndEnsureAssemblyInfo(string fileExtension, string assemblyFileContent)
        {
            var workingDir       = Path.GetTempPath();
            var assemblyInfoFile = "AssemblyInfo." + fileExtension;
            var fileName         = Path.Combine(workingDir, assemblyInfoFile);

            VerifyAssemblyInfoFile(assemblyFileContent, fileName, verify: (fs, variables) =>
            {
                using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fs);
                assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile));

                fs.Received().WriteAllText(fileName, Arg.Is <string>(s =>
                                                                     s.Contains(@"AssemblyVersion(""2.3.1.0"")") &&
                                                                     s.Contains(@"AssemblyInformationalVersion(""2.3.1+3.Branch.foo.Sha.hash"")") &&
                                                                     s.Contains(@"AssemblyFileVersion(""2.3.1.0"")")));
            });
        }
        public void ShouldAddAssemblyVersionIfMissingFromInfoFile(string fileExtension)
        {
            var workingDir       = Path.GetTempPath();
            var assemblyInfoFile = "AssemblyInfo." + fileExtension;
            var fileName         = Path.Combine(workingDir, assemblyInfoFile);

            VerifyAssemblyInfoFile("", fileName, AssemblyVersioningScheme.MajorMinor, (fs, variables) =>
            {
                using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fs);
                assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile));

                fs.Received().WriteAllText(fileName, Arg.Is <string>(s =>
                                                                     s.Contains(@"AssemblyVersion(""2.3.0.0"")") &&
                                                                     s.Contains(@"AssemblyInformationalVersion(""2.3.1+3.Branch.foo.Sha.hash"")") &&
                                                                     s.Contains(@"AssemblyFileVersion(""2.3.1.0"")")));
            });
        }
    public void ShouldReplaceAlreadySubstitutedValues(string fileExtension, string assemblyFileContent)
    {
        var workingDir       = Path.GetTempPath();
        var assemblyInfoFile = "AssemblyInfo." + fileExtension;
        var fileName         = PathHelper.Combine(workingDir, assemblyInfoFile);

        VerifyAssemblyInfoFile(assemblyFileContent, fileName, AssemblyVersioningScheme.MajorMinor, (fs, variables) =>
        {
            using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(this.log, fs);
            assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile));

            fs.Received().WriteAllText(fileName, Arg.Is <string>(s =>
                                                                 s.Contains(@"AssemblyVersion(""2.3.0.0"")") &&
                                                                 s.Contains(@"AssemblyInformationalVersion(""2.3.1+3.Branch.foo.Sha.hash"")") &&
                                                                 s.Contains(@"AssemblyFileVersion(""2.3.1.0"")")));
        });
    }