Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,9 @@ import WebKit
func onMessageReady() {
timeoutWorkItem.cancel()
webview?.evaluateJavaScript("window.spLegislation=\"\(self.campaignType.rawValue)\"")
messageUIDelegate?.loaded(self)
if !isBeingPresented, view.window == nil { // make sure current ViewController is not being presented
messageUIDelegate?.loaded(self)
}
}

func onPmReady() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,26 @@ class RenderingAppMock: WKWebView {
}
}

class DuplicatedShowMessageRenderingAppMock: WKWebView {
override func load(_ request: URLRequest) -> WKNavigation? {
loadHTMLString("""
<html>
<header>
<script>
window.addEventListener("load", () => {
setTimeout(() => {
window.postMessage({ name: "sp.showMessage" }, "*");
window.postMessage({ name: "sp.showMessage" }, "*");
}, 500);
})
</script>
</header>
<body></body>
</html>
""", baseURL: URL(string: "https://example.com")!)
}
}

func loadMessage(
with RenderingAppClass: WKWebView.Type,
delegate: SPMessageUIDelegate,
Expand Down Expand Up @@ -139,5 +159,12 @@ class GenericWebMessageViewControllerSpec: QuickSpec {
}
}
}

describe("when rendering app dispatches sp.showMessage multiple times") {
it("calls onMessageReady only once") {
loadMessage(with: DuplicatedShowMessageRenderingAppMock.self, delegate: delegate)
expect(delegate.loadedCallCount).toEventually(equal(1), timeout: .seconds(10))
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,22 @@
import Foundation
@testable import ConsentViewController

class MockedGenericWebMessageViewController: GenericWebMessageViewController {
var mockIsBeingPresented = false
override var isBeingPresented: Bool { mockIsBeingPresented }
}

class MessageUIDelegateSpy: SPMessageUIDelegate {
var loadedCallCount: Int = 0
var loadedWasCalled = false
var onErrorWasCalled = false
var actionCalledWith: SPAction?
var onLoaded: ((UIViewController?) -> Void)?

func loaded(_ controller: UIViewController) {
(controller as? MockedGenericWebMessageViewController)?.mockIsBeingPresented = true
loadedWasCalled = true
loadedCallCount += 1
onLoaded?(controller)
}

Expand Down
Loading