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)); } }
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" }); }
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(); }
public static void RemoveIcon(int projectId, bool temp) { string fileName = temp ? Project.GetIconName(projectId) : TempProject.GetIconName(projectId); CloudBlockBlob cblob = IconsContainer.GetBlockBlobReference(fileName); cblob.DeleteIfExists(); }
public ProgramTests() { _testSetup = TestSetup.Create(); TempProject.CreateCsharpProject(_testSetup.WorkingDirectory, "1.1.0"); _testPlatformAbstractions = new TestPlatformAbstractions(); CommandLineUI.Platform = _testPlatformAbstractions; }
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(); }
private TempProject CreateEmptyTempProject() { _db = new ApplicationDbContext(); TempProject tempProject = new TempProject(); tempProject.DateTimeCreated = DateTime.Now; _db.TempProjects.Add(tempProject); _db.SaveChanges(); return(tempProject); }
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(); }
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."); }
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); }
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"); }
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"); }
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); }
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" })); }
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"); }
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); }
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" }); }
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."); }
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")); }
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(); }
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" })); }
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."); }
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; }
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"); }
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); }
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); }
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); }
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); }
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); }