@@ -2,42 +2,148 @@ import XCTest
22@testable import DropboxClient
33
44final class ListFolderTests : XCTestCase {
5- func testListFolder( ) async {
5+ func testListFolder( ) async throws {
6+ let credentials = Credentials . test
7+ let httpRequests = ActorIsolated < [ URLRequest ] > ( [ ] )
68 let listFolder = ListFolder . live (
79 keychain: {
810 var keychain = Keychain . unimplemented ( )
9- keychain. loadCredentials = { . test }
11+ keychain. loadCredentials = { credentials }
1012 return keychain
13+ } ( ) ,
14+ httpClient: . init { request in
15+ await httpRequests. withValue { $0. append ( request) }
16+ return (
17+ """
18+ {
19+ " cursor " : " c1234 " ,
20+ " entries " : [
21+ {
22+ " .tag " : " file " ,
23+ " id " : " id:a4ayc_80_OEAAAAAAAAAXw " ,
24+ " name " : " Prime_Numbers.txt " ,
25+ " path_display " : " /Homework/math/Prime_Numbers.txt " ,
26+ " path_lower " : " /homework/math/prime_numbers.txt " ,
27+ " client_modified " : " 2023-07-06T15:50:38Z " ,
28+ " server_modified " : " 2023-07-06T22:10:00Z " ,
29+ " is_downloadable " : true
30+ }
31+ ],
32+ " has_more " : false
33+ }
34+ """ . data ( using: . utf8) !,
35+ HTTPURLResponse (
36+ url: URL ( filePath: " / " ) ,
37+ statusCode: 200 ,
38+ httpVersion: nil ,
39+ headerFields: nil
40+ ) !
41+ )
42+ }
43+ )
44+
45+ let result = try await listFolder (
46+ path: " test-path " ,
47+ recursive: true ,
48+ includeDeleted: true ,
49+ limit: 1234 ,
50+ includeNonDownloadableFiles: false
51+ )
52+
53+ await httpRequests. withValue {
54+ let expectedRequest : URLRequest = {
55+ let url = URL ( string: " https://api.dropboxapi.com/2/files/list_folder " ) !
56+ var request = URLRequest ( url: url)
57+ request. httpMethod = " POST "
58+ request. allHTTPHeaderFields = [
59+ " Authorization " : " \( credentials. tokenType) \( credentials. accessToken) " ,
60+ " Content-Type " : " application/json "
61+ ]
62+ return request
1163 } ( )
64+
65+ XCTAssertEqual ( $0, [ expectedRequest] )
66+ }
67+ XCTAssertEqual ( result, ListFolder . Result (
68+ cursor: " c1234 " ,
69+ entries: [
70+ Metadata (
71+ tag: . file,
72+ id: " id:a4ayc_80_OEAAAAAAAAAXw " ,
73+ name: " Prime_Numbers.txt " ,
74+ pathDisplay: " /Homework/math/Prime_Numbers.txt " ,
75+ pathLower: " /homework/math/prime_numbers.txt " ,
76+ clientModified: Calendar ( identifier: . gregorian)
77+ . date ( from: DateComponents (
78+ timeZone: TimeZone ( secondsFromGMT: 0 ) ,
79+ year: 2023 , month: 7 , day: 6 ,
80+ hour: 15 , minute: 50 , second: 38
81+ ) ) !,
82+ serverModified: Calendar ( identifier: . gregorian)
83+ . date ( from: DateComponents (
84+ timeZone: TimeZone ( secondsFromGMT: 0 ) ,
85+ year: 2023 , month: 7 , day: 6 ,
86+ hour: 22 , minute: 10
87+ ) ) !,
88+ isDownloadable: true
89+ )
90+ ] ,
91+ hasMore: false
92+ ) )
93+ }
94+
95+ func testListFolderWhenNotAuthorized( ) async {
96+ let listFolder = ListFolder . live (
97+ keychain: {
98+ var keychain = Keychain . unimplemented ( )
99+ keychain. loadCredentials = { nil }
100+ return keychain
101+ } ( ) ,
102+ httpClient: . unimplemented( )
12103 )
13104
14105 do {
15- _ = try await listFolder ( . init( ) )
106+ _ = try await listFolder ( . init( path : " " ) )
16107 XCTFail ( " Expected to throw, but didn't " )
17108 } catch {
18109 XCTAssertEqual (
19- error as? ListFolder . Error , . unimplemented ,
110+ error as? ListFolder . Error , . notAuthorized ,
20111 " Expected to throw .notAuthorized, got \( error) "
21112 )
22113 }
23114 }
24115
25- func testListFolderWhenNotAuthorized ( ) async {
116+ func testListFolderErrorResponse ( ) async {
26117 let listFolder = ListFolder . live (
27118 keychain: {
28119 var keychain = Keychain . unimplemented ( )
29- keychain. loadCredentials = { nil }
120+ keychain. loadCredentials = { . test }
30121 return keychain
31- } ( )
122+ } ( ) ,
123+ httpClient: . init { _ in
124+ (
125+ " Error!!! " . data ( using: . utf8) !,
126+ HTTPURLResponse (
127+ url: URL ( filePath: " / " ) ,
128+ statusCode: 500 ,
129+ httpVersion: nil ,
130+ headerFields: nil
131+ ) !
132+ )
133+ }
32134 )
33135
34136 do {
35- _ = try await listFolder ( . init( ) )
137+ _ = try await listFolder ( . init( path : " " ) )
36138 XCTFail ( " Expected to throw, but didn't " )
37139 } catch {
38140 XCTAssertEqual (
39- error as? ListFolder . Error , . notAuthorized,
40- " Expected to throw .notAuthorized, got \( error) "
141+ error as? ListFolder . Error ,
142+ . response(
143+ statusCode: 500 ,
144+ data: " Error!!! " . data ( using: . utf8) !
145+ ) ,
146+ " Expected to throw response error, got \( error) "
41147 )
42148 }
43149 }
0 commit comments