Use enum for checks result

This commit is contained in:
Franco Meloni 2019-12-23 22:20:57 +00:00
parent d708a72925
commit a7792c8f14
8 changed files with 261 additions and 153 deletions

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>

View File

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SchemeUserState</key>
<dict>
<key>Rocket.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>
<dict>
<key>RocketLib</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>RocketTests</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>rocket</key>
<dict>
<key>primary</key>
<true/>
</dict>
</dict>
</dict>
</plist>

View File

@ -39,11 +39,18 @@ if let rocketYamlPath = RocketFileFinder.rocketFilePath() {
}
let checks = ChecksParser.parsePreReleaseChecks(fromDictionary: dictionary)
let failedChecks = checks.filter { !$0.check() }
let failedChecks = checks.compactMap { check -> String? in
switch check.check() {
case .success:
return nil
case let .failure(error):
return error
}
}
guard failedChecks.isEmpty else {
logger.logError("Pre release checks failed",
failedChecks.map { $0.errorMessage }.joined(separator: "\n"),
failedChecks.joined(separator: "\n"),
separator: "\n")
exit(1)
}

View File

@ -1,7 +1,10 @@
public protocol Check {
init()
var errorMessage: String { get }
func check() -> Bool
func check() -> CheckResult
}
public enum CheckResult: Equatable {
case success
case failure(String)
}

View File

@ -1,11 +1,9 @@
import Foundation
struct CleanGitStatusCheck: Check {
let launcher: ScriptLaunching
private static let errorMessage: String = "Your git status contains not committed code, please remove it or commit it"
var errorMessage: String {
return "Your git status contains not committed code, please remove it or commit it"
}
let launcher: ScriptLaunching
init() {
self.init(launcher: ScriptLauncher())
@ -15,9 +13,9 @@ struct CleanGitStatusCheck: Check {
self.launcher = launcher
}
func check() -> Bool {
func check() -> CheckResult {
let result = try? launcher.launchScript(withContent: "git diff --name-only", version: nil)
return result?.isEmpty ?? true
return result?.isEmpty == true ? .success : .failure(CleanGitStatusCheck.errorMessage)
}
}

View File

@ -4,25 +4,25 @@ import TestSpy
import XCTest
final class CleanGitStatusCheckTests: XCTestCase {
func testReturnsTrueWhenThereIsAreNoModifiedFiles() {
func testReturnsSuccessWhenThereIsAreNoModifiedFiles() {
let scriptLauncher = SpyScriptLauncher()
scriptLauncher.result = ""
let check = CleanGitStatusCheck(launcher: scriptLauncher)
let result = check.check()
expect(result).to(beTrue())
expect(result) == .success
expect(scriptLauncher).to(haveReceived(.launchScript(content: "git diff --name-only", version: nil)))
}
func testReturnsFalseWhenThereIsAreModifiedFiles() {
func testReturnsFailureWhenThereIsAreModifiedFiles() {
let scriptLauncher = SpyScriptLauncher()
scriptLauncher.result = "/Franco/Test.swift"
let check = CleanGitStatusCheck(launcher: scriptLauncher)
let result = check.check()
expect(result).to(beFalse())
expect(result) == .failure("Your git status contains not committed code, please remove it or commit it")
expect(scriptLauncher).to(haveReceived(.launchScript(content: "git diff --name-only", version: nil)))
}
}

View File

@ -1,7 +1,11 @@
#if !canImport(ObjectiveC)
import XCTest
extension BranchExecutorTests {
static let __allTests = [
// DO NOT MODIFY: This is autogenerated, use:
// `swift test --generate-linuxmain`
// to regenerate.
static let __allTests__BranchExecutorTests = [
("testItSendsEmptyScriptIfTheDictionaryIsNil", testItSendsEmptyScriptIfTheDictionaryIsNil),
("testItSendsTheCorrectBranchNameToScriptLauncher", testItSendsTheCorrectBranchNameToScriptLauncher),
("testItUsesAWorkaroundToGenerateTheTestsOnLinux", testItUsesAWorkaroundToGenerateTheTestsOnLinux),
@ -9,21 +13,30 @@ extension BranchExecutorTests {
}
extension ChecksParserTests {
static let __allTests = [
// DO NOT MODIFY: This is autogenerated, use:
// `swift test --generate-linuxmain`
// to regenerate.
static let __allTests__ChecksParserTests = [
("testItIgnoresTheInvalidSteps", testItIgnoresTheInvalidSteps),
("testItParsesCorrectlyAValidDictionary", testItParsesCorrectlyAValidDictionary),
]
}
extension CleanGitStatusCheckTests {
static let __allTests = [
("testReturnsFalseWhenThereIsAreModifiedFiles", testReturnsFalseWhenThereIsAreModifiedFiles),
("testReturnsTrueWhenThereIsAreNoModifiedFiles", testReturnsTrueWhenThereIsAreNoModifiedFiles),
// DO NOT MODIFY: This is autogenerated, use:
// `swift test --generate-linuxmain`
// to regenerate.
static let __allTests__CleanGitStatusCheckTests = [
("testReturnsFailureWhenThereIsAreModifiedFiles", testReturnsFailureWhenThereIsAreModifiedFiles),
("testReturnsSuccessWhenThereIsAreNoModifiedFiles", testReturnsSuccessWhenThereIsAreNoModifiedFiles),
]
}
extension CommitExecutorTests {
static let __allTests = [
// DO NOT MODIFY: This is autogenerated, use:
// `swift test --generate-linuxmain`
// to regenerate.
static let __allTests__CommitExecutorTests = [
("testItSetsTheParameterIfTheGitHookFolderExists", testItSetsTheParameterIfTheGitHookFolderExists),
("testItUsesAWorkaroundToGenerateTheTestsOnLinux", testItUsesAWorkaroundToGenerateTheTestsOnLinux),
("testItUsesTheParametersIfAny", testItUsesTheParametersIfAny),
@ -32,14 +45,20 @@ extension CommitExecutorTests {
}
extension CurrentVersionProviderTests {
static let __allTests = [
// DO NOT MODIFY: This is autogenerated, use:
// `swift test --generate-linuxmain`
// to regenerate.
static let __allTests__CurrentVersionProviderTests = [
("testItReturnsTheCorrectTag", testItReturnsTheCorrectTag),
("testItReturnsTheCorrectVersionIfThereAreNoTags", testItReturnsTheCorrectVersionIfThereAreNoTags),
]
}
extension DefaultExecutorStepDescriptionTests {
static let __allTests = [
// DO NOT MODIFY: This is autogenerated, use:
// `swift test --generate-linuxmain`
// to regenerate.
static let __allTests__DefaultExecutorStepDescriptionTests = [
("testItShowsTheCorrectEndDescriptionWhenThereAreNoParameters", testItShowsTheCorrectEndDescriptionWhenThereAreNoParameters),
("testItShowsTheCorrectEndDescriptionWhenThereAreParameters", testItShowsTheCorrectEndDescriptionWhenThereAreParameters),
("testItShowsTheCorrectStartDescriptionWhenThereAreNoParameters", testItShowsTheCorrectStartDescriptionWhenThereAreNoParameters),
@ -48,14 +67,20 @@ extension DefaultExecutorStepDescriptionTests {
}
extension DevDependenciesModifierTests {
static let __allTests = [
// DO NOT MODIFY: This is autogenerated, use:
// `swift test --generate-linuxmain`
// to regenerate.
static let __allTests__DevDependenciesModifierTests = [
("testItHidesTheDependenciesCorrectly", testItHidesTheDependenciesCorrectly),
("testItShowsTheDependenciesCorrectly", testItShowsTheDependenciesCorrectly),
]
}
extension GitAddExecutorTests {
static let __allTests = [
// DO NOT MODIFY: This is autogenerated, use:
// `swift test --generate-linuxmain`
// to regenerate.
static let __allTests__GitAddExecutorTests = [
("testItDoesntSendAnyCommandToTheScriptLauncherIfTheDictionaryIsNil", testItDoesntSendAnyCommandToTheScriptLauncherIfTheDictionaryIsNil),
("testItSendsTheCorrectPathsToTheScriptLauncher", testItSendsTheCorrectPathsToTheScriptLauncher),
("testItUsesAWorkaroundToGenerateTheTestsOnLinux", testItUsesAWorkaroundToGenerateTheTestsOnLinux),
@ -63,20 +88,29 @@ extension GitAddExecutorTests {
}
extension HideDevDependenciesExecutorTests {
static let __allTests = [
// DO NOT MODIFY: This is autogenerated, use:
// `swift test --generate-linuxmain`
// to regenerate.
static let __allTests__HideDevDependenciesExecutorTests = [
("testItSendsTheHideDependenciesCallToTheDevDependenciesModifier", testItSendsTheHideDependenciesCallToTheDevDependenciesModifier),
("testItUsesTheDefaultPackagePath", testItUsesTheDefaultPackagePath),
]
}
extension NewVersionProviderTests {
static let __allTests = [
// DO NOT MODIFY: This is autogenerated, use:
// `swift test --generate-linuxmain`
// to regenerate.
static let __allTests__NewVersionProviderTests = [
("testReturnsTheCorrectNewVersion", testReturnsTheCorrectNewVersion),
]
}
extension PushExecutorTests {
static let __allTests = [
// DO NOT MODIFY: This is autogenerated, use:
// `swift test --generate-linuxmain`
// to regenerate.
static let __allTests__PushExecutorTests = [
("testItAddsTheNoVerifyParameterIfGitHookFolderIsPresent", testItAddsTheNoVerifyParameterIfGitHookFolderIsPresent),
("testItSendsTheCorrectScriptContent", testItSendsTheCorrectScriptContent),
("testItSendsTheNoVerifyParameterIfRequired", testItSendsTheNoVerifyParameterIfRequired),
@ -85,7 +119,10 @@ extension PushExecutorTests {
}
extension RocketFileFinderTests {
static let __allTests = [
// DO NOT MODIFY: This is autogenerated, use:
// `swift test --generate-linuxmain`
// to regenerate.
static let __allTests__RocketFileFinderTests = [
("testItReturnsNilIfThereAreNoArgumentsAndTheDefaultFileDoesntExist", testItReturnsNilIfThereAreNoArgumentsAndTheDefaultFileDoesntExist),
("testItReturnsTheArgumentPathIfPresent", testItReturnsTheArgumentPathIfPresent),
("testItReturnsTheDefaultPathIfNoArgsAreThereAndTheFileExists", testItReturnsTheDefaultPathIfNoArgsAreThereAndTheFileExists),
@ -93,7 +130,10 @@ extension RocketFileFinderTests {
}
extension ScriptExecutorTests {
static let __allTests = [
// DO NOT MODIFY: This is autogenerated, use:
// `swift test --generate-linuxmain`
// to regenerate.
static let __allTests__ScriptExecutorTests = [
("testItDoesntSendAnyCommandToTheScriptLauncherIfTheContentIsEmpty", testItDoesntSendAnyCommandToTheScriptLauncherIfTheContentIsEmpty),
("testItDoesntSendAnyCommandToTheScriptLauncherIfTheDictionaryIsNil", testItDoesntSendAnyCommandToTheScriptLauncherIfTheDictionaryIsNil),
("testItSendsTheCorrectScriptToTheScriptLauncher", testItSendsTheCorrectScriptToTheScriptLauncher),
@ -101,8 +141,20 @@ extension ScriptExecutorTests {
]
}
extension ScriptLauncherTestCase {
// DO NOT MODIFY: This is autogenerated, use:
// `swift test --generate-linuxmain`
// to regenerate.
static let __allTests__ScriptLauncherTestCase = [
("testItUsesAWorkaroundToGenerateTheTestsOnLinux", testItUsesAWorkaroundToGenerateTheTestsOnLinux),
]
}
extension StepsParserTests {
static let __allTests = [
// DO NOT MODIFY: This is autogenerated, use:
// `swift test --generate-linuxmain`
// to regenerate.
static let __allTests__StepsParserTests = [
("testItCreatesAScriptStepForNotRecognisedStrings", testItCreatesAScriptStepForNotRecognisedStrings),
("testItIgnoresTheInvalidSteps", testItIgnoresTheInvalidSteps),
("testItParsesCorrectlyAValidDictionary", testItParsesCorrectlyAValidDictionary),
@ -114,7 +166,10 @@ extension StepsParserTests {
}
extension SwiftScriptExecutorTests {
static let __allTests = [
// DO NOT MODIFY: This is autogenerated, use:
// `swift test --generate-linuxmain`
// to regenerate.
static let __allTests__SwiftScriptExecutorTests = [
("testItCreatesTheCorrectProcess", testItCreatesTheCorrectProcess),
("testItDoesntCreateTheProcessIfThereIsNoScriptPath", testItDoesntCreateTheProcessIfThereIsNoScriptPath),
("testItPassesTheArgumentsToTheProcess", testItPassesTheArgumentsToTheProcess),
@ -122,39 +177,45 @@ extension SwiftScriptExecutorTests {
}
extension TagExecutorTests {
static let __allTests = [
// DO NOT MODIFY: This is autogenerated, use:
// `swift test --generate-linuxmain`
// to regenerate.
static let __allTests__TagExecutorTests = [
("testItSendsTheCorrectScriptToTheScriptLauncher", testItSendsTheCorrectScriptToTheScriptLauncher),
("testItUsesAWorkaroundToGenerateTheTestsOnLinux", testItUsesAWorkaroundToGenerateTheTestsOnLinux),
]
}
extension UnhideDevDependenciesExecutorTests {
static let __allTests = [
// DO NOT MODIFY: This is autogenerated, use:
// `swift test --generate-linuxmain`
// to regenerate.
static let __allTests__UnhideDevDependenciesExecutorTests = [
("testItSendsTheHideDependenciesCallToTheDevDependenciesModifier", testItSendsTheHideDependenciesCallToTheDevDependenciesModifier),
("testItUsesTheDefaultPackagePath", testItUsesTheDefaultPackagePath),
]
}
#if !os(macOS)
public func __allTests() -> [XCTestCaseEntry] {
return [
testCase(BranchExecutorTests.__allTests),
testCase(ChecksParserTests.__allTests),
testCase(CleanGitStatusCheckTests.__allTests),
testCase(CommitExecutorTests.__allTests),
testCase(CurrentVersionProviderTests.__allTests),
testCase(DefaultExecutorStepDescriptionTests.__allTests),
testCase(DevDependenciesModifierTests.__allTests),
testCase(GitAddExecutorTests.__allTests),
testCase(HideDevDependenciesExecutorTests.__allTests),
testCase(NewVersionProviderTests.__allTests),
testCase(PushExecutorTests.__allTests),
testCase(RocketFileFinderTests.__allTests),
testCase(ScriptExecutorTests.__allTests),
testCase(StepsParserTests.__allTests),
testCase(SwiftScriptExecutorTests.__allTests),
testCase(TagExecutorTests.__allTests),
testCase(UnhideDevDependenciesExecutorTests.__allTests),
testCase(BranchExecutorTests.__allTests__BranchExecutorTests),
testCase(ChecksParserTests.__allTests__ChecksParserTests),
testCase(CleanGitStatusCheckTests.__allTests__CleanGitStatusCheckTests),
testCase(CommitExecutorTests.__allTests__CommitExecutorTests),
testCase(CurrentVersionProviderTests.__allTests__CurrentVersionProviderTests),
testCase(DefaultExecutorStepDescriptionTests.__allTests__DefaultExecutorStepDescriptionTests),
testCase(DevDependenciesModifierTests.__allTests__DevDependenciesModifierTests),
testCase(GitAddExecutorTests.__allTests__GitAddExecutorTests),
testCase(HideDevDependenciesExecutorTests.__allTests__HideDevDependenciesExecutorTests),
testCase(NewVersionProviderTests.__allTests__NewVersionProviderTests),
testCase(PushExecutorTests.__allTests__PushExecutorTests),
testCase(RocketFileFinderTests.__allTests__RocketFileFinderTests),
testCase(ScriptExecutorTests.__allTests__ScriptExecutorTests),
testCase(ScriptLauncherTestCase.__allTests__ScriptLauncherTestCase),
testCase(StepsParserTests.__allTests__StepsParserTests),
testCase(SwiftScriptExecutorTests.__allTests__SwiftScriptExecutorTests),
testCase(TagExecutorTests.__allTests__TagExecutorTests),
testCase(UnhideDevDependenciesExecutorTests.__allTests__UnhideDevDependenciesExecutorTests),
]
}
#endif