Beispiel #1
0
def test_url_recheck_with_all_valid(session, test_user):
    runner = CliRunner()

    bookmark = make_bookmark()
    sut.set_bookmark(session, test_user.user_uuid, bookmark)
    session.commit()

    result = runner.invoke(sut.url_recheck)
    assert result.exit_code == 0
def make_fulltext_indexed_bookmark(
    session: Session, user: User, bookmark: sut.Bookmark, full_text: str
):
    # FIXME: this really shows the need for a library of common db functions
    url_uuid = sut.set_bookmark(session, user.user_uuid, bookmark)
    crawl_uuid = uuid4()
    body_uuid = uuid4()

    crawl_req = sut.CrawlRequest(
        crawl_uuid=crawl_uuid,
        url_uuid=url_uuid,
        requested=datetime(2018, 1, 3),
        got_response=True,
    )
    crawl_resp = sut.CrawlResponse(
        crawl_uuid=crawl_uuid,
        headers={"content-type": "text/html"},
        body_uuid=body_uuid,
        status_code=200,
    )
    fulltext_obj = sut.FullText(
        url_uuid=url_uuid,
        crawl_uuid=crawl_uuid,
        inserted=datetime.utcnow().replace(tzinfo=timezone.utc),
        full_text=full_text,
        tsvector=func.to_tsvector(full_text),
    )
    session.add_all([crawl_req, crawl_resp, fulltext_obj])
Beispiel #3
0
def test_create_bookmark_form_add_tag(
    signed_in_client,
    viewfunc,
    tags_for_param,
    add_tag,
    remove_tag,
    expected_tags,
    session,
    test_user,
    cache,
):
    if viewfunc == "quarchive.edit_bookmark_form":
        bookmark = make_bookmark()
        sut.set_bookmark(session, cache, test_user.user_uuid, bookmark)
        url = bookmark.url.to_string()
    else:
        url = "http://example.com"
    title = "Example"
    description = "A sample website"
    unread = "on"
    tags = ",".join(tags_for_param)
    add_tag = add_tag
    params = {
        "username": test_user.username,
        "url": url,
        "title": title,
        "description": description,
        "unread": unread,
        "tags": tags,
        "add-tag": add_tag,
        "remove-tag": remove_tag,
    }
    if viewfunc == "quarchive.edit_bookmark_form":
        params["url_uuid"] = bookmark.url.url_uuid
    response = signed_in_client.get(flask.url_for(viewfunc, **params), )

    assert response.status_code == 200
    form_as_dict = get_form_as_dict(response)

    assert form_as_dict["url"].attrib["value"] == url
    assert form_as_dict["title"].attrib["value"] == title
    assert form_as_dict["description"].text == description
    assert "checked" in form_as_dict["unread"].attrib
    assert form_as_dict["tags"].attrib["value"] == ",".join(expected_tags)
    assert "value" not in form_as_dict["add-tag"].attrib
Beispiel #4
0
def test_pinboard_uses_merge(session, tmpdir, test_user):
    runner = CliRunner()

    existing_bookmark = make_bookmark(
        created=datetime(2018, 2, 1, tzinfo=timezone.utc),
        updated=datetime(2018, 2, 1, tzinfo=timezone.utc),
        description="as of 2018-02",
    )
    sut.set_bookmark(session, test_user.user_uuid, existing_bookmark)
    session.commit()

    pinboard_bookmarks = [
        dict(
            href=existing_bookmark.url.to_string(),
            extended="",
            description="as of 2018-01-01",
            time=datetime(2018, 1, 12, tzinfo=timezone.utc).isoformat(),
            toread=False,
            deleted=False,
        )
    ]
    json_path = tmpdir.join("pinboard.json")
    with open(str(json_path), "w") as json_file:
        json.dump(pinboard_bookmarks, json_file)

    runner.invoke(
        sut.pinboard_import,
        [str(test_user.user_uuid), str(json_path), "--as-of", "2018-01-01"],
        catch_exceptions=False,
    )

    url_uuid = existing_bookmark.url.url_uuid
    assert (
        session.query(sut.SQLABookmark)
        .filter(sut.SQLABookmark.url_uuid == url_uuid)
        .count()
        == 1
    )
    final_bookmark = sut.get_bookmark_by_url(
        session, test_user.user_uuid, existing_bookmark.url.to_string()
    )
    assert final_bookmark is not None
    assert final_bookmark.created == datetime(2018, 1, 12, tzinfo=timezone.utc)
    assert final_bookmark.updated == datetime(2018, 2, 1, tzinfo=timezone.utc)
Beispiel #5
0
def test_enqueue_crawls_for_uncrawled_urls(session, eager_celery, mock_s3, test_user):
    bookmark = make_bookmark()
    sut.set_bookmark(session, test_user.user_uuid, bookmark)
    session.commit()
    url = bookmark.url

    responses.add(
        responses.GET, re.compile(r"http://example.com/.*"), body=b"hello", stream=True
    )
    sut.enqueue_crawls_for_uncrawled_urls()

    resp_query = (
        session.query(sut.CrawlResponse)
        .join(sut.CrawlRequest)
        .join(sut.SQLAUrl)
        .filter(
            sut.SQLAUrl.scheme == url.scheme,
            sut.SQLAUrl.netloc == url.netloc,
            sut.SQLAUrl.path == url.path,
            sut.SQLAUrl.query == url.query,
            sut.SQLAUrl.fragment == url.fragment,
        )
    )
    assert resp_query.count() == 1
Beispiel #6
0
def bad_uuid_bookmark(session, test_user):
    url_uuid = UUID("f" * 32)
    bad_uuid_url = sut.URL(
        url_uuid=url_uuid,
        scheme="http",
        netloc="example.com",
        path="/bad-uuid",
        query="",
        fragment="",
    )
    bookmark = make_bookmark(url=bad_uuid_url, tag_triples=frozenset())
    bookmark_uuid = sut.set_bookmark(session, test_user.user_uuid, bookmark)
    session.commit()

    yield
    # teardown is required to avoid leaving a dirty db around
    delete_bookmark(session, test_user.user_uuid, bookmark_uuid)
    delete_url(session, url_uuid)
    session.commit()
Beispiel #7
0
def bad_canonicalisation_bookmark(session, test_user):
    # Needs a trailing slash
    url_uuid = uuid5(UUID_URL_NAMESPACE, "http://example.com")
    bad_uuid_url = sut.URL(
        url_uuid=url_uuid,
        scheme="http",
        netloc="example.com",
        path="",
        query="",
        fragment="",
    )
    bookmark = make_bookmark(url=bad_uuid_url, tag_triples=frozenset())
    bookmark_uuid = sut.set_bookmark(session, test_user.user_uuid, bookmark)
    session.commit()

    yield
    # teardown is required to avoid leaving a dirty db around
    delete_bookmark(session, test_user.user_uuid, bookmark_uuid)
    delete_url(session, url_uuid)
    session.commit()
Beispiel #8
0
def bad_scheme_bookmark(session, test_user):
    url_uuid = uuid5(UUID_URL_NAMESPACE, "about:blank")
    bad_scheme_url = sut.URL(
        url_uuid=url_uuid,
        scheme="about",
        netloc="",
        path="blank",
        query="",
        fragment="",
    )

    bookmark = make_bookmark(url=bad_scheme_url, tag_triples=frozenset())
    bookmark_uuid = sut.set_bookmark(session, test_user.user_uuid, bookmark)
    session.commit()

    yield
    # teardown is required to avoid leaving a dirty db around
    delete_bookmark(session, test_user.user_uuid, bookmark_uuid)
    delete_url(session, url_uuid)
    session.commit()