Пример #1
0
    public void ShouldWarnAboutMissingGitConfiguration()
    {
        TempProject.CreateCsharpProject(_testSetup.WorkingDirectory);

        var workingFilePath = Path.Join(_testSetup.WorkingDirectory, "hello.txt");

        // Create and commit a test file
        File.WriteAllText(workingFilePath, "First line of text");
        CommitAll(_testSetup.Repository);

        var configurationValues = new[] { "user.name", "user.email" }
        .SelectMany(key => Enum.GetValues(typeof(ConfigurationLevel))
                    .Cast <ConfigurationLevel>()
                    .Select(level => _testSetup.Repository.Config.Get <string>(key, level)))
        .Where(c => c != null)
        .ToList();

        try
        {
            configurationValues.ForEach(c => _testSetup.Repository.Config.Unset(c.Key, c.Level));

            var workingCopy = WorkingCopy.Discover(_testSetup.WorkingDirectory);

            Should.Throw <CommandLineExitException>(() => workingCopy.Versionize(new VersionizeOptions()));
            _testPlatformAbstractions.Messages.Last().ShouldStartWith("Warning: Git configuration is missing");
        }
        finally
        {
            configurationValues.ForEach(c => _testSetup.Repository.Config.Set(c.Key, c.Value, c.Level));
        }
    }
Пример #2
0
    public void ShouldPrereleaseToCurrentMaximumPrereleaseVersion()
    {
        TempProject.CreateCsharpProject(_testSetup.WorkingDirectory);
        var workingCopy = WorkingCopy.Discover(_testSetup.WorkingDirectory);

        var fileCommitter = new FileCommitter(_testSetup);

        // Release an initial version
        fileCommitter.CommitChange("chore: initial commit");
        workingCopy.Versionize(new VersionizeOptions());

        // Prerelease as minor alpha
        fileCommitter.CommitChange("feat: feature pre-release");
        workingCopy.Versionize(new VersionizeOptions {
            Prerelease = "alpha"
        });

        // Prerelease as major alpha
        fileCommitter.CommitChange("chore: initial commit\n\nBREAKING CHANGE: This is a breaking change");
        workingCopy.Versionize(new VersionizeOptions {
            Prerelease = "alpha"
        });

        var versionTagNames = VersionTagNames.ToList();

        versionTagNames.ShouldBe(new[] { "v1.0.0", "v1.1.0-alpha.0", "v2.0.0-alpha.0" });
    }
Пример #3
0
        public static void MoveIconFromTempToProject(int tempProjectId, int projectId)
        {
            CloudBlockBlob oldFile = IconsContainer.GetBlockBlobReference(TempProject.GetIconName(tempProjectId));
            CloudBlockBlob newFile = IconsContainer.GetBlockBlobReference(Project.GetIconName(projectId));

            newFile.StartCopy(oldFile);
            oldFile.DeleteIfExists();
        }
Пример #4
0
        public static void RemoveIcon(int projectId, bool temp)
        {
            string fileName = temp ? Project.GetIconName(projectId) : TempProject.GetIconName(projectId);

            CloudBlockBlob cblob = IconsContainer.GetBlockBlobReference(fileName);

            cblob.DeleteIfExists();
        }
Пример #5
0
    public ProgramTests()
    {
        _testSetup = TestSetup.Create();
        TempProject.CreateCsharpProject(_testSetup.WorkingDirectory, "1.1.0");

        _testPlatformAbstractions = new TestPlatformAbstractions();
        CommandLineUI.Platform    = _testPlatformAbstractions;
    }
Пример #6
0
    public void ShouldVerifyThatSemanticVersionTagCanBeParsed()
    {
        TempProject.CreateCsharpProject(Path.Join(_testSetup.WorkingDirectory, "project1"), "2.0.0");
        var commit = CommitAll(_testSetup.Repository);

        var tag = _testSetup.Repository.Tags.Add("vNext", commit, GetAuthorSignature(), "Some annotation message without a version included");

        tag.IsSemanticVersionTag().ShouldBeFalse();
    }
Пример #7
0
        private TempProject CreateEmptyTempProject()
        {
            _db = new ApplicationDbContext();
            TempProject tempProject = new TempProject();

            tempProject.DateTimeCreated = DateTime.Now;
            _db.TempProjects.Add(tempProject);
            _db.SaveChanges();

            return(tempProject);
        }
Пример #8
0
    public void ShouldDetectConsistentVersions()
    {
        var tempDir = TempDir.Create();

        TempProject.CreateCsharpProject(Path.Join(tempDir, "project1"));
        TempProject.CreateCsharpProject(Path.Join(tempDir, "project2"));

        var projects = Projects.Discover(tempDir);

        projects.HasInconsistentVersioning().ShouldBeFalse();
    }
Пример #9
0
    public void ShouldExitIfWorkingCopyIsDirty()
    {
        TempProject.CreateCsharpProject(_testSetup.WorkingDirectory);

        var workingCopy = WorkingCopy.Discover(_testSetup.WorkingDirectory);

        Should.Throw <CommandLineExitException>(() => workingCopy.Versionize(new VersionizeOptions()));

        _testPlatformAbstractions.Messages.ShouldHaveSingleItem();
        _testPlatformAbstractions.Messages[0].ShouldBe($"Repository {_testSetup.WorkingDirectory} is dirty. Please commit your changes.");
    }
Пример #10
0
        public static void UploadIcon(HttpPostedFileBase file, int projectId, bool temp)
        {
            string fileName = temp ? Project.GetIconName(projectId) : TempProject.GetIconName(projectId);

            CloudBlockBlob cblob = IconsContainer.GetBlockBlobReference(fileName);

            cblob.Properties.ContentType = "image/png";


            cblob.UploadFromStream(file.InputStream);
        }
Пример #11
0
    public void ShouldSelectAnnotatedTags()
    {
        TempProject.CreateCsharpProject(Path.Join(_testSetup.WorkingDirectory, "project1"), "2.0.0");
        var commit = CommitAll(_testSetup.Repository);

        _testSetup.Repository.Tags.Add("v2.0.0", commit, GetAuthorSignature(), "Some annotation message without a version included");

        var versionTag = _testSetup.Repository.SelectVersionTag(new Version(2, 0, 0));

        versionTag.ToString().ShouldBe("refs/tags/v2.0.0");
    }
Пример #12
0
    public void ShouldSelectLightweight()
    {
        TempProject.CreateCsharpProject(Path.Join(_testSetup.WorkingDirectory, "project1"), "2.0.0");
        var commit = CommitAll(_testSetup.Repository);

        _testSetup.Repository.Tags.Add("v2.0.0", commit);

        var versionTag = _testSetup.Repository.SelectVersionTag(new Version(2, 0, 0));

        versionTag.ToString().ShouldBe("refs/tags/v2.0.0");
    }
Пример #13
0
    public void ShouldDiscoverAllProjects()
    {
        var tempDir = TempDir.Create();

        TempProject.CreateCsharpProject(Path.Join(tempDir, "project1"));
        TempProject.CreateCsharpProject(Path.Join(tempDir, "project2"));
        TempProject.CreateVBProject(Path.Join(tempDir, "project3"));

        var projects = Projects.Discover(tempDir);

        projects.GetProjectFiles().Count().ShouldBe(3);
    }
Пример #14
0
    public void ShouldExitIfReleaseAsSpecifiedVersionIsInvalid()
    {
        TempProject.CreateCsharpProject(Path.Join(_testSetup.WorkingDirectory, "project1"), "1.1.0");

        CommitAll(_testSetup.Repository);

        var workingCopy = WorkingCopy.Discover(_testSetup.WorkingDirectory);

        Should.Throw <CommandLineExitException>(() => workingCopy.Versionize(new VersionizeOptions {
            ReleaseAs = "kanguru"
        }));
    }
Пример #15
0
    public void ShouldExitIfProjectsUseInconsistentNaming()
    {
        TempProject.CreateCsharpProject(Path.Join(_testSetup.WorkingDirectory, "project1"), "1.1.0");
        TempProject.CreateCsharpProject(Path.Join(_testSetup.WorkingDirectory, "project2"), "2.0.0");

        CommitAll(_testSetup.Repository);

        var workingCopy = WorkingCopy.Discover(_testSetup.WorkingDirectory);

        Should.Throw <CommandLineExitException>(() => workingCopy.Versionize(new VersionizeOptions()));
        _testPlatformAbstractions.Messages[0].ShouldBe($"Some projects in {_testSetup.WorkingDirectory} have an inconsistent <Version> defined in their csproj file. Please update all versions to be consistent or remove the <Version> elements from projects that should not be versioned");
    }
Пример #16
0
    public void ShouldReadConfigurationFromConfigFile()
    {
        TempProject.CreateCsharpProject(_testSetup.WorkingDirectory);

        File.WriteAllText(Path.Join(_testSetup.WorkingDirectory, "hello.txt"), "First commit");
        File.WriteAllText(Path.Join(_testSetup.WorkingDirectory, ".versionize"), @"{ ""skipDirty"": true }");

        var exitCode = Program.Main(new[] { "-w", _testSetup.WorkingDirectory });

        exitCode.ShouldBe(0);
        File.Exists(Path.Join(_testSetup.WorkingDirectory, "CHANGELOG.md")).ShouldBeTrue();
        _testSetup.Repository.Commits.Count().ShouldBe(1);
    }
Пример #17
0
    public void ShouldReleaseAsSpecifiedVersion()
    {
        TempProject.CreateCsharpProject(Path.Join(_testSetup.WorkingDirectory, "project1"), "1.1.0");

        CommitAll(_testSetup.Repository);

        var workingCopy = WorkingCopy.Discover(_testSetup.WorkingDirectory);

        workingCopy.Versionize(new VersionizeOptions {
            ReleaseAs = "2.0.0"
        });

        _testSetup.Repository.Tags.Select(t => t.FriendlyName).ShouldBe(new[] { "v2.0.0" });
    }
Пример #18
0
    public void InspectShouldExitIfNoProjectWithVersionIsFound()
    {
        TempProject.CreateFromProjectContents(_testSetup.WorkingDirectory, "csproj", @"<Project Sdk=""Microsoft.NET.Sdk"">
    <PropertyGroup>
    </PropertyGroup>
</Project>");

        var workingCopy = WorkingCopy.Discover(_testSetup.WorkingDirectory);

        Should.Throw <CommandLineExitException>(() => workingCopy.Inspect());

        _testPlatformAbstractions.Messages.ShouldHaveSingleItem();
        _testPlatformAbstractions.Messages[0].ShouldEndWith(" that have a <Version> defined in their csproj file.");
    }
Пример #19
0
    public void ShouldWriteAllVersionsToProjectFiles()
    {
        var tempDir = TempDir.Create();

        TempProject.CreateCsharpProject(Path.Join(tempDir, "project1"), "1.1.1");
        TempProject.CreateCsharpProject(Path.Join(tempDir, "project2"), "1.1.1");

        var projects = Projects.Discover(tempDir);

        projects.WriteVersion(new SemanticVersion(2, 0, 0));

        var updated = Projects.Discover(tempDir);

        updated.Version.ShouldBe(SemanticVersion.Parse("2.0.0"));
    }
Пример #20
0
    public void ShouldSupportFsharpProjects()
    {
        TempProject.CreateFsharpProject(_testSetup.WorkingDirectory);

        var workingCopy = WorkingCopy.Discover(_testSetup.WorkingDirectory);

        var fileCommitter = new FileCommitter(_testSetup);

        // Release an initial version
        fileCommitter.CommitChange("chore: initial commit");
        workingCopy.Versionize(new VersionizeOptions());

        var versionTagNames = VersionTagNames.ToList();

        versionTagNames.ShouldBe(new[] { "v1.0.0" });
    }
        public void AddNewFiles()
        {
            var project = (FolderBasedProject)CurrentNode.GetParentDataItem(typeof(FolderBasedProject), true);

            var p = new TempProject(project);

            IdeApp.ProjectOperations.CreateProjectFile(p, ((SystemFolder)CurrentNode.DataItem).Path);

            if (p.Files.FirstOrDefault() != null)
            {
                project.OnFileAdded(p.Files.FirstOrDefault().FilePath);
                Tree.BuilderContext.GetTreeBuilder(CurrentNode).UpdateChildren();
            }

            p.Dispose();
        }
Пример #22
0
    public void ShouldExitForInvalidReleaseAsReleases()
    {
        TempProject.CreateCsharpProject(_testSetup.WorkingDirectory);
        var workingCopy = WorkingCopy.Discover(_testSetup.WorkingDirectory);

        var fileCommitter = new FileCommitter(_testSetup);

        // Release an initial version
        fileCommitter.CommitChange("chore: initial commit");
        workingCopy.Versionize(new VersionizeOptions());

        // Release as lower than current version
        fileCommitter.CommitChange("feat: some feature");
        Should.Throw <CommandLineExitException>(() => workingCopy.Versionize(new VersionizeOptions {
            ReleaseAs = "0.9.0"
        }));
    }
Пример #23
0
    public void ShouldEmitAUsefulErrorMessageForDuplicateTags()
    {
        TempProject.CreateCsharpProject(Path.Join(_testSetup.WorkingDirectory, "project1"), "1.1.0");

        CommitAll(_testSetup.Repository);

        var workingCopy = WorkingCopy.Discover(_testSetup.WorkingDirectory);

        workingCopy.Versionize(new VersionizeOptions {
            ReleaseAs = "2.0.0"
        });

        Should.Throw <CommandLineExitException>(() => workingCopy.Versionize(new VersionizeOptions {
            ReleaseAs = "2.0.0"
        }));

        _testPlatformAbstractions.Messages.Last().ShouldBe("Version 2.0.0 already exists. Please use a different version.");
    }
Пример #24
0
    public void ShouldExitWithNonZeroExitCodeForInsignificantCommits()
    {
        TempProject.CreateCsharpProject(_testSetup.WorkingDirectory);

        var workingCopy   = WorkingCopy.Discover(_testSetup.WorkingDirectory);
        var fileCommitter = new FileCommitter(_testSetup);

        // Release an initial version first
        fileCommitter.CommitChange("chore: initial commit");
        workingCopy.Versionize(new VersionizeOptions());

        // Insignificant change release
        fileCommitter.CommitChange("chore: insignificant change");
        Should.Throw <CommandLineExitException>(() => workingCopy.Versionize(new VersionizeOptions {
            ExitInsignificantCommits = true
        }));

        _testPlatformAbstractions.Messages.Last().ShouldStartWith("Version was not affected by commits since last release");
    }
        public object AddProject(string name, string libraryName, Guid? guid, string filename, IEnumerable<string> languages)
        {
            languages = languages.EmptyIfNull()
                .ToList();

            var proj = new TempProject(name, libraryName, guid, filename, languages);

            TempProject result;
            if (!projs.TryGetValue(proj, out result))
            {
                projs.Add(proj, proj);
                result = proj;
            }

            result.Names.Add(name);
            result.LibraryNames.Add(name);
            result.Languages.AddRange(languages);

            return result;
        }
Пример #26
0
    public void InspectShouldExitForProjectsInconsistentVersion()
    {
        TempProject.CreateFromProjectContents(_testSetup.WorkingDirectory + "/project1", "csproj", @"<Project Sdk=""Microsoft.NET.Sdk"">
    <PropertyGroup>
        <Version>1.0.0</Version>
    </PropertyGroup>
</Project>");

        TempProject.CreateFromProjectContents(_testSetup.WorkingDirectory + "/project2", "csproj", @"<Project Sdk=""Microsoft.NET.Sdk"">
    <PropertyGroup>
        <Version>2.0.0</Version>
    </PropertyGroup>
</Project>");

        var workingCopy = WorkingCopy.Discover(_testSetup.WorkingDirectory);

        Should.Throw <CommandLineExitException>(() => workingCopy.Inspect());

        _testPlatformAbstractions.Messages.ShouldHaveSingleItem();
        _testPlatformAbstractions.Messages[0].ShouldContain("have an inconsistent <Version> defined in their csproj file");
    }
Пример #27
0
    public void ShouldDetectVersionInNamespacedXmlProjects()
    {
        var tempDir = TempDir.Create();
        var version = SemanticVersion.Parse("1.0.0");

        // Create .net project
        var projectFileContents =
            $@"<Project ToolsVersion=""12.0"" DefaultTargets=""Build"" xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
   <PropertyGroup>
        ...
        <Version>{version}</Version>
        ...
     </PropertyGroup>
</Project>";

        TempProject.CreateFromProjectContents(tempDir, "csproj", projectFileContents);

        var projects = Projects.Discover(tempDir);

        projects.Version.ShouldBe(version);
    }
Пример #28
0
    public void ShouldPerformADryRun()
    {
        TempProject.CreateCsharpProject(_testSetup.WorkingDirectory);

        File.WriteAllText(Path.Join(_testSetup.WorkingDirectory, "hello.txt"), "First commit");
        CommitAll(_testSetup.Repository, "feat: first commit");

        var workingCopy = WorkingCopy.Discover(_testSetup.WorkingDirectory);

        workingCopy.Versionize(new VersionizeOptions {
            DryRun = true, SkipDirty = true
        });

        _testPlatformAbstractions.Messages.Count.ShouldBe(7);
        _testPlatformAbstractions.Messages[0].ShouldBe("Discovered 1 versionable projects");
        _testPlatformAbstractions.Messages[3].ShouldBe("\n---");
        _testPlatformAbstractions.Messages[4].ShouldContain("* first commit");
        _testPlatformAbstractions.Messages[5].ShouldBe("---\n");
        var wasChangelogWritten = File.Exists(Path.Join(_testSetup.WorkingDirectory, "CHANGELOG.md"));

        Assert.False(wasChangelogWritten);
    }
Пример #29
0
    public void ShouldIgnoreInsignificantCommits()
    {
        TempProject.CreateCsharpProject(_testSetup.WorkingDirectory);

        var workingFilePath = Path.Join(_testSetup.WorkingDirectory, "hello.txt");

        // Create and commit a test file
        File.WriteAllText(workingFilePath, "First line of text");
        CommitAll(_testSetup.Repository);

        // Run versionize
        var workingCopy = WorkingCopy.Discover(_testSetup.WorkingDirectory);

        workingCopy.Versionize(new VersionizeOptions());

        // Add insignificant change
        File.AppendAllText(workingFilePath, "This is another line of text");
        CommitAll(_testSetup.Repository, "chore: Added line of text");

        // Get last commit
        var lastCommit = _testSetup.Repository.Head.Tip;

        // Run versionize, ignoring insignificant commits
        try
        {
            workingCopy.Versionize(new VersionizeOptions {
                IgnoreInsignificantCommits = true
            });

            throw new InvalidOperationException("Expected to throw in Versionize call");
        }
        catch (CommandLineExitException ex)
        {
            ex.ExitCode.ShouldBe(0);
        }

        lastCommit.ShouldBe(_testSetup.Repository.Head.Tip);
    }
Пример #30
0
    public void ShouldAddSuffixToReleaseCommitMessage()
    {
        TempProject.CreateCsharpProject(_testSetup.WorkingDirectory);

        var workingFilePath = Path.Join(_testSetup.WorkingDirectory, "hello.txt");

        // Create and commit a test file
        File.WriteAllText(workingFilePath, "First line of text");
        CommitAll(_testSetup.Repository);

        // Run versionize
        var          workingCopy = WorkingCopy.Discover(_testSetup.WorkingDirectory);
        const string suffix      = "[skip ci]";

        workingCopy.Versionize(new VersionizeOptions {
            CommitSuffix = suffix
        });

        // Get last commit
        var lastCommit = _testSetup.Repository.Head.Tip;

        lastCommit.Message.ShouldContain(suffix);
    }
Пример #31
0
    public void ShouldExitForInvalidPrereleaseSequences()
    {
        TempProject.CreateCsharpProject(_testSetup.WorkingDirectory);
        var workingCopy = WorkingCopy.Discover(_testSetup.WorkingDirectory);

        var fileCommitter = new FileCommitter(_testSetup);

        // Release an initial version
        fileCommitter.CommitChange("chore: initial commit");
        workingCopy.Versionize(new VersionizeOptions());

        // Prerelease a minor beta
        fileCommitter.CommitChange("feat: feature pre-release");
        workingCopy.Versionize(new VersionizeOptions {
            Prerelease = "beta"
        });

        // Try Prerelease a minor alpha
        fileCommitter.CommitChange("feat: feature pre-release");
        Should.Throw <CommandLineExitException>(() => workingCopy.Versionize(new VersionizeOptions {
            Prerelease = "alpha"
        }));
    }
            public TempReference(TempProject source, Dependency.Types type, string referenceName, string referenceLibraryName, Guid? referenceGuid,
                string referenceFilename, Location referenceLocation, IEnumerable<string> referenceLanguages)
            {
                Argument.ThrowIfNull(source);
                Argument.ThrowIfAllNull(referenceName, referenceLibraryName);
                Argument.ThrowIfNull(referenceLocation);

                Source = source;
                Type = type;
                ReferenceName = referenceName;
                ReferenceLibraryName = referenceLibraryName;
                ReferenceGuid = referenceGuid;
                ReferenceFilename = referenceFilename;
                ReferenceLocation = referenceLocation;
                ReferenceLanguages = referenceLanguages;
            }
 private bool Equals(TempProject other)
 {
     return string.Equals(Name, other.Name, StringComparison.CurrentCultureIgnoreCase)
            && string.Equals(LibraryName, other.LibraryName, StringComparison.CurrentCultureIgnoreCase) && Guid.Equals(other.Guid)
            && string.Equals(Filename, other.Filename, StringComparison.CurrentCultureIgnoreCase);
 }