another.im-ios/Monal/MonalUITests/MonalUITests.swift
2024-11-18 15:53:52 +01:00

202 lines
6.9 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// MonalUITests.swift
// MonalUITests
//
// Created by Friedrich Altheide on 06.03.21.
// Copyright © 2021 Monal.im. All rights reserved.
//
import XCTest
class MonalUITests: XCTestCase {
override func setUpWithError() throws {
// Put setup code here. This method is called before the invocation of each test method in the class.
// In UI tests it is usually best to stop immediately when a failure occurs.
continueAfterFailure = false
// In UI tests its important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
}
override func tearDownWithError() throws {
// Put teardown code here. This method is called after the invocation of each test method in the class.
}
private func intro(app: XCUIApplication)
{
// wait for launch
sleep(1)
let elementsQuery = app.scrollViews["intro_scroll"].otherElements
elementsQuery.buttons["Welcome to Monal, Chat for free with your friends, colleagues and family!"].swipeLeft()
sleep(1)
elementsQuery.buttons["Choices Galore, Use your existing account or make a new one on the many servers around the world"].swipeLeft()
sleep(1)
elementsQuery.buttons["Escape The Garden, You are not trapped in a garden. Talk to anyone else without anyone tracking you."].swipeLeft()
sleep(1)
elementsQuery.buttons["Spread The Word, If you like Monal, please let others know and leave a review"].swipeLeft()
sleep(1)
}
private func introSkip(app: XCUIApplication)
{
// wait for launch
sleep(1)
app.buttons["Skip"].tap()
sleep(1)
}
private func createStartArgs() -> [String]
{
return createStartArgs(extraArgs: [])
}
private func createStartArgs(extraArgs: [String]) -> [String]
{
var startArgs : [String] = ["--disableAnimations"]
// append extraArgs
startArgs.append(contentsOf: extraArgs)
return startArgs
}
private func sendMsg(txt: String)
{
let app = XCUIApplication()
sleep(5)
XCTAssertTrue(app.buttons["microphone"].exists)
XCTAssertFalse(app.buttons["Send"].exists)
app.textViews["NewChatMessageTextField"].tap()
app.textViews["NewChatMessageTextField"].typeText(txt)
// send button should appeared
XCTAssertTrue(app.buttons["send"].exists)
XCTAssertFalse(app.buttons["microphone"].exists)
app.buttons["send"].tap()
// wait for sending on slow systems
sleep(5)
// send button should be hidden
XCTAssertFalse(app.buttons["send"].exists)
XCTAssertTrue(app.buttons["microphone"].exists)
}
func test_0001_DBInit() throws {
let app = XCUIApplication()
app.launchArguments = createStartArgs(extraArgs: ["--reset"])
app.launch()
}
func test_0002_Intro() throws
{
let app = XCUIApplication()
app.launchArguments = createStartArgs(extraArgs: ["--reset"])
app.launch()
intro(app: app)
let elementsQuery2 = app.scrollViews.otherElements
elementsQuery2.textFields["Account@something.com"].tap()
elementsQuery2.secureTextFields["Password"].tap()
}
func test_0003_IntroSkip() throws
{
let app = XCUIApplication()
app.launchArguments = createStartArgs(extraArgs: ["--reset"])
app.launch()
introSkip(app: app)
app.scrollViews.otherElements.buttons["Set up an account later"].tap()
let chatsNavigationBar = app.navigationBars["Chats"]
chatsNavigationBar.buttons["Add"].tap()
let closeButton = app.alerts["No enabled account found"].scrollViews.otherElements.buttons["Close"]
closeButton.tap()
chatsNavigationBar.buttons["Compose"].tap()
closeButton.tap()
}
func test_0005_Register() throws
{
let app = XCUIApplication()
app.launchArguments = createStartArgs(extraArgs: ["--reset"])
app.launch()
introSkip(app: app)
let elementsQuery = app.scrollViews.otherElements
let registerStaticText = elementsQuery.buttons["Register"]
registerStaticText.tap()
app.scrollViews.otherElements.buttons["Terms of service"].tap()
// wait for safari window to open
sleep(5)
app.buttons["Done"].tap()
elementsQuery.textFields["Username"].tap()
// create random username
elementsQuery.textFields["Username"].typeText(String(format: "MonalTestclient-%d", Int.random(in: 1000..<999999)))
elementsQuery.secureTextFields["Password"].tap()
elementsQuery.secureTextFields["Password"].typeText(randomPassword())
registerStaticText.tap()
// wait for register hud
sleep(10)
let startChattingStaticText = app.buttons["Start Chatting"]
startChattingStaticText.tap()
sleep(1)
app.navigationBars["Privacy Settings"].buttons["Close"].tap()
startChattingStaticText.tap()
}
func test_0007_PlusAndContactsButtons() throws {
let app = XCUIApplication()
app.launchArguments = createStartArgs()
app.launch()
let chatsNavigationBar = app.navigationBars["Chats"]
sleep(1)
chatsNavigationBar.buttons["Add"].tap()
let tablesQuery = app.tables
tablesQuery.staticTexts["Add a New Contact"].tap()
app.navigationBars["Add Contact"].buttons["New"].tap()
tablesQuery.staticTexts["Join a Group Chat"].tap()
app.navigationBars["Join Group Chat"].buttons["New"].tap()
tablesQuery.staticTexts["View Contact Requests"].tap()
app.navigationBars["Contact Requests"].buttons["New"].tap()
app.navigationBars["New"].buttons["Close"].tap()
chatsNavigationBar.buttons["Compose"].tap()
let contactsNavigationBar = app.navigationBars["Contacts"]
contactsNavigationBar.buttons["Close"].tap()
}
func test_0008_AddContact() throws {
let app = XCUIApplication()
app.launchArguments = createStartArgs()
app.launch()
app.navigationBars["Chats"].buttons["Add"].tap()
let tablesQuery = app.tables
tablesQuery.staticTexts["Add a New Contact"].tap()
tablesQuery.textFields["Contact Jid"].tap()
tablesQuery.textFields["Contact Jid"].typeText("echo@jabber.fu-berlin.de")
tablesQuery.staticTexts["Add Contact"].tap()
app.alerts["Permission Requested"].scrollViews.otherElements.buttons["Close"].tap()
// wait for segue to chatView
sleep(10)
XCTAssertFalse(app.buttons["send"].exists)
app.textViews["NewChatMessageTextField"].tap()
sendMsg(txt: "ping")
sendMsg(txt: randomString(length: 100))
sendMsg(txt: randomString(length: 1000))
sendMsg(txt: randomString(length: 2000))
}
}