save button improvement and tests updated

This commit is contained in:
Mauro Romito
2023-01-17 18:10:35 +01:00
parent 313f715093
commit e694e89235
5 changed files with 38 additions and 33 deletions

View File

@@ -23,7 +23,8 @@
"kind" : "remoteSourceControl",
"location" : "https://github.com/matrix-org/matrix-wysiwyg-composer-swift",
"state" : {
"revision" : "534ee5bae5e8de69ed398937b5edb7b5f21551d2"
"revision" : "6927cb878376136c4a03d919b689af8dfbdad080",
"version" : "0.19.0"
}
},
{

View File

@@ -59,20 +59,31 @@ extension ComposerLinkActionViewState {
}
var isSaveButtonDisabled: Bool {
guard isValidLink else { return true }
guard !bindings.linkUrl.isEmpty else { return true }
switch linkAction {
case .createWithText: return bindings.text.isEmpty
default: return false
case .create: return false
case .edit: return !bindings.hasEditedUrl
}
}
private var isValidLink: Bool {
guard let url = URL(string: bindings.linkUrl) else { return false }
return UIApplication.shared.canOpenURL(url)
}
}
struct ComposerLinkActionBindings {
var text: String
var linkUrl: String
private let initialLinkUrl: String
fileprivate var hasEditedUrl = false
var linkUrl: String {
didSet {
if !hasEditedUrl && linkUrl != initialLinkUrl {
hasEditedUrl = true
}
}
}
init(text: String, linkUrl: String) {
self.text = text
self.linkUrl = linkUrl
self.initialLinkUrl = linkUrl
}
}

View File

@@ -29,9 +29,7 @@ final class ComposerLinkActionUITests: MockScreenTestCase {
let linkTextField = app.textFields["linkTextField"]
XCTAssertTrue(linkTextField.exists)
linkTextField.tap()
linkTextField.typeText("invalid url")
XCTAssertFalse(saveButton.isEnabled)
linkTextField.clearAndTypeText("https://element.io")
linkTextField.clearAndTypeText("element.io")
XCTAssertTrue(saveButton.isEnabled)
}
@@ -47,7 +45,7 @@ final class ComposerLinkActionUITests: MockScreenTestCase {
let linkTextField = app.textFields["linkTextField"]
XCTAssertTrue(linkTextField.exists)
linkTextField.tap()
linkTextField.typeText("https://element.io")
linkTextField.typeText("element.io")
XCTAssertFalse(saveButton.isEnabled)
textTextField.tap()
textTextField.typeText("test")
@@ -60,13 +58,15 @@ final class ComposerLinkActionUITests: MockScreenTestCase {
XCTAssertTrue(app.buttons[VectorL10n.cancel].exists)
let saveButton = app.buttons[VectorL10n.save]
XCTAssertTrue(saveButton.exists)
XCTAssertTrue(saveButton.isEnabled)
XCTAssertFalse(saveButton.isEnabled)
XCTAssertFalse(app.textFields["textTextField"].exists)
let linkTextField = app.textFields["linkTextField"]
XCTAssertTrue(linkTextField.exists)
let value = linkTextField.value as? String
XCTAssertEqual(value, "https://element.io")
linkTextField.clearAndTypeText("invalid url")
linkTextField.clearAndTypeText("")
XCTAssertFalse(saveButton.isEnabled)
linkTextField.clearAndTypeText("matrix.org")
XCTAssertTrue(saveButton.isEnabled)
}
}

View File

@@ -53,29 +53,20 @@ final class ComposerLinkActionViewModelTests: XCTestCase {
}
func testEditDefaultState() {
let link = "https://element.io"
let link = "element.io"
setUp(with: .edit(link: link))
XCTAssertEqual(context.viewState.bindings.text, "")
XCTAssertEqual(context.viewState.bindings.linkUrl, link)
XCTAssertFalse(context.viewState.isSaveButtonDisabled)
XCTAssertTrue(context.viewState.isSaveButtonDisabled)
XCTAssertTrue(context.viewState.shouldDisplayRemoveButton)
XCTAssertFalse(context.viewState.shouldDisplayTextField)
XCTAssertEqual(context.viewState.title, VectorL10n.wysiwygComposerLinkActionEditTitle)
}
func testUrlValidityCheck() {
setUp(with: .create)
XCTAssertTrue(context.viewState.isSaveButtonDisabled)
context.linkUrl = "invalid url"
XCTAssertTrue(context.viewState.isSaveButtonDisabled)
context.linkUrl = "https://element.io"
XCTAssertFalse(context.viewState.isSaveButtonDisabled)
}
func testTextNotEmptyCheck() {
setUp(with: .createWithText)
XCTAssertTrue(context.viewState.isSaveButtonDisabled)
context.linkUrl = "https://element.io"
context.linkUrl = "element.io"
XCTAssertTrue(context.viewState.isSaveButtonDisabled)
context.text = "text"
XCTAssertFalse(context.viewState.isSaveButtonDisabled)
@@ -92,7 +83,7 @@ final class ComposerLinkActionViewModelTests: XCTestCase {
}
func testRemoveAction() {
setUp(with: .edit(link: "https://element.io"))
setUp(with: .edit(link: "element.io"))
var result: ComposerLinkActionViewModelResult!
viewModel.callback = { value in
result = value
@@ -107,7 +98,7 @@ final class ComposerLinkActionViewModelTests: XCTestCase {
viewModel.callback = { value in
result = value
}
let link = "https://element.io"
let link = "element.io"
context.linkUrl = link
context.send(viewAction: .save)
XCTAssertEqual(result, .performOperation(.setLink(urlString: link)))
@@ -119,7 +110,7 @@ final class ComposerLinkActionViewModelTests: XCTestCase {
viewModel.callback = { value in
result = value
}
let link = "https://element.io"
let link = "element.io"
context.linkUrl = link
let text = "test"
context.text = text
@@ -128,13 +119,15 @@ final class ComposerLinkActionViewModelTests: XCTestCase {
}
func testSaveActionForEdit() {
setUp(with: .edit(link: "https://element.io"))
setUp(with: .edit(link: "element.io"))
var result: ComposerLinkActionViewModelResult!
viewModel.callback = { value in
result = value
}
let link = "https://matrix.org"
XCTAssertTrue(context.viewState.isSaveButtonDisabled)
let link = "matrix.org"
context.linkUrl = link
XCTAssertFalse(context.viewState.isSaveButtonDisabled)
context.send(viewAction: .save)
XCTAssertEqual(result, .performOperation(.setLink(urlString: link)))
}

View File

@@ -53,7 +53,7 @@ packages:
branch: main
WysiwygComposer:
url: https://github.com/matrix-org/matrix-wysiwyg-composer-swift
revision: 534ee5bae5e8de69ed398937b5edb7b5f21551d2
version: 0.19.0
DeviceKit:
url: https://github.com/devicekit/DeviceKit
majorVersion: 4.7.0