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
2 changes: 1 addition & 1 deletion linkstatus/linkstatus.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
CONTEXT_SETTINGS = dict(help_option_names=["-h", "--help"])


def link_status(link, timeout):
def link_status(link, timeout=5):
"""Check link status

Args:
Expand Down
42 changes: 26 additions & 16 deletions tests/conftest.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import os
from collections import namedtuple

import pytest
from ruamel.yaml import safe_load
Expand All @@ -13,24 +14,33 @@ def data():
return data


SOURCES_TYPE = {
"file": [os.path.join(BASE_DIR, "data", "markdown_file.md")],
"files": [
os.path.join(BASE_DIR, "data", "text_file"),
os.path.join(BASE_DIR, "data", "recursive", "recursive_text_file.txt"),
],
"directory": [os.path.join(BASE_DIR, "data")],
"directories": [os.path.join(BASE_DIR, "data"), os.path.join(BASE_DIR, "data", "recursive")],
"file-directory": [os.path.join(BASE_DIR, "data", "text_file"), os.path.join(BASE_DIR, "data")],
}


@pytest.fixture(
params=["file", "files", "directory", "directories", "file-directory"], scope="module"
)
def sources(request):
SOURCES_TYPE = {
"file": [os.path.join(BASE_DIR, "data", "text_file")],
"files": [
os.path.join(BASE_DIR, "data", "text_file"),
os.path.join(BASE_DIR, "data", "recursive", "recursive_text_file.txt"),
],
"directory": [os.path.join(BASE_DIR, "data")],
"directories": [
os.path.join(BASE_DIR, "data"),
os.path.join(BASE_DIR, "data", "recursive"),
],
"file-directory": [
os.path.join(BASE_DIR, "data", "text_file"),
os.path.join(BASE_DIR, "data"),
],
}
return SOURCES_TYPE[request.param]


@pytest.fixture(scope="module")
def files(data):
File = namedtuple("File", ["name", "abs_path", "link_data"])
_files = []

for d, f in data.items():
dir = os.path.join(f["parent"], d) if f["parent"] else d

for f, link_data in data[d]["files"].items():
_files.append(File(f, os.path.join(BASE_DIR, dir, f), link_data))
return _files
8 changes: 4 additions & 4 deletions tests/data.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ data:
status: True
line: 'L5'
'http://www.google.com':
status: True,
status: True
line: 'L6'
'https://example.com':
status: True,
status: True
line: 'L7'
'https://github.com/xyz_foo':
status: False
Expand Down Expand Up @@ -53,10 +53,10 @@ recursive:
status: True
line: 'L5'
'http://www.google.com':
status: True,
status: True
line: 'L6'
'https://example.com':
status: True,
status: True
line: 'L7'
'https://github.com/xyz_foo':
status: False
Expand Down
2 changes: 1 addition & 1 deletion tests/data/markdown_file.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
Or leave it empty and use the [link text itself].

URLs and URLs in angle brackets will automatically get turned into links.
http://www.example.com.
http://www.example.com

Some text to show that the reference links can follow later.

Expand Down
30 changes: 30 additions & 0 deletions tests/test_methods.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,14 @@
import pytest

from linkstatus.linkstatus import all_files
from linkstatus.linkstatus import link_status
from linkstatus.parser import parse_file


@pytest.mark.parametrize("recursive", [True, False], ids=["recursive", "non-recursive"])
def test_all_files(sources, recursive):
"""Test file collection with all_files method"""

collected_files = all_files(sources, recursive=recursive)
expected_files = []

Expand All @@ -28,3 +32,29 @@ def test_all_files(sources, recursive):
expected_files.extend(inside_files)

assert set(collected_files) == set(expected_files)


def test_parse_file(files):
"""test parse_file l.e. links and line number"""

for file in files:
parse_data = parse_file(file.abs_path)
assert len(file.link_data) == len(
parse_data
), f"File {file.abs_path} link count not matched with expected"

for links in parse_data:
for link in links.urls:
assert file.link_data.get(link), f"link {link} not found in file {file.abs_path}"
assert (
str(links.line) in file.link_data.get(link)["line"]
), f"Line number not matched"


def test_link_status(files):
"""test status of link"""

for file in files:
for link, data in file.link_data.items():
status, code = link_status(link)
assert status == data["status"], f"{link}: status is {status} expected {data['status']}"