# vim: ft=cucumber fileencoding=utf-8 sts=4 sw=4 et:
Feature: Notifications
HTML5 notification API interaction
Background:
Given I open data/javascript/notifications.html
And I set content.notifications.enabled to true
And I run :click-element id button
And I clean up the notification server
Scenario: Notification is shown
When I run :click-element id show-button
Then the javascript message "notification shown" should be logged
And 1 notification should be presented
And the notification should have image dimensions 64x64 # qutebrowser logo
Scenario: Notification containing escaped characters
Given the notification server supports body markup
When I run :click-element id show-symbols-button
Then the javascript message "notification shown" should be logged
And the notification should have body "<< && >>"
And the notification should have title "<< && >>"
Scenario: Notification containing escaped characters with no body markup
Given the notification server doesn't support body markup
When I run :click-element id show-symbols-button
Then the javascript message "notification shown" should be logged
And the notification should have body "<< && >>"
And the notification should have title "<< && >>"
Scenario: Notification with RGB image
When I run :click-element id show-image-button-noalpha
Then the javascript message "notification shown" should be logged
And the notification should have title "RGB"
And the notification should have image dimensions 64x64
Scenario: Notification with RGBA image
When I run :click-element id show-image-button
Then the javascript message "notification shown" should be logged
And the notification should have title "RGBA"
And the notification should have image dimensions 64x64
Scenario: Notification with big image
When I run :click-element id show-image-button-big
Then the javascript message "notification shown" should be logged
And the notification should have title "Big"
And the notification should have image dimensions 320x160
Scenario: Notification with padded image
When I run :click-element id show-image-button-padded
Then the javascript message "notification shown" should be logged
And the notification should have title "Padded"
And the notification should have image dimensions 46x46
Scenario: Notification with padded image 2
When I run :click-element id show-image-button-padded-2
Then the javascript message "notification shown" should be logged
And the notification should have title "Padded 2"
And the notification should have image dimensions 239x239
Scenario: Closing notification via web
When I run :click-element id show-closing-button
Then the javascript message "notification shown" should be logged
And the javascript message "notification closed" should be logged
And the notification should be closed via web
# As a WORKAROUND for https://www.riverbankcomputing.com/pipermail/pyqt/2020-May/042918.html
# and other issues, those can only run with PyQtWebEngine >= 5.15.0
#
# For these tests, we need to wait for the notification to be shown before
# we try to close it, otherwise we wind up in race-condition-ish
# situations.
@pyqtwebengine>=5.15.0
Scenario: Replacing existing notifications
When I run :click-element id show-replacing-button
Then the javascript message "i=1 notification shown" should be logged
And the javascript message "i=2 notification shown" should be logged
And the javascript message "i=3 notification shown" should be logged
And 1 notification should be presented
And the notification should have title "i=3"
@pyqtwebengine<5.15.0
Scenario: Replacing existing notifications (old Qt)
When I run :click-element id show-replacing-button
Then the javascript message "i=1 notification shown" should be logged
And "Ignoring notification tag 'counter' due to PyQt bug" should be logged
And the javascript message "i=2 notification shown" should be logged
And "Ignoring notification tag 'counter' due to PyQt bug" should be logged
And the javascript message "i=3 notification shown" should be logged
And "Ignoring notification tag 'counter' due to PyQt bug" should be logged
And 3 notifications should be presented
And the notification should have title "i=3" # last one
@pyqtwebengine>=5.15.0
Scenario: User closes presented notification
When I run :click-element id show-button
And I wait for the javascript message "notification shown"
And I close the notification
Then the javascript message "notification closed" should be logged
@pyqtwebengine<5.15.0
Scenario: User closes presented notification (old Qt)
When I run :click-element id show-button
And I wait for the javascript message "notification shown"
And I close the notification
Then "Ignoring close request for notification * due to PyQt bug" should be logged
And the javascript message "notification closed" should not be logged
And no crash should happen
@pyqtwebengine>=5.15.0
Scenario: User closes some other application's notification
When I run :click-element id show-button
And I wait for the javascript message "notification shown"
And I close the notification with id 1234
Then the javascript message "notification closed" should not be logged
@pyqtwebengine>=5.15.0
Scenario: User clicks presented notification
When I run :click-element id show-button
And I wait for the javascript message "notification shown"
And I click the notification
Then the javascript message "notification clicked" should be logged
@pyqtwebengine<5.15.0
Scenario: User clicks presented notification (old Qt)
When I run :click-element id show-button
And I wait for the javascript message "notification shown"
And I click the notification
Then "Ignoring click request for notification * due to PyQt bug" should be logged
Then the javascript message "notification clicked" should not be logged
And no crash should happen
@pyqtwebengine>=5.15.0
Scenario: User clicks some other application's notification
When I run :click-element id show-button
And I wait for the javascript message "notification shown"
And I click the notification with id 1234
Then the javascript message "notification clicked" should not be logged
@pyqtwebengine>=5.15.0
Scenario: Unknown action with some other application's notification
When I run :click-element id show-button
And I wait for the javascript message "notification shown"
And I trigger a custom action on the notification with id 1234
Then no crash should happen
Scenario: Notification via messages
When I set content.notifications.presenter to messages
And I run :click-element id show-button
And I wait for the javascript message "notification shown"
Then the message "Notification from http://localhost:*/:
notification title
notification body" should be shown
Scenario: Notification via messages with image
When I set content.notifications.presenter to messages
And I run :click-element id show-image-button
And I wait for the javascript message "notification shown"
Then the message "Notification from http://localhost:*/: (image not shown)
RGBA
" should be shown