TestBase.swift 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. //
  2. // SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
  3. // SPDX-License-Identifier: GPL-3.0-or-later
  4. //
  5. import XCTest
  6. import Foundation
  7. @testable import NextcloudTalk
  8. class TestBase: XCTestCase {
  9. var appToken = ""
  10. var apiSessionManager: NCAPISessionManager?
  11. func setupAppToken() {
  12. let appPasswordRoute = "\(TestConstants.server)/ocs/v2.php/core/getapppassword"
  13. let credentialsString = "\(TestConstants.username):\(TestConstants.password)"
  14. let authHeader = "Basic \(credentialsString.data(using: .utf8)!.base64EncodedString())"
  15. let configuration = URLSessionConfiguration.default
  16. let apiSessionManager = NCAPISessionManager(configuration: configuration)
  17. apiSessionManager.requestSerializer.setValue(authHeader, forHTTPHeaderField: "Authorization")
  18. let exp = expectation(description: "\(#function)\(#line)")
  19. _ = apiSessionManager.get(appPasswordRoute, parameters: nil, progress: nil) { _, result in
  20. if let resultDict = result as? [String: AnyObject],
  21. let ocs = resultDict["ocs"] as? [String: AnyObject],
  22. let data = ocs["data"] as? [String: AnyObject],
  23. let apppassword = data["apppassword"] as? String {
  24. self.appToken = apppassword
  25. exp.fulfill()
  26. }
  27. } failure: { _, error in
  28. print(error)
  29. exp.fulfill()
  30. }
  31. waitForExpectations(timeout: TestConstants.timeoutLong, handler: nil)
  32. }
  33. func setupApiSessionManager() {
  34. let authHeader = "Basic \(self.appToken.data(using: .utf8)!.base64EncodedString())"
  35. let configuration = URLSessionConfiguration.default
  36. let apiSessionManager = NCAPISessionManager(configuration: configuration)
  37. apiSessionManager.requestSerializer.setValue(authHeader, forHTTPHeaderField: "Authorization")
  38. self.apiSessionManager = apiSessionManager
  39. }
  40. override func setUpWithError() throws {
  41. if appToken.isEmpty {
  42. let accountId = NCDatabaseManager.sharedInstance().accountId(forUser: TestConstants.username, inServer: TestConstants.server)
  43. let talkAccount = NCDatabaseManager.sharedInstance().talkAccount(forAccountId: accountId)
  44. // Remove the account in case it already exists
  45. if talkAccount != nil {
  46. NCSettingsController.sharedInstance().logoutAccount(withAccountId: accountId, withCompletionBlock: nil)
  47. }
  48. self.setupAppToken()
  49. self.setupApiSessionManager()
  50. NCSettingsController.sharedInstance().addNewAccount(forUser: TestConstants.username, withToken: appToken, inServer: TestConstants.server)
  51. let activeAccount = NCDatabaseManager.sharedInstance().activeAccount()
  52. let exp = expectation(description: "\(#function)\(#line)")
  53. // Make sure the capabilities are up to date
  54. NCSettingsController.sharedInstance().getCapabilitiesForAccountId(activeAccount.accountId) { _ in
  55. exp.fulfill()
  56. }
  57. waitForExpectations(timeout: TestConstants.timeoutLong, handler: nil)
  58. }
  59. XCTAssertFalse(appToken.isEmpty)
  60. XCTAssertNotNil(apiSessionManager)
  61. }
  62. }