Improve download BDD tests

This reorganizes the existing tests a bit and adds some new ones.
This commit is contained in:
Florian Bruhin 2016-09-09 16:17:59 +02:00
parent 7611281563
commit 2177aa574c
4 changed files with 105 additions and 24 deletions

Binary file not shown.

View File

@ -0,0 +1,11 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Simple downloads</title>
</head>
<body>
<a href="download.bin" id="download">download.bin</a>
<a href="download2.bin">download2.bin</a>
</body>
</html>

View File

@ -4,6 +4,41 @@ Feature: Downloading things from a website.
Given I set up a temporary download dir
And I clean old downloads
## starting downloads
Scenario: Clicking an unknown link
When I set storage -> prompt-download-directory to false
And I open data/downloads/downloads.html
And I run :click-element id download
And I wait until the download is finished
Then the downloaded file download.bin should exist
Scenario: Using :download
When I set storage -> prompt-download-directory to false
When I run :download http://localhost:(port)/data/downloads/download.bin
And I wait until the download is finished
Then the downloaded file download.bin should exist
Scenario: Using hints
When I set storage -> prompt-download-directory to false
And I open data/downloads/downloads.html
And I hint with args "links download" and follow a
And I wait until the download is finished
Then the downloaded file download.bin should exist
Scenario: Using rapid hints
# We don't expect any prompts with rapid hinting even if this is true
When I set storage -> prompt-download-directory to true
And I open data/downloads/downloads.html
And I hint with args "--rapid links download" and follow a
And I run :follow-hint s
And I wait until the download download.bin is finished
And I wait until the download download2.bin is finished
Then the downloaded file download.bin should exist
Then the downloaded file download2.bin should exist
## Regression tests
Scenario: Downloading which redirects with closed tab (issue 889)
When I set tabs -> last-close to blank
And I open data/downloads/issue889.html
@ -47,6 +82,25 @@ Feature: Downloading things from a website.
And I run :prompt-accept
Then the error "Download error: SSL handshake failed" should be shown
Scenario: Closing window with remove-finished-downloads timeout (issue 1242)
When I set ui -> remove-finished-downloads to 500
And I open data/downloads/download.bin in a new window
And I wait until the download is finished
And I run :close
And I wait 0.5s
Then no crash should happen
Scenario: Quitting with finished downloads and confirm-quit=downloads (issue 846)
Given I have a fresh instance
When I set storage -> prompt-download-directory to false
And I set ui -> confirm-quit to downloads
And I open data/downloads/download.bin
And I wait until the download is finished
And I run :close
Then qutebrowser should quit
## :download-retry
Scenario: Retrying a failed download
When I run :download http://localhost:(port)/does-not-exist
And I wait for the error "Download error: * - server replied: NOT FOUND"
@ -66,6 +120,8 @@ Feature: Downloading things from a website.
When I run :download-retry
Then the error "No failed downloads!" should be shown
## Wrong invocations
Scenario: :download with deprecated dest-old argument
When I run :download http://localhost:(port)/ deprecated-argument
Then the warning ":download [url] [dest] is deprecated - use download --dest [dest] [url]" should be shown
@ -79,6 +135,8 @@ Feature: Downloading things from a website.
When I run :download --mhtml http://foobar/
Then the error "Can only download the current page as mhtml." should be shown
## mhtml downloads
Scenario: Downloading as mhtml is available
When I open html
And I run :download --mhtml
@ -183,7 +241,7 @@ Feature: Downloading things from a website.
And I wait until the download is finished
Then "Opening *download.bin* with [*python*]" should be logged
## https://github.com/The-Compiler/qutebrowser/issues/1728
# https://github.com/The-Compiler/qutebrowser/issues/1728
Scenario: Cancelling a download that should be opened
When I set storage -> prompt-download-directory to true
@ -192,7 +250,7 @@ Feature: Downloading things from a website.
And I run :download-cancel
Then "* finished but not successful, not opening!" should be logged
## https://github.com/The-Compiler/qutebrowser/issues/1725
# https://github.com/The-Compiler/qutebrowser/issues/1725
Scenario: Directly open a download with a very long filename
When I set storage -> prompt-download-directory to true
@ -223,23 +281,26 @@ Feature: Downloading things from a website.
And I open data/downloads/download.bin
Then the download prompt should be shown with "{downloaddir}/download.bin"
## https://github.com/The-Compiler/qutebrowser/issues/1242
## storage -> remember-download-directory
Scenario: Closing window with remove-finished-downloads timeout
When I set ui -> remove-finished-downloads to 500
And I open data/downloads/download.bin in a new window
And I wait until the download is finished
And I run :close
And I wait 0.5s
Then no crash should happen
## https://github.com/The-Compiler/qutebrowser/issues/846
Scenario: Quitting with finished downloads and confirm-quit=downloads
Given I have a fresh instance
When I set storage -> prompt-download-directory to false
And I set ui -> confirm-quit to downloads
Scenario: Remembering the last download directory
When I set storage -> prompt-download-directory to true
And I set completion -> download-path-suggestion to both
And I set storage -> remember-download-directory to true
And I open data/downloads/download.bin
And I wait until the download is finished
And I run :close
Then qutebrowser should quit
And I wait for the download prompt for "*/download.bin"
# (tmpdir) equals {downloaddir}
And I run :prompt-accept (tmpdir)/subdir
And I open data/downloads/download2.bin
Then the download prompt should be shown with "{downloaddir}/subdir/download2.bin"
Scenario: Not remembering the last download directory
When I set storage -> prompt-download-directory to true
And I set completion -> download-path-suggestion to both
And I set storage -> remember-download-directory to false
And I open data/downloads/download.bin
And I wait for the download prompt for "{downloaddir}/download.bin"
# (tmpdir) equals {downloaddir}
And I run :prompt-accept (tmpdir)/subdir
And I open data/downloads/download2.bin
Then the download prompt should be shown with "{downloaddir}/download2.bin"

View File

@ -30,11 +30,17 @@ pytestmark = pytest.mark.qtwebengine_todo("Downloads not implemented yet",
run=False)
PROMPT_MSG = ("Asking question <qutebrowser.utils.usertypes.Question "
"default={!r} mode=<PromptMode.download: 5> "
"text='Save file to:'>, *")
@bdd.given("I set up a temporary download dir")
def temporary_download_dir(quteproc, tmpdir):
quteproc.set_setting('storage', 'prompt-download-directory', 'false')
quteproc.set_setting('storage', 'remember-download-directory', 'false')
quteproc.set_setting('storage', 'download-directory', str(tmpdir))
(tmpdir / 'subdir').ensure(dir=True)
@bdd.given("I clean old downloads")
@ -54,6 +60,12 @@ def wait_for_download_finished_name(quteproc, name):
message='Download {} finished'.format(name))
@bdd.when(bdd.parsers.parse('I wait for the download prompt for "{path}"'))
def wait_for_download_prompt(tmpdir, quteproc, path):
full_path = path.replace('{downloaddir}', str(tmpdir)).replace('/', os.sep)
quteproc.wait_for(message=PROMPT_MSG.format(full_path))
@bdd.when("I download an SSL page")
def download_ssl_page(quteproc, ssl_server):
quteproc.send_cmd(':download https://localhost:{}/'
@ -76,10 +88,7 @@ def download_should_exist(filename, tmpdir):
'"{path}"'))
def download_prompt(tmpdir, quteproc, path):
full_path = path.replace('{downloaddir}', str(tmpdir)).replace('/', os.sep)
msg = ("Asking question <qutebrowser.utils.usertypes.Question "
"default={full_path!r} mode=<PromptMode.download: 5> "
"text='Save file to:'>, *".format(full_path=full_path))
quteproc.wait_for(message=msg)
quteproc.wait_for(message=PROMPT_MSG.format(full_path))
quteproc.send_cmd(':leave-mode')