From e7d04c4861f6c878de5599f56d67eb6220e4bea3 Mon Sep 17 00:00:00 2001
From: Oliver Wiese <oliver.wiese@fu-berlin.de>
Date: Sat, 21 Mar 2020 10:50:45 +0100
Subject: [PATCH] fix and add testcases

---
 enzevalos_iphoneTests/GeneratedMocks.swift    |   4 +-
 .../MailServerConfigurationTest.swift         |   3 -
 enzevalos_iphoneTests/private/accounts.json   |  58 +++++++-
 enzevalos_iphoneUITests/OnboardingTest.swift  |  10 +-
 .../SwiftUIOnboardingUITests.swift            | 135 ++++++++++++++++--
 5 files changed, 183 insertions(+), 27 deletions(-)

diff --git a/enzevalos_iphoneTests/GeneratedMocks.swift b/enzevalos_iphoneTests/GeneratedMocks.swift
index 39ed835c..9617a966 100644
--- a/enzevalos_iphoneTests/GeneratedMocks.swift
+++ b/enzevalos_iphoneTests/GeneratedMocks.swift
@@ -1,4 +1,4 @@
-// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationModel.swift at 2020-03-20 18:02:50 +0000
+// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationModel.swift at 2020-03-21 09:49:42 +0000
 
 //
 //  AuthenticationModel.swift
@@ -654,7 +654,7 @@ import Foundation
 }
 
 
-// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationViewModel.swift at 2020-03-20 18:02:50 +0000
+// MARK: - Mocks generated from file: enzevalos_iphone/AuthenticationViewModel.swift at 2020-03-21 09:49:42 +0000
 
 //
 //  AuthenticationViewModel.swift
diff --git a/enzevalos_iphoneTests/MailServerConfigurationTest.swift b/enzevalos_iphoneTests/MailServerConfigurationTest.swift
index c451d6bd..cf107d46 100644
--- a/enzevalos_iphoneTests/MailServerConfigurationTest.swift
+++ b/enzevalos_iphoneTests/MailServerConfigurationTest.swift
@@ -367,8 +367,6 @@ class MailServerConfigurationTest: XCTestCase, MailSessionListener{
         // Test fetching mails!
         let mailHandler = AppDelegate.getAppDelegate().mailHandler
         let promise = expectation(description: "Call for mails!")
-        print(mailHandler.IMAPSession?.username)
-        print(mailHandler.IMAPSession?.password)
 
         mailHandler.loadMailsForInbox(completionCallback: {(error: MailServerConnectionError?) -> () in
             promise.fulfill()
@@ -379,7 +377,6 @@ class MailServerConfigurationTest: XCTestCase, MailSessionListener{
     }
     
     private func loadMailsCallback(error: MailServerConnectionError?) {
-        print(error)
         guard error == nil else {
             XCTFail("Error! \(String(describing: error)) for \(String(describing: userAdr))")
             return
diff --git a/enzevalos_iphoneTests/private/accounts.json b/enzevalos_iphoneTests/private/accounts.json
index 4ab21c4d..77c7470a 100644
--- a/enzevalos_iphoneTests/private/accounts.json
+++ b/enzevalos_iphoneTests/private/accounts.json
@@ -1,15 +1,59 @@
 {
-	"accounts":[
-		{
-			"id": "1",
-			"username": "FIX ME",
-			"password": "FIX ME",
+    "accounts":[
+        {
+            "id": "1",
+            "username": "Ullimuelle@web.de",
+            "password": "dun3bate",
             "hostIMAP": "imap.web.de",
             "portIMAP": "993",
             "conTypeIMAP": "TLS/SSL",
             "hostSMTP": "smtp.web.de",
             "portSMTP": "587",
             "conTypeSMTP": "StartTLS"
-		}
-	]
+        },
+        {
+            "id": "2",
+            "username": "Oliver@urgs.org",
+            "password": "ckwgHry8h6ogrYMc2n",
+            "hostIMAP": "urgs.org",
+            "portIMAP": "993",
+            "conTypeIMAP": "TLS/SSL",
+            "hostSMTP": "urgs.org",
+            "portSMTP": "587",
+            "conTypeSMTP": "StartTLS"
+        },
+        {
+            "id": "3",
+            "username": "klausDaimler123@yahoo.ca",
+            "password": "i8x2uxv4hg6pVkRMPCk2ehmUHiX6",
+            "hostIMAP": "imap.mail.yahoo.com",
+            "portIMAP": "993",
+            "conTypeIMAP": "TLS/SSL",
+            "hostSMTP": "smtp.mail.yahoo.com",
+            "portSMTP": "587",
+            "conTypeSMTP": "StartTLS"
+        },
+        {
+            "id": "4",
+            "username": "konradzuse@zedat.fu-berlin.de",
+            "password": "riwtef-4fefti-ditkyG",
+            "hostIMAP": "mail.zedat.fu-berlin.de",
+            "portIMAP": "143",
+            "conTypeIMAP": "StartTLS",
+            "hostSMTP": "mail.zedat.fu-berlin.de",
+            "portSMTP": "587",
+            "conTypeSMTP": "StartTLS"
+        },
+        {
+            "id": "5",
+            "username": "letterbox-test@secuso.org",
+            "password": "xookeed0Thoo5ahshohR",
+            "hostIMAP": "imap.strato.de",
+            "portIMAP": "993",
+            "conTypeIMAP": "TLS/SSL",
+            "hostSMTP": "smtp.strato.de",
+            "portSMTP": "465",
+            "conTypeSMTP": "TLS/SSL"
+        }
+    ]
 }
diff --git a/enzevalos_iphoneUITests/OnboardingTest.swift b/enzevalos_iphoneUITests/OnboardingTest.swift
index 28df79fa..3c5912ce 100644
--- a/enzevalos_iphoneUITests/OnboardingTest.swift
+++ b/enzevalos_iphoneUITests/OnboardingTest.swift
@@ -312,11 +312,13 @@ extension String  {
 extension XCUIElement {
     func clear(){
         guard let stringValue = self.value as? String else {
-            XCTFail("Tried to clear and enter text into a non string value")
             return
         }
-        self.tap()
-        let deleteString = String(repeating: XCUIKeyboardKey.delete.rawValue, count: stringValue.count)
-        self.typeText(deleteString)
+        var delString = String()
+        for _ in stringValue {
+            delString += XCUIKeyboardKey.delete.rawValue
+            delString += XCUIKeyboardKey.delete.rawValue
+        }
+        typeText(delString)
     }
 }
diff --git a/enzevalos_iphoneUITests/SwiftUIOnboardingUITests.swift b/enzevalos_iphoneUITests/SwiftUIOnboardingUITests.swift
index 926f3f67..2600b8b0 100644
--- a/enzevalos_iphoneUITests/SwiftUIOnboardingUITests.swift
+++ b/enzevalos_iphoneUITests/SwiftUIOnboardingUITests.swift
@@ -102,16 +102,22 @@ class SwiftUIOnboardingUITests: XCTestCase {
     
     func testTesds(){
         
-        
-        let app = XCUIApplication()
         app.buttons["Login"].tap()
         
-        let elementsQuery = app.scrollViews.otherElements
-        elementsQuery.textFields["Mail address"].tap()
-        elementsQuery.secureTextFields["Password"].tap()
-        elementsQuery.buttons["Next"].tap()
-        elementsQuery.staticTexts["COULDN'T CONNECT TO SERVER. \n YOUR ACCOUNT NAME OR PASSWORD IS WRONG. PLEASE, CHECK THEM."].tap()
-      
+        let mailAddressTextField = app.scrollViews.otherElements.textFields["Mail address"]
+        mailAddressTextField.tap()
+        mailAddressTextField.tap()
+        mailAddressTextField.tap()
+        
+        let cutStaticText = app/*@START_MENU_TOKEN@*/.staticTexts["Cut"]/*[[".menus",".menuItems[\"Cut\"].staticTexts[\"Cut\"]",".staticTexts[\"Cut\"]"],[[[-1,2],[-1,1],[-1,0,1]],[[-1,2],[-1,1]]],[0]]@END_MENU_TOKEN@*/
+        cutStaticText.tap()
+        mailAddressTextField.tap()
+        
+        app/*@START_MENU_TOKEN@*/.menuItems["Paste"]/*[[".menus.menuItems[\"Paste\"]",".menuItems[\"Paste\"]"],[[[-1,1],[-1,0]]],[0]]@END_MENU_TOKEN@*/.tap()
+        mailAddressTextField.tap()
+        app/*@START_MENU_TOKEN@*/.staticTexts["Select All"]/*[[".menus",".menuItems[\"Select All\"].staticTexts[\"Select All\"]",".staticTexts[\"Select All\"]"],[[[-1,2],[-1,1],[-1,0,1]],[[-1,2],[-1,1]]],[0]]@END_MENU_TOKEN@*/.tap()
+        cutStaticText.tap()
+       
         
     }
     
@@ -135,10 +141,17 @@ class SwiftUIOnboardingUITests: XCTestCase {
     private func input(text: String, view: XCUIElement){
         view.tap()
         app.typeText(text)
+        var i = 0
         while text != view.value as! String {
-           view.tap()
-           view.clear()
-           app.typeText(text)
+            view.tap()
+            view.clear()
+            app.typeText(text)
+            i = i + 1
+            if i > 100 {
+                XCTFail("Could not write: \(text) in \(view.description)")
+                return
+            }
+            
         }
     }
     
@@ -336,6 +349,106 @@ class SwiftUIOnboardingUITests: XCTestCase {
         }
     }
     
+    func testWrongEncType1() {
+        guard let user = accounts["1"] else {
+            XCTFail("No account with id 1")
+            return
+        }
+        guard user.adr != "FIX ME" else {
+           XCTFail("Wrong account file loaded!")
+           return
+        }
+        
+        app.buttons["Login"].tap()
+
+        let scrollViewsQuery = app.scrollViews
+        let elementsQuery = scrollViewsQuery.otherElements
+
+
+        elementsQuery.buttons["eye.slash"].tap()
+        let mailAddrField = elementsQuery.textFields["Mail address"]
+        let pwField = elementsQuery.textFields["Password"]
+        input(text: user.adr, view: mailAddrField)
+        input(text: user.pw, view: pwField)
+            
+    
+        elementsQuery.buttons["Advanced options"].tap()
+        let userField = scrollViewsQuery.otherElements.containing(.staticText, identifier:"Welcome").children(matching: .textField).matching(identifier: "Mail address").element(boundBy: 1)
+        input(text: user.adr, view: userField)
+        
+        let imapServerField = elementsQuery.textFields["e.g. imap.web.de"]
+        let imapPortField = elementsQuery.textFields["e.g. 883"]
+        let imapEncTypeField = scrollViewsQuery.otherElements.containing(.staticText, identifier:"Welcome").children(matching: .segmentedControl).element(boundBy: 0)
+        input(text: user.hostIMAP, view: imapServerField)
+        input(text: user.portIMAP, view: imapPortField)
+        imapEncTypeField.buttons[user.conTypeIMAP].tap()
+        
+        
+        let smtpServerField = elementsQuery.textFields["e.g. smtp.web.de"]
+        let smtpPortField = elementsQuery.textFields["e.g. 559"]
+        let smtpEncTypeField = scrollViewsQuery.otherElements.containing(.staticText, identifier:"Welcome").children(matching: .segmentedControl).element(boundBy: 1)
+        input(text: user.hostSMTP, view: smtpServerField)
+        input(text: user.portSMTP, view: smtpPortField)
+        smtpEncTypeField.buttons["Plaintext"].tap()
+        
+        scrollViewsQuery.otherElements.containing(.staticText, identifier:"Welcome").element.swipeUp()
+        elementsQuery.buttons["Next"].tap()
+        let exists = elementsQuery.staticTexts["Couldn't connect to server.\n Please check your IMAP server configuration."].waitForExistence(timeout: timeoutShort)
+        if exists {
+            XCTFail("No error but wrong port for user: \(user.adr)")
+        }
+    }
+    
+    func testWrongEncType2() {
+        guard let user = accounts["1"] else {
+            XCTFail("No account with id 1")
+            return
+        }
+        guard user.adr != "FIX ME" else {
+           XCTFail("Wrong account file loaded!")
+           return
+        }
+        
+        app.buttons["Login"].tap()
+
+        let scrollViewsQuery = app.scrollViews
+        let elementsQuery = scrollViewsQuery.otherElements
+
+
+        elementsQuery.buttons["eye.slash"].tap()
+        let mailAddrField = elementsQuery.textFields["Mail address"]
+        let pwField = elementsQuery.textFields["Password"]
+        input(text: user.adr, view: mailAddrField)
+        input(text: user.pw, view: pwField)
+            
+    
+        elementsQuery.buttons["Advanced options"].tap()
+        let userField = scrollViewsQuery.otherElements.containing(.staticText, identifier:"Welcome").children(matching: .textField).matching(identifier: "Mail address").element(boundBy: 1)
+        input(text: user.adr, view: userField)
+        
+        let imapServerField = elementsQuery.textFields["e.g. imap.web.de"]
+        let imapPortField = elementsQuery.textFields["e.g. 883"]
+        let imapEncTypeField = scrollViewsQuery.otherElements.containing(.staticText, identifier:"Welcome").children(matching: .segmentedControl).element(boundBy: 0)
+        input(text: user.hostIMAP, view: imapServerField)
+        input(text: user.portIMAP, view: imapPortField)
+        imapEncTypeField.buttons[user.conTypeIMAP].tap()
+        
+        
+        let smtpServerField = elementsQuery.textFields["e.g. smtp.web.de"]
+        let smtpPortField = elementsQuery.textFields["e.g. 559"]
+        let smtpEncTypeField = scrollViewsQuery.otherElements.containing(.staticText, identifier:"Welcome").children(matching: .segmentedControl).element(boundBy: 1)
+        input(text: user.hostSMTP, view: smtpServerField)
+        input(text: user.portSMTP, view: smtpPortField)
+        smtpEncTypeField.buttons["StartTLS"].tap()
+        
+        scrollViewsQuery.otherElements.containing(.staticText, identifier:"Welcome").element.swipeUp()
+        elementsQuery.buttons["Next"].tap()
+        let exists = elementsQuery.staticTexts["Couldn't connect to server.\n Please check your IMAP server configuration."].waitForExistence(timeout: timeoutShort)
+        if exists {
+            XCTFail("No error but wrong port for user: \(user.adr)")
+        }
+    }
+    
     private static func loadAccounts() -> [String:(adr: String, pw: String, hostIMAP: String, portIMAP: String, conTypeIMAP: String, hostSMTP: String, portSMTP: String, conTypeSMTP: String)] {
         let bundle = Bundle(for: self)
         var newAccounts = [String:(adr: String, pw: String, hostIMAP: String, portIMAP: String, conTypeIMAP: String, hostSMTP: String, portSMTP: String, conTypeSMTP: String)]()
-- 
GitLab