public void GetAtomicValues_WhenGivenReleaseDownloadUrl_ReturnsCorrectValues(ReleaseDownloadUrl releaseDownloadUrl, String expectedModName, String expectedReleaseToken) { var atomicValues = releaseDownloadUrl.GetAtomicValues(); Assert.Equal(expectedModName, atomicValues.ElementAt(0)); Assert.Equal(expectedReleaseToken, atomicValues.ElementAt(1)); }
private static ReleaseDownloadUrlTestDataPoint CreateTestDataPointFromProperties(String ModName, String ReleaseToken) { String creationString = $"/download/{ModName}/{ReleaseToken}"; return(new ReleaseDownloadUrlTestDataPoint { CreationString = creationString, ModName = ModName, ReleaseToken = ReleaseToken, ObjectFromFor = ReleaseDownloadUrl.For(creationString) }); }
public void TryAddRelease_WhenNewReleaseDownloadUrlModNameDoesNotMatch_ThrowsInvalidOperationException() { ReleaseDownloadUrl releaseDownloadUrl = ReleaseDownloadUrl.For($"/download/NotAMatch/1234567890abcd1234567890"); var exception = Assert.Throws <InvalidOperationException>(() => ModTestData.TestMod.TryAddRelease(new Release( ReleasedAt: ReleaseTestData.TestModGammaReleaseDate, Sha1String: ReleaseTestData.TestModGammaReleaseSha1String, ReleaseDownloadUrl: releaseDownloadUrl, ReleaseFileName: ReleaseFileNameTestData.TestModGammaReleaseFileName, ModVersion: ModVersionTestData.TestModGammaReleaseVersion, FactorioVersion: FactorioVersionTestData.ZeroPointSeventeen, Dependencies: DependencyTestData.TestModGammaReleaseDependencies))); Assert.Equal("The specified download URL does not properly reference this mod.", exception.Message); }
public void ModConstructor_WhenReleasesContainsReleasFileNameWithNonMatchingModName_ThrowsArgumentException() { ReleaseDownloadUrl releaseDownloadUrl = ReleaseDownloadUrl.For($"/download/NotAMatch/{ReleaseDownloadUrlTestData.GenerateValidRandomizedReleaseDownloadUrlToken()}"); Release testRelease = new Release( ReleasedAt: ReleaseTestData.TestModAlphaReleaseDate, Sha1String: ReleaseTestData.TestModAlphaReleaseSha1String, ReleaseDownloadUrl: releaseDownloadUrl, ReleaseFileName: ReleaseFileNameTestData.TestModAlphaReleaseFileName, ModVersion: ModVersionTestData.TestModAlphaReleaseVersion, FactorioVersion: FactorioVersionTestData.ZeroPointSeventeen, Dependencies: DependencyTestData.TestModAlphaReleaseDependencies ); var exception = Assert.Throws <ArgumentException>(() => new Mod( Name: ModTestData.TestModTestDataPoint.Name, Titles: ModTitleTestData.TestModTitles, Releases: new List <Release> { testRelease, ReleaseTestData.TestModBetaRelease })); Assert.Equal($"The mod name in the release download URL \"{releaseDownloadUrl}\" does not match the specified mod name \"{ModTestData.TestModTestDataPoint.Name}\". (Parameter 'Releases')", exception.Message); }
public Release(DateTime ReleasedAt, String Sha1String, ReleaseDownloadUrl ReleaseDownloadUrl, ReleaseFileName ReleaseFileName, ModVersion ModVersion, FactorioVersion FactorioVersion, List <Dependency> Dependencies) { DateTimeValidator.ValidateRequiredDateTimeBeforePresent(ReleasedAt, nameof(ReleasedAt)); ObjectValidator.ValidateRequiredObject(Sha1String, nameof(Sha1String)); ObjectValidator.ValidateRequiredObject(ReleaseDownloadUrl, nameof(ReleaseDownloadUrl)); ObjectValidator.ValidateRequiredObject(ReleaseFileName, nameof(ReleaseFileName)); ObjectValidator.ValidateRequiredObject(ModVersion, nameof(ModVersion)); ObjectValidator.ValidateRequiredObject(FactorioVersion, nameof(FactorioVersion)); ListValidator.ValidateRequiredListNotEmpty(Dependencies, nameof(Dependencies)); Regex sha1CaptureRegex = new Regex(Release.Sha1CapturePattern); Match match = sha1CaptureRegex.Match(Sha1String); if (!match.Success) { throw new ArgumentException($"Unable to parse \"{Sha1String}\" to a valid SHA-1 hash due to formatting.", "Sha1String"); } String sha1 = match.Groups[1].Value; if (sha1.Length != Sha1Length) { throw new ArgumentException($"Unable to parse \"{Sha1String}\" to a valid SHA-1 hash due to length. The SHA-1 hash must have a length of exactly {Release.Sha1Length} characters.", "Sha1String"); } if (ModVersion != ReleaseFileName.ModVersion) { throw new ArgumentException("The specified release file name version does not match the specified release version.", "ReleaseFileName"); } this.ReleasedAt = ReleasedAt; this.ReleaseDownloadUrl = new ReleaseDownloadUrl(ReleaseDownloadUrl); this.ReleaseFileName = new ReleaseFileName(ReleaseFileName); this.Sha1 = sha1; this.ModVersion = new ModVersion(ModVersion); this.FactorioVersion = new FactorioVersion(FactorioVersion); // TODO: We may want to write an .AddDependency() method that validates that the dependency we're adding isn't for the release/mod itself. That would generate a circular dependency. this.Dependencies = Dependencies.ConvertAll(dependency => new Dependency(dependency)); }
private static ReleaseTestDataPoint GenerateValidRandomizedTestDataPointWithModName(String modName) { var random = new Random(); List <Dependency> randomizedDependencies = new List <Dependency>(); for (int i = 0; i < random.Next(1, 6); i++) { randomizedDependencies.Add(DependencyTestData.GenerateValidRandomizedDependency()); } String releaseFileNameString = ReleaseFileNameTestData.GenerateValidRandomizedReleaseFileNameStringWithModName(modName); Int32 underscoreIndex = releaseFileNameString.LastIndexOf("_"); String modVersionString = releaseFileNameString.Substring(underscoreIndex + 1, releaseFileNameString.LastIndexOf(".zip") - (underscoreIndex + 1)); return(CreateTestDataPointFromProperties( ReleasedAt: ReleaseTestData.GenerateValidRandomizedReleasedAt(), Sha1String: ReleaseTestData.GenerateValidRandomizedSha1String(), ReleaseDownloadUrl: ReleaseDownloadUrl.For(ReleaseDownloadUrlTestData.GenerateValidRandomizedReleaseDownloadUrlStringWithModName(modName)), ReleaseFileName: ReleaseFileName.For(releaseFileNameString), ModVersion: ModVersion.For(modVersionString), FactorioVersion: FactorioVersionTestData.GenerateValidRandomizedFactorioVersion(), Dependencies: randomizedDependencies )); }
private static ReleaseTestDataPoint CreateTestDataPointFromProperties(DateTime ReleasedAt, String Sha1String, ReleaseDownloadUrl ReleaseDownloadUrl, ReleaseFileName ReleaseFileName, ModVersion ModVersion, FactorioVersion FactorioVersion, List <Dependency> Dependencies) { return(new ReleaseTestDataPoint { ReleasedAt = ReleasedAt, Sha1 = Sha1String, ReleaseDownloadUrl = ReleaseDownloadUrl, ReleaseFileName = ReleaseFileName, ModVersion = ModVersion, FactorioVersion = FactorioVersion, Dependencies = Dependencies, ObjectFromConstructor = new Release(ReleasedAt, Sha1String, ReleaseDownloadUrl, ReleaseFileName, ModVersion, FactorioVersion, Dependencies) }); }
public void For_WhenGivenInvalidFormat_ThrowsArgumentException(String releaseDownloadUrlString) { var exception = Assert.Throws <ArgumentException>(() => ReleaseDownloadUrl.For(releaseDownloadUrlString)); Assert.Equal($"Unable to parse \"{releaseDownloadUrlString}\" to a valid ReleaseDownloadUrl due to formatting. (Parameter 'releaseDownloadUrlString')", exception.Message); }
public void For_WhenGivenEmptyStringOrWhitespace_ThrowsArgumentException(String releaseDownloadUrlString) { var exception = Assert.Throws <ArgumentException>(() => ReleaseDownloadUrl.For(releaseDownloadUrlString)); Assert.Equal($"releaseDownloadUrlString may not be empty. (Parameter 'releaseDownloadUrlString')", exception.Message); }
public void For_WhenGivenNull_ThrowsArgumentNullException() { var exception = Assert.Throws <ArgumentNullException>(() => ReleaseDownloadUrl.For(null)); Assert.Equal("releaseDownloadUrlString is required. (Parameter 'releaseDownloadUrlString')", exception.Message); }
public void For_WhenGivenValidString_ReturnsCorrectReleaseToken(String releaseDownloadUrlString, String releaseToken) { var releaseDownloadUrl = ReleaseDownloadUrl.For(releaseDownloadUrlString); Assert.Equal(releaseToken, releaseDownloadUrl.ReleaseToken); }
public void For_WhenGivenValidString_ReturnsCorrectModName(String releaseDownloadUrlString, String modName) { var releaseDownloadUrl = ReleaseDownloadUrl.For(releaseDownloadUrlString); Assert.Equal(modName, releaseDownloadUrl.ModName); }
public void Equals_WhenProvidedNotEqualVersion_ReturnsFalse(ReleaseDownloadUrl left, ReleaseDownloadUrl right) { Assert.False(left.Equals((Object)right)); }
public static ReleaseDownloadUrl GenerateValidRandomizedReleaseDownloadUrl() { return(ReleaseDownloadUrl.For(GenerateValidRandomizedReleaseDownloadUrlString())); }
public void ToReleaseDownloadUrlOperator_WhenGivenString_ReturnsCorrectReleaseDownloadUrl(ReleaseDownloadUrl releaseDownloadUrl, String releaseDownloadUrlString) { ReleaseDownloadUrl newReleaseDownloadUrl = (ReleaseDownloadUrl)releaseDownloadUrlString; Assert.Equal(releaseDownloadUrl, newReleaseDownloadUrl); }
public void NotEqualsOperator_WhenGivenMatchingReleaseDownloadUrls_ReturnsFalse(ReleaseDownloadUrl left, ReleaseDownloadUrl right) { Assert.False(left != right); }
public void EqualsOperator_WhenGivenMatchingReleaseDownloadUrls_ReturnsTrue(ReleaseDownloadUrl left, ReleaseDownloadUrl right) { Assert.True(left == right); }
public void GetHashCode_NonMatchingReleaseDownloadUrls_ReturnDifferentHashCode(ReleaseDownloadUrl left, ReleaseDownloadUrl right) { Assert.NotEqual(left.GetHashCode(), right.GetHashCode()); }
public void GetHashCode_MatchingReleaseDownloadUrls_ReturnSameHashCode(ReleaseDownloadUrl left, ReleaseDownloadUrl right) { Assert.Equal(left.GetHashCode(), right.GetHashCode()); }
public void CopyConstructor_WhenValidParameters_ReturnsCorrectModName(ReleaseDownloadUrl releaseDownloadUrl, String expectedModName) { var testReleaseDownloadUrl = new ReleaseDownloadUrl(releaseDownloadUrl); Assert.Equal(expectedModName, testReleaseDownloadUrl.ModName); }
public void ToStringOperator_WhenGivenReleaseDownloadUrl_ReturnsCorrectString(ReleaseDownloadUrl releaseDownloadUrl, String expected) { String releaseDownloadUrlString = releaseDownloadUrl; Assert.Equal(expected, releaseDownloadUrlString); }
public void ToString_WhenGivenReleaseDownloadUrl_ReturnsCorrectString(ReleaseDownloadUrl releaseDownloadUrl, String expected) { Assert.Equal(expected, releaseDownloadUrl.ToString()); }
public void Equals_WhenProvidedEqualReleaseDownloadUrls_ReturnsTrue(ReleaseDownloadUrl left, ReleaseDownloadUrl right) { Assert.True(left.Equals((Object)right)); }
public void ReleaseConstructor_WhenValidParameters_ReturnsCorrectReleasedAt(DateTime releasedAt, String sha1String, ReleaseDownloadUrl releaseDownloadUrl, ReleaseFileName releaseFileName, ModVersion modVersion, FactorioVersion factorioVersion, List <Dependency> dependencies) { var testRelease = new Release(releasedAt, sha1String, releaseDownloadUrl, releaseFileName, modVersion, factorioVersion, dependencies); Assert.Equal(releasedAt, testRelease.ReleasedAt); }
public void CopyConstructor_WhenValidParameters_ReturnsCorrectReleaseToken(ReleaseDownloadUrl releaseDownloadUrl, String expectedReleaseToken) { var testReleaseDownloadUrl = new ReleaseDownloadUrl(releaseDownloadUrl); Assert.Equal(expectedReleaseToken, testReleaseDownloadUrl.ReleaseToken); }
public void CopyConstructor_WhenValidParameters_ReturnsCorrectReleaseDownloadUrl(Release release, ReleaseDownloadUrl expectedReleaseDownloadUrl) { var testRelease = new Release(release); Assert.Equal(expectedReleaseDownloadUrl, testRelease.ReleaseDownloadUrl); }
public void For_WhenGivenReleaseTokenTooLong_ThrowsArgumentException(String releaseDownloadUrlString) { var exception = Assert.Throws <ArgumentException>(() => ReleaseDownloadUrl.For(releaseDownloadUrlString)); Assert.Equal($"The release token specified exceeds the maximum length of {ReleaseDownloadUrl.ReleaseTokenLength}. (Parameter 'releaseDownloadUrlString')", exception.Message); }