Skip to content

Commit 7187541

Browse files
committed
refactor: Split tests into separate files
1 parent 1a829a4 commit 7187541

File tree

6 files changed

+229
-206
lines changed

6 files changed

+229
-206
lines changed

JWT.xcodeproj/project.pbxproj

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
271E108B1F9034B100B5033C /* CompactJSONDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 271E108A1F9034B100B5033C /* CompactJSONDecoder.swift */; };
1616
271E108D1F9041C400B5033C /* CompactJSONDecoderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 271E108C1F9041C400B5033C /* CompactJSONDecoderTests.swift */; };
1717
271E108F1F9042E900B5033C /* CompactJSONEncoderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 271E108E1F9042E900B5033C /* CompactJSONEncoderTests.swift */; };
18+
271E10911F90488700B5033C /* JWTEncodeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 271E10901F90488700B5033C /* JWTEncodeTests.swift */; };
19+
271E10931F9049A400B5033C /* PayloadTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 271E10921F9049A400B5033C /* PayloadTests.swift */; };
20+
271E10951F9049E200B5033C /* ClaimSetTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 271E10941F9049E200B5033C /* ClaimSetTests.swift */; };
21+
271E10971F904A0700B5033C /* IntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 271E10961F904A0700B5033C /* IntegrationTests.swift */; };
1822
273010FF1F33EABA00219C35 /* HMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 273010FE1F33EABA00219C35 /* HMAC.swift */; };
1923
273011001F33EABA00219C35 /* HMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 273010FE1F33EABA00219C35 /* HMAC.swift */; };
2024
273011011F33EABA00219C35 /* HMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 273010FE1F33EABA00219C35 /* HMAC.swift */; };
@@ -37,7 +41,7 @@
3741
277794131DF22D0D00573F3E /* Encode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2777940F1DF22D0D00573F3E /* Encode.swift */; };
3842
279D63A21AD07FFF0024E2BC /* JWT.h in Headers */ = {isa = PBXBuildFile; fileRef = 279D63A11AD07FFF0024E2BC /* JWT.h */; settings = {ATTRIBUTES = (Public, ); }; };
3943
279D63A81AD07FFF0024E2BC /* JWT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 279D639C1AD07FFF0024E2BC /* JWT.framework */; };
40-
279D63AF1AD07FFF0024E2BC /* JWTTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 279D63AE1AD07FFF0024E2BC /* JWTTests.swift */; };
44+
279D63AF1AD07FFF0024E2BC /* JWTDecodeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 279D63AE1AD07FFF0024E2BC /* JWTDecodeTests.swift */; };
4145
520A71171C469F010005C709 /* Base64.swift in Sources */ = {isa = PBXBuildFile; fileRef = 520A71131C469F010005C709 /* Base64.swift */; };
4246
520A71181C469F010005C709 /* Claims.swift in Sources */ = {isa = PBXBuildFile; fileRef = 520A71141C469F010005C709 /* Claims.swift */; };
4347
520A71191C469F010005C709 /* Decode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 520A71151C469F010005C709 /* Decode.swift */; };
@@ -75,6 +79,10 @@
7579
271E108A1F9034B100B5033C /* CompactJSONDecoder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompactJSONDecoder.swift; sourceTree = "<group>"; };
7680
271E108C1F9041C400B5033C /* CompactJSONDecoderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompactJSONDecoderTests.swift; sourceTree = "<group>"; };
7781
271E108E1F9042E900B5033C /* CompactJSONEncoderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompactJSONEncoderTests.swift; sourceTree = "<group>"; };
82+
271E10901F90488700B5033C /* JWTEncodeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JWTEncodeTests.swift; sourceTree = "<group>"; };
83+
271E10921F9049A400B5033C /* PayloadTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PayloadTests.swift; sourceTree = "<group>"; };
84+
271E10941F9049E200B5033C /* ClaimSetTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClaimSetTests.swift; sourceTree = "<group>"; };
85+
271E10961F904A0700B5033C /* IntegrationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntegrationTests.swift; sourceTree = "<group>"; };
7886
273010FE1F33EABA00219C35 /* HMAC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HMAC.swift; sourceTree = "<group>"; };
7987
273011041F33FC5F00219C35 /* HMACCommonCrypto.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HMACCommonCrypto.swift; sourceTree = "<group>"; };
8088
273011091F33FC9100219C35 /* HMACCryptoSwift.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HMACCryptoSwift.swift; sourceTree = "<group>"; };
@@ -86,7 +94,7 @@
8694
279D63A11AD07FFF0024E2BC /* JWT.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JWT.h; sourceTree = "<group>"; };
8795
279D63A71AD07FFF0024E2BC /* JWTTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JWTTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
8896
279D63AD1AD07FFF0024E2BC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
89-
279D63AE1AD07FFF0024E2BC /* JWTTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JWTTests.swift; sourceTree = "<group>"; };
97+
279D63AE1AD07FFF0024E2BC /* JWTDecodeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JWTDecodeTests.swift; sourceTree = "<group>"; };
9098
520A71131C469F010005C709 /* Base64.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Base64.swift; sourceTree = "<group>"; };
9199
520A71141C469F010005C709 /* Claims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Claims.swift; sourceTree = "<group>"; };
92100
520A71151C469F010005C709 /* Decode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Decode.swift; sourceTree = "<group>"; };
@@ -208,7 +216,11 @@
208216
children = (
209217
271E108C1F9041C400B5033C /* CompactJSONDecoderTests.swift */,
210218
271E108E1F9042E900B5033C /* CompactJSONEncoderTests.swift */,
211-
279D63AE1AD07FFF0024E2BC /* JWTTests.swift */,
219+
271E10941F9049E200B5033C /* ClaimSetTests.swift */,
220+
271E10921F9049A400B5033C /* PayloadTests.swift */,
221+
271E10901F90488700B5033C /* JWTEncodeTests.swift */,
222+
279D63AE1AD07FFF0024E2BC /* JWTDecodeTests.swift */,
223+
271E10961F904A0700B5033C /* IntegrationTests.swift */,
212224
279D63AC1AD07FFF0024E2BC /* Supporting Files */,
213225
);
214226
name = Tests;
@@ -470,9 +482,13 @@
470482
isa = PBXSourcesBuildPhase;
471483
buildActionMask = 2147483647;
472484
files = (
485+
271E10971F904A0700B5033C /* IntegrationTests.swift in Sources */,
473486
271E108F1F9042E900B5033C /* CompactJSONEncoderTests.swift in Sources */,
487+
271E10911F90488700B5033C /* JWTEncodeTests.swift in Sources */,
474488
271E108D1F9041C400B5033C /* CompactJSONDecoderTests.swift in Sources */,
475-
279D63AF1AD07FFF0024E2BC /* JWTTests.swift in Sources */,
489+
279D63AF1AD07FFF0024E2BC /* JWTDecodeTests.swift in Sources */,
490+
271E10931F9049A400B5033C /* PayloadTests.swift in Sources */,
491+
271E10951F9049E200B5033C /* ClaimSetTests.swift in Sources */,
476492
);
477493
runOnlyForDeploymentPostprocessing = 0;
478494
};

Tests/JWTTests/ClaimSetTests.swift

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
import XCTest
2+
import JWT
3+
4+
class ValidationTests: XCTestCase {
5+
func testClaimJustExpiredWithoutLeeway() {
6+
var claims = ClaimSet()
7+
claims.expiration = Date().addingTimeInterval(-1)
8+
9+
do {
10+
try claims.validateExpiary()
11+
XCTFail("InvalidToken.expiredSignature error should have been thrown.")
12+
} catch InvalidToken.expiredSignature {
13+
// Correct error thrown
14+
} catch {
15+
XCTFail("Unexpected error while validating exp claim.")
16+
}
17+
}
18+
19+
func testClaimJustNotExpiredWithoutLeeway() {
20+
var claims = ClaimSet()
21+
claims.expiration = Date().addingTimeInterval(-1)
22+
23+
do {
24+
try claims.validateExpiary(leeway: 2)
25+
} catch {
26+
XCTFail("Unexpected error while validating exp claim that should be valid with leeway.")
27+
}
28+
}
29+
30+
func testNotBeforeIsImmatureSignatureWithoutLeeway() {
31+
var claims = ClaimSet()
32+
claims.notBefore = Date().addingTimeInterval(1)
33+
34+
do {
35+
try claims.validateNotBefore()
36+
XCTFail("InvalidToken.immatureSignature error should have been thrown.")
37+
} catch InvalidToken.immatureSignature {
38+
// Correct error thrown
39+
} catch {
40+
XCTFail("Unexpected error while validating nbf claim.")
41+
}
42+
}
43+
44+
func testNotBeforeIsValidWithLeeway() {
45+
var claims = ClaimSet()
46+
claims.notBefore = Date().addingTimeInterval(1)
47+
48+
do {
49+
try claims.validateNotBefore(leeway: 2)
50+
} catch {
51+
XCTFail("Unexpected error while validating nbf claim that should be valid with leeway.")
52+
}
53+
}
54+
55+
func testIssuedAtIsInFutureWithoutLeeway() {
56+
var claims = ClaimSet()
57+
claims.issuedAt = Date().addingTimeInterval(1)
58+
59+
do {
60+
try claims.validateIssuedAt()
61+
XCTFail("InvalidToken.invalidIssuedAt error should have been thrown.")
62+
} catch InvalidToken.invalidIssuedAt {
63+
// Correct error thrown
64+
} catch {
65+
XCTFail("Unexpected error while validating iat claim.")
66+
}
67+
}
68+
69+
func testIssuedAtIsValidWithLeeway() {
70+
var claims = ClaimSet()
71+
claims.issuedAt = Date().addingTimeInterval(1)
72+
73+
do {
74+
try claims.validateIssuedAt(leeway: 2)
75+
} catch {
76+
XCTFail("Unexpected error while validating iat claim that should be valid with leeway.")
77+
}
78+
}
79+
}

Tests/JWTTests/IntegrationTests.swift

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import XCTest
2+
import JWT
3+
4+
class IntegrationTests: XCTestCase {
5+
func testVerificationFailureWithoutLeeway() {
6+
let token = JWT.encode(.none) { builder in
7+
builder.issuer = "fuller.li"
8+
builder.audience = "cocoapods"
9+
builder.expiration = Date().addingTimeInterval(-1) // Token expired one second ago
10+
builder.notBefore = Date().addingTimeInterval(1) // Token starts being valid in one second
11+
builder.issuedAt = Date().addingTimeInterval(1) // Token is issued one second in the future
12+
}
13+
14+
do {
15+
let _ = try JWT.decode(token, algorithm: .none, leeway: 0)
16+
XCTFail("InvalidToken error should have been thrown.")
17+
} catch is InvalidToken {
18+
// Correct error thrown
19+
} catch {
20+
XCTFail("Unexpected error type while verifying token.")
21+
}
22+
}
23+
24+
func testVerificationSuccessWithLeeway() {
25+
let token = JWT.encode(.none) { builder in
26+
builder.issuer = "fuller.li"
27+
builder.audience = "cocoapods"
28+
builder.expiration = Date().addingTimeInterval(-1) // Token expired one second ago
29+
builder.notBefore = Date().addingTimeInterval(1) // Token starts being valid in one second
30+
builder.issuedAt = Date().addingTimeInterval(1) // Token is issued one second in the future
31+
}
32+
33+
do {
34+
let _ = try JWT.decode(token, algorithm: .none, leeway: 2)
35+
// Due to leeway no error gets thrown.
36+
} catch {
37+
XCTFail("Unexpected error type while verifying token.")
38+
}
39+
}
40+
}

0 commit comments

Comments
 (0)