File: test_view.py

package info (click to toggle)
jupyter-server 2.15.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,068 kB
  • sloc: python: 21,064; makefile: 186; sh: 25; javascript: 14
file content (62 lines) | stat: -rw-r--r-- 1,666 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
"""test view handler"""

from html.parser import HTMLParser

import pytest
import tornado

from jupyter_server.utils import url_path_join

from .utils import expected_http_error


class IFrameSrcFinder(HTMLParser):
    """Minimal HTML parser to find iframe.src attr"""

    def __init__(self):
        super().__init__()
        self.iframe_src = None

    def handle_starttag(self, tag, attrs):
        if tag.lower() == "iframe":
            for attr, value in attrs:
                if attr.lower() == "src":
                    self.iframe_src = value
                    return


def find_iframe_src(html):
    """Find the src= attr of an iframe on the page

    Assumes only one iframe
    """
    finder = IFrameSrcFinder()
    finder.feed(html)
    return finder.iframe_src


@pytest.mark.parametrize(
    "exists, name",
    [
        (False, "nosuchfile.html"),
        (False, "nosuchfile.bin"),
        (True, "exists.html"),
        (True, "exists.bin"),
    ],
)
async def test_view(jp_fetch, jp_serverapp, jp_root_dir, exists, name):
    """Test /view/$path for a few cases"""
    if exists:
        jp_root_dir.joinpath(name).write_text(name)

    if not exists:
        with pytest.raises(tornado.httpclient.HTTPClientError) as e:
            await jp_fetch("view", name, method="GET")
        assert expected_http_error(e, 404), [name, e]
    else:
        r = await jp_fetch("view", name, method="GET")
        assert r.code == 200
        assert r.headers["content-type"] == "text/html; charset=UTF-8"
        html = r.body.decode()
        src = find_iframe_src(html)
        assert src == url_path_join(jp_serverapp.base_url, f"/files/{name}")