Skip to content

Commit dbe315d

Browse files
Wei SunWei Sun
authored andcommitted
[TEST] Add test for DangerSwiftCommitLint
- improve testability
1 parent 298e917 commit dbe315d

File tree

8 files changed

+325
-16
lines changed

8 files changed

+325
-16
lines changed

Sources/DangerSwiftCommitLint/Configuration.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public extension DangerSwiftCommitLint {
3131
private let fail: CommitCheckerSelection
3232
private let customCheckers: [CommitLint.Type]
3333

34-
/// Initialize the configuraiton.
34+
/// Initialize the configuration.
3535
/// - Parameters:
3636
/// - disabled: The selected checks to skip.
3737
/// - warn: The selected checks to warn on.

Sources/DangerSwiftCommitLint/DangerSwiftCommitLint.swift

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,28 @@
11
import Danger
22
import Foundation
33

4+
public protocol DangerDSLProviding {
5+
var git: Git { get }
6+
7+
func warn(_ message: String)
8+
func fail(_ message: String)
9+
}
10+
11+
extension DangerDSL: DangerDSLProviding {}
12+
413
public final class DangerSwiftCommitLint {
514
private enum Constants {
615
static let disableAllChecksMessage = "All checks were disabled, nothing to do."
716
}
817

9-
private let danger: DangerDSL
18+
private let danger: DangerDSLProviding
1019
private var configuration: Configuration!
1120

1221
/// Initialize an instance of the linter
1322
/// - Parameters:
1423
/// - danger: An instance of `Danger.DangerDSL`.
1524
/// - configuration: Linter configuration.
16-
init(danger: DangerDSL = Danger(), configuration: Configuration) {
25+
public init(danger: DangerDSLProviding = Danger(), configuration: Configuration) {
1726
self.danger = danger
1827
self.configuration = configuration
1928
}
@@ -28,7 +37,7 @@ public final class DangerSwiftCommitLint {
2837
}
2938
}
3039

31-
extension DangerSwiftCommitLint {
40+
private extension DangerSwiftCommitLint {
3241
var commitMessages: [GitCommitMessage] {
3342
let messages = danger.git.commits.map { GitCommitMessage($0) }
3443
guard configuration.limit > 0 else {
@@ -40,10 +49,10 @@ extension DangerSwiftCommitLint {
4049

4150
func checkMessages() {
4251
// Checkers that warn the danger job.
43-
configuration.warningCheckers.checkCommitMessages(commitMessages, checkerResultHanler: warning(_:shas:))
52+
configuration.warningCheckers.checkCommitMessages(commitMessages, checkerResultHandler: warning(_:shas:))
4453

4554
// Checkers that fail the danger job.
46-
configuration.failingCheckers.checkCommitMessages(commitMessages, checkerResultHanler: failing(_:shas:))
55+
configuration.failingCheckers.checkCommitMessages(commitMessages, checkerResultHandler: failing(_:shas:))
4756
}
4857

4958
func warning(_ message: String, shas: [String]) {
@@ -53,16 +62,16 @@ extension DangerSwiftCommitLint {
5362

5463
func failing(_ message: String, shas: [String]) {
5564
let failingMessage = ([message] + shas).joined(separator: "\n")
56-
danger.warn(failingMessage)
65+
danger.fail(failingMessage)
5766
}
5867
}
5968

60-
extension Array where Element == CommitLint.Type {
61-
func checkCommitMessages(_ commitMessages: [GitCommitMessage], checkerResultHanler: (String, [String]) -> Void) {
69+
private extension Array where Element == CommitLint.Type {
70+
func checkCommitMessages(_ commitMessages: [GitCommitMessage], checkerResultHandler: (String, [String]) -> Void) {
6271
forEach { checker in
6372
let shas = commitMessages.compactMap { checker.fail($0) ? $0.sha : nil }
6473
if shas.isEmpty == false {
65-
checkerResultHanler(checker.linterMessage, shas)
74+
checkerResultHandler(checker.linterMessage, shas)
6675
}
6776
}
6877
}

Tests/DangerSwiftCommitLintTests/CommitChecker/CommitMessageTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import XCTest
44

55
final class CommitMessageTests: XCTestCase {
66
func testInitializeWithDangerGitHubCommit() {
7-
let commit = CommitParser.parseCommitJSON(with: gitCommitJSON)
7+
let commit = CommitParser.parseGitCommit(with: gitCommitJSON)
88
let expectedCommitMessage = commit.message.components(separatedBy: .newlines)
99
let testSubject = GitCommitMessage(commit)
1010
XCTAssertEqual(testSubject.sha, commit.sha)

Tests/DangerSwiftCommitLintTests/CommitChecker/Fixtures/CommitJSONParser.swift

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,18 @@ import Danger
22
import Foundation
33

44
enum CommitParser {
5-
static func parseCommitJSON(with commitJSON: String) -> Git.Commit {
6-
let data = Data(commitJSON.utf8)
5+
static func parseGitCommit(with json: String) -> Git.Commit {
6+
decodeJSON(with: json, type: Git.Commit.self)
7+
}
8+
9+
static func parseGit(with json: String) -> Git {
10+
decodeJSON(with: json, type: Git.self)
11+
}
12+
13+
private static func decodeJSON<T: Decodable>(with jsonContent: String, type: T.Type) -> T {
14+
let data = Data(jsonContent.utf8)
715
let decoder = JSONDecoder()
816
decoder.dateDecodingStrategy = .custom(DateFormatter.dateFormatterHandler)
9-
return try! decoder.decode(Git.Commit.self, from: data) // swiftlint:disable:this force_try
17+
return try! decoder.decode(type, from: data) // swiftlint:disable:this force_try
1018
}
1119
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
let gitIssuesOnLastTwoCommitsJSON = """
2+
{
3+
"modified_files": [
4+
"Tests/SampleTest.swift"
5+
],
6+
"created_files": [],
7+
"deleted_files": [],
8+
"commits": [
9+
{
10+
"sha": "testshacommit4",
11+
"author": {
12+
"name": "Test Testy",
13+
"email": "[email protected]",
14+
"date": "2021-09-08T23:16:13.000Z"
15+
},
16+
"committer": {
17+
"name": "Test Testy",
18+
"email": "[email protected]",
19+
"date": "2019-04-10T21:56:43.000Z"
20+
},
21+
"message": "Hi",
22+
"parents": [],
23+
"url": "https://gitlab.com/test/test.systems/commit/testshacommit4",
24+
"tree": null
25+
},
26+
{
27+
"sha": "testshacommit3",
28+
"author": {
29+
"name": "Test Testy",
30+
"email": "[email protected]",
31+
"date": "2021-09-08T21:56:43.000Z"
32+
},
33+
"committer": {
34+
"name": "Test Testy",
35+
"email": "[email protected]",
36+
"date": "2019-04-10T21:56:43.000Z"
37+
},
38+
"message": "subject for test purpose - commit 3 very very long commit subject.\\nTest Body Line 1.\\nTest Body Line 2.",
39+
"parents": [],
40+
"url": "https://gitlab.com/test/test.systems/commit/testshacommit3",
41+
"tree": null
42+
},
43+
{
44+
"sha": "testshacommit2",
45+
"author": {
46+
"name": "Test Testy",
47+
"email": "[email protected]",
48+
"date": "2021-09-08T20:10:33.000Z"
49+
},
50+
"committer": {
51+
"name": "Test Testy",
52+
"email": "[email protected]",
53+
"date": "2019-04-10T20:10:33.000Z"
54+
},
55+
"message": "Merge branch 'master' into TestRepository/tt/tech-123-update-sample-test",
56+
"parents": [],
57+
"url": "https://gitlab.com/test/test.systems/commit/testshacommit2",
58+
"tree": null
59+
},
60+
{
61+
"sha": "testshacommit1",
62+
"author": {
63+
"name": "Test Testy",
64+
"email": "[email protected]",
65+
"date": "2021-09-08T16:23:31.000Z"
66+
},
67+
"committer": {
68+
"name": "Test Testy",
69+
"email": "[email protected]",
70+
"date": "2019-04-10T16:23:31.000Z"
71+
},
72+
"message": "Subject for test purpose - commit 1\\n\\nTest Body Line 1.\\nTest Body Line 2.",
73+
"parents": [],
74+
"url": "https://gitlab.com/test/test.systems/commit/testshacommit1",
75+
"tree": null
76+
}
77+
]
78+
}
79+
"""
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
let gitJSON = """
2+
{
3+
"modified_files": [
4+
"Tests/SampleTest.swift"
5+
],
6+
"created_files": [],
7+
"deleted_files": [],
8+
"commits": [
9+
{
10+
"sha": "testshacommit3",
11+
"author": {
12+
"name": "Test Testy",
13+
"email": "[email protected]",
14+
"date": "2021-09-08T21:56:43.000Z"
15+
},
16+
"committer": {
17+
"name": "Test Testy",
18+
"email": "[email protected]",
19+
"date": "2019-04-10T21:56:43.000Z"
20+
},
21+
"message": "Subject for test purpose - commit 3\\n\\nTest Body Line 1.\\nTest Body Line 2.",
22+
"parents": [],
23+
"url": "https://gitlab.com/test/test.systems/commit/testshacommit3",
24+
"tree": null
25+
},
26+
{
27+
"sha": "testshacommit2",
28+
"author": {
29+
"name": "Test Testy",
30+
"email": "[email protected]",
31+
"date": "2021-09-08T20:10:33.000Z"
32+
},
33+
"committer": {
34+
"name": "Test Testy",
35+
"email": "[email protected]",
36+
"date": "2019-04-10T20:10:33.000Z"
37+
},
38+
"message": "Subject for test purpose - commit 2\\n\\nTest Body Line 1.\\nTest Body Line 2.",
39+
"parents": [],
40+
"url": "https://gitlab.com/test/test.systems/commit/testshacommit2",
41+
"tree": null
42+
},
43+
{
44+
"sha": "testshacommit1",
45+
"author": {
46+
"name": "Test Testy",
47+
"email": "[email protected]",
48+
"date": "2021-09-08T16:23:31.000Z"
49+
},
50+
"committer": {
51+
"name": "Test Testy",
52+
"email": "[email protected]",
53+
"date": "2019-04-10T16:23:31.000Z"
54+
},
55+
"message": "Subject for test purpose - commit 1\\n\\nTest Body Line 1.\\nTest Body Line 2.",
56+
"parents": [],
57+
"url": "https://gitlab.com/test/test.systems/commit/testshacommit1",
58+
"tree": null
59+
}
60+
]
61+
}
62+
"""

0 commit comments

Comments
 (0)