From ff93981e66fe7ec633046a21d355b193c9f1e388 Mon Sep 17 00:00:00 2001 From: Nikhil Dhandre Date: Thu, 19 Dec 2019 23:49:02 +0530 Subject: [PATCH] Added test for parse_file, link_status checks --- linkstatus/linkstatus.py | 2 +- tests/conftest.py | 42 +++++++++++++++++++++++-------------- tests/data.yaml | 8 +++---- tests/data/markdown_file.md | 2 +- tests/test_methods.py | 30 ++++++++++++++++++++++++++ 5 files changed, 62 insertions(+), 22 deletions(-) diff --git a/linkstatus/linkstatus.py b/linkstatus/linkstatus.py index e262010..3bf2b41 100644 --- a/linkstatus/linkstatus.py +++ b/linkstatus/linkstatus.py @@ -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: diff --git a/tests/conftest.py b/tests/conftest.py index 1caea61..7214604 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,4 +1,5 @@ import os +from collections import namedtuple import pytest from ruamel.yaml import safe_load @@ -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 diff --git a/tests/data.yaml b/tests/data.yaml index 4098225..f778728 100644 --- a/tests/data.yaml +++ b/tests/data.yaml @@ -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 @@ -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 diff --git a/tests/data/markdown_file.md b/tests/data/markdown_file.md index 1ef2c28..912d842 100644 --- a/tests/data/markdown_file.md +++ b/tests/data/markdown_file.md @@ -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. diff --git a/tests/test_methods.py b/tests/test_methods.py index 5e02927..61d6d44 100644 --- a/tests/test_methods.py +++ b/tests/test_methods.py @@ -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 = [] @@ -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']}"