From 640f43de1529a5135fd02b09a3132ecd1ef00d0a Mon Sep 17 00:00:00 2001 From: Oliver Wiese <oliver.wiese@fu-berlin.de> Date: Wed, 5 Jun 2019 13:33:51 -0700 Subject: [PATCH] update onboarding testcases --- enzevalos_iphone/MailSession.swift | 1 + .../MailServerConfigurationTest.swift | 130 ++++++++++++++++-- 2 files changed, 120 insertions(+), 11 deletions(-) diff --git a/enzevalos_iphone/MailSession.swift b/enzevalos_iphone/MailSession.swift index 8a641075..4e044a39 100644 --- a/enzevalos_iphone/MailSession.swift +++ b/enzevalos_iphone/MailSession.swift @@ -625,6 +625,7 @@ class MailSession { return searchForServerConfig(hostFromAdr: hostFromAdr) } + private func searchForServerConfig(hostFromAdr: Bool) -> Bool { var search = false let (_, host) = MailSession.splitAddr(userAddr: self.mailAddr) diff --git a/enzevalos_iphoneTests/MailServerConfigurationTest.swift b/enzevalos_iphoneTests/MailServerConfigurationTest.swift index 306309c1..64bbf543 100644 --- a/enzevalos_iphoneTests/MailServerConfigurationTest.swift +++ b/enzevalos_iphoneTests/MailServerConfigurationTest.swift @@ -29,6 +29,7 @@ class MailServerConfigurationTest: XCTestCase, MailSessionListener{ let msg11 = "2 NO [AUTHENTICATIONFAILED] Invalid credentials (Failure)\r\n" var result: Bool? + var expect: XCTestExpectation? override func setUp() { super.setUp() @@ -81,31 +82,138 @@ class MailServerConfigurationTest: XCTestCase, MailSessionListener{ } } - func testLogin(){ - MailServerConfigurationTest.loadAccounts() - let session = MailSession(configSession: .IMAP, mailAddress: "ullimuelle@web.de", password: "dun3bate", username: nil) + /** + Testcase: + pw/name correct: find autoconfig, test input config + name false -> find autoconfig, test iput config + name correct but wrong password -> find autoconfig, test input config + TODO: SMTP? + + Test various accounts? Yahoo, gmx + */ + + func testHappyPath() { + testJsonFile(correctPW: true, provider: "1") + } + + func testJsonFileButWrongPW() { + testJsonFile(correctPW: false, provider: "1") + } + + func testJsonFile(correctPW: Bool, provider: String){ + var pw = "password" + let accounts = MailServerConfigurationTest.loadAccounts() + guard let account = accounts[provider] else { + XCTFail("No account for testing!") + return + } + if correctPW { + pw = account.pw + } + let session = MailSession(configSession: .IMAP, mailAddress: account.name, password: pw, username: nil) + session.addListener(listener: self) + XCTAssertEqual(account.name, session.username) + XCTAssertEqual(account.name, session.mailAddr) + XCTAssertEqual(pw, session.password) + expect = expectation(description: "Login result") + if !session.loadFromProviderJson() { + XCTFail("No provider json file!") + } + if !session.startTestingServerConfig() { + XCTFail("No testing of config...") + } + if let expect = expect { + wait(for: [expect], timeout: 30) + } + if correctPW { + XCTAssert(result ?? false) + } + else { + XCTAssert(result != nil) + XCTAssert(!result!) + } + } + + func testNoJson() { + let accounts = MailServerConfigurationTest.loadAccounts() + guard let account = accounts["2"] else { + XCTFail("No account for testing!") + return + } + let session = MailSession(configSession: .IMAP, mailAddress: account.name, password: account.pw, username: nil) session.addListener(listener: self) - let expect = expectation(description: "OK") - session.startLongSearchOfServerConfig(hostFromAdr: true) - wait(for: [expect], timeout: 60) + if session.loadFromProviderJson() { + XCTFail("Wrong test case! Found in json file!") + } + if session.startTestingServerConfigFromList() { + XCTFail("Wrong test case! Json file exists.") + } + if !session.startLongSearchOfServerConfig(hostFromAdr: true) { + XCTFail("Could not start.") + } + expect = expectation(description: "Login result") + if let expect = expect { + wait(for: [expect], timeout: 30) + } + XCTAssert(result ?? false) + } + + func testDetailOnboarding() { + let accounts = MailServerConfigurationTest.loadAccounts() + guard let account = accounts["1"] else { + XCTFail("No account for testing!") + return + } + let session = MailSession(configSession: .IMAP, mailAddress: "text@example.com", password: "password", username: "user") + session.addListener(listener: self) + session.username = account.name + session.mailAddr = account.name + session.password = account.pw + session.setServer(hostname: "imap.web.de", port: 993, connType: MCOConnectionType.TLS.rawValue, authType: nil) + if !session.startTestingServerConfig() { + XCTFail("Could not test config.") + } + expect = expectation(description: "Login result") + if let expect = expect { + wait(for: [expect], timeout: 30) + } XCTAssert(result ?? false) } func testFinish(result: Bool) { + guard let expect = expect else { + XCTFail("No expectation!") + return + } self.result = result + expect.fulfill() } - static func loadAccounts() -> [(name: String, pw: String)] { + private static func loadAccounts() -> [String:(name: String, pw: String)] { let bundle = Bundle(for: self) + var newAccounts = [String:(name: String, pw: String)]() guard let url = bundle.url(forResource: "accounts", withExtension: "json"), let data = try? Data(contentsOf: url), let jsonDic = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) else { - XCTFail() - return [] + return [:] } - print(jsonDic) - return [] + if let dic = jsonDic as? Dictionary<String, Any>{ + if let accounts = dic["accounts"], let array = accounts as? Array<Any> { + for elem in array { + if let account = elem as? Dictionary<String, String> { + if let id = account["id"], let username = account["username"] , let pw = account["password"] { + newAccounts[id] = (username, pw) + } + } + } + } + + } + return newAccounts } + private static func extractProvider(adr: String) -> String? { + return adr.components(separatedBy: "@").last + } } -- GitLab