Skip to content

Commit

Permalink
Add public init to the dropbox clients to allow creation for short li…
Browse files Browse the repository at this point in the history
…ved tokens (#339)

* Add init to the clients to allow creation for short lived tokens

* Make tests less flaky, and update how we make tokens for tests
  • Loading branch information
YufeiG authored Aug 31, 2021
1 parent 49ddd48 commit 73faee6
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 14 deletions.
13 changes: 12 additions & 1 deletion Source/SwiftyDropbox/Shared/Handwritten/DropboxClient.swift
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,18 @@ open class DropboxClient: DropboxBase {
)
self.init(transportClient: transportClient)
}


/// Initialize a client with an `DropboxAccessToken`.
///
/// - Parameters:
/// - accessToken: The token itself, could be long or short lived.
/// - dropboxOauthManager: an oauthManager, used for creating the token provider.
public convenience init(accessToken: DropboxAccessToken, dropboxOauthManager: DropboxOAuthManager) {
let accessTokenProvider = dropboxOauthManager.accessTokenProviderForToken(accessToken)
let transportClient = DropboxTransportClient(accessTokenProvider: accessTokenProvider)
self.init(transportClient: transportClient)
}

/// Designated Initializer.
///
/// - Parameter transportClient: The underlying DropboxTransportClient to make API calls.
Expand Down
11 changes: 11 additions & 0 deletions Source/SwiftyDropbox/Shared/Handwritten/DropboxTeamClient.swift
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,17 @@ open class DropboxTeamClient: DropboxTeamBase {
let transportClient = DropboxTransportClient(accessTokenProvider: accessTokenProvider)
self.init(transportClient: transportClient)
}

/// Initialize a client with an `DropboxAccessToken`.
///
/// - Parameters:
/// - accessToken: The token itself, could be long or short lived.
/// - dropboxOauthManager: an oauthManager, used for creating the token provider.
public convenience init(accessToken: DropboxAccessToken, dropboxOauthManager: DropboxOAuthManager) {
let accessTokenProvider = dropboxOauthManager.accessTokenProviderForToken(accessToken)
let transportClient = DropboxTransportClient(accessTokenProvider: accessTokenProvider)
self.init(transportClient: transportClient)
}

/// Designated Initializer.
///
Expand Down
22 changes: 18 additions & 4 deletions TestSwiftyDropbox/IntegrationTests/TestClasses.swift
Original file line number Diff line number Diff line change
Expand Up @@ -883,8 +883,8 @@ open class SharingTests {
let memberSelector = Sharing.MemberSelector.email(TestData.accountId3Email)
let addFolderMemberArg = Sharing.AddMember(member: memberSelector)
tester.sharing.addFolderMember(sharedFolderId: sharedFolderId, members: [addFolderMemberArg], quiet: true).response { response, error in
if let _ = response {
TestFormat.printOffset("Folder member added")
if let response = response {
TestFormat.printOffset("Folder member added \(response)")
TestFormat.printSubTestEnd(#function)
nextTest()
} else if let callError = error {
Expand Down Expand Up @@ -1409,6 +1409,14 @@ open class TeamTests {
case .success(let teamMemberInfo):
let teamMemberId = teamMemberInfo.profile.teamMemberId
self.teamMemberId2 = teamMemberId
case .userAlreadyOnTeam(let email):
sleep(3)
// sometimes when a previous test errors, the member could still be added
self.membersRemove({
sleep(3)
self.membersAdd(nextTest)
}, emailToRemove: email)
return
default:
TestFormat.abort("Member add finished but did not go as expected:\n \(memberAddResult)")
}
Expand Down Expand Up @@ -1492,7 +1500,7 @@ open class TeamTests {
}
}

func membersRemove(_ nextTest: @escaping (() -> Void)) {
func membersRemove(_ nextTest: @escaping (() -> Void), emailToRemove: String? = nil) {
TestFormat.printSubTestBegin(#function)

let jobStatus: ((String) -> Void) = { jobId in
Expand All @@ -1513,7 +1521,13 @@ open class TeamTests {
}
}

let userSelectorArg = Team.UserSelectorArg.teamMemberId(self.teamMemberId2!)
let userSelectorArg: Team.UserSelectorArg
if let emailToRemove = emailToRemove {
userSelectorArg = Team.UserSelectorArg.email(emailToRemove)
} else {
userSelectorArg = Team.UserSelectorArg.teamMemberId(self.teamMemberId2!)
}

tester.team.membersRemove(user: userSelectorArg).response { response, error in
if let result = response {
print(result)
Expand Down
4 changes: 2 additions & 2 deletions TestSwiftyDropbox/Podfile.lock
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
PODS:
- Alamofire (5.4.3)
- SwiftyDropbox (8.0.1):
- SwiftyDropbox (8.1.0):
- Alamofire (~> 5.4.3)

DEPENDENCIES:
Expand All @@ -16,7 +16,7 @@ EXTERNAL SOURCES:

SPEC CHECKSUMS:
Alamofire: e447a2774a40c996748296fa2c55112fdbbc42f9
SwiftyDropbox: 9c9d6cf23182da2dc3be55150aceb86de922908b
SwiftyDropbox: 1355735d66ebb1597cac434a90930fe9c9b35048

PODFILE CHECKSUM: dadb3aa2d15d600ec946e676631ff3d44d1f03ca

Expand Down
10 changes: 3 additions & 7 deletions TestSwiftyDropbox/TestUtils/TestTokenAuthGenerator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ enum TestAuthTokenGenerator {

let flag = XCTestExpectation()

var returnAccessToken: String?
var returnAccessToken: DropboxAccessToken?

manager.refreshAccessToken(
defaultToken,
Expand All @@ -24,7 +24,7 @@ enum TestAuthTokenGenerator {

switch result {
case .success(let authToken)?:
returnAccessToken = authToken.accessToken
returnAccessToken = authToken
case .error(_, let description)?:
XCTFail("Error: failed to refresh access token (\(description ?? "no description")")
case .cancel?:
Expand All @@ -42,10 +42,6 @@ enum TestAuthTokenGenerator {
XCTFail("AccessToken creation failed")
fatalError("AccessToken creation failed")
}
let tokenProvider = ShortLivedAccessTokenProvider(token: DropboxAccessToken(accessToken: accessToken,
uid: TestUid),
tokenRefresher: manager)

return DropboxTransportClient(accessTokenProvider: tokenProvider)
return DropboxTransportClient(accessTokenProvider: manager.accessTokenProviderForToken(accessToken))
}
}

0 comments on commit 73faee6

Please sign in to comment.