aboutsummaryrefslogtreecommitdiff
path: root/tests/test_validations.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_validations.py')
-rw-r--r--tests/test_validations.py191
1 files changed, 114 insertions, 77 deletions
diff --git a/tests/test_validations.py b/tests/test_validations.py
index 9d70f6e..30e59a3 100644
--- a/tests/test_validations.py
+++ b/tests/test_validations.py
@@ -15,88 +15,125 @@
# You should have received a copy of the GNU General Public License
# along with Wikiget. If not, see <https://www.gnu.org/licenses/>.
+from pathlib import Path
+from re import Match
+from typing import Optional
+
+import pytest
+
from wikiget.validations import valid_file, valid_site, verify_hash
-def test_invalid_site_input():
- """
- Invalid site strings should not return regex match objects.
- """
- invalid_input = [
- "example.com",
- "vim.wikia.com",
- "en.wikipedia.com",
- "en.wikimpedia.org",
- ]
- for i in invalid_input:
- site_match = valid_site(i)
- assert site_match is None
-
-
-def test_valid_site_input():
- """
- Valid site strings should return regex match objects.
- """
- valid_input = [
- "en.wikipedia.org",
- "commons.wikimedia.org",
- "de.wikipedia.org",
- "meta.wikimedia.org",
- ]
- for i in valid_input:
- site_match = valid_site(i)
- assert site_match is not None
-
-
-def test_file_regex():
- """
- File regex should return a match object with match groups corresponding
- to the file prefix and name.
- """
- i = "File:Example.jpg"
- file_match = valid_file(i)
- assert file_match is not None
- assert file_match.group(0) == "File:Example.jpg" # entire match
- assert file_match.group(1) == "File:" # first group
- assert file_match.group(2) == "Example.jpg" # second group
-
-
-def test_invalid_file_input():
- """
- Invalid file strings should not return regex match objects.
- """
- invalid_input = ["file:example", "example.jpg", "Foo Bar.gif", "Fil:Example.jpg"]
- for i in invalid_input:
- file_match = valid_file(i)
- assert file_match is None
-
-
-def test_valid_file_input():
- """
- Valid file strings should return regex match objects.
- """
- valid_input = [
- "Image:example.jpg",
- "file:example.jpg",
- "File:example.file-01.jpg",
- "FILE:FOO.BMP",
- "File:ß handwritten sample.gif",
- "File:A (1).jpeg",
- ]
- for i in valid_input:
- file_match = valid_file(i)
+class TestSiteInput:
+ @pytest.fixture(
+ scope="class",
+ params=[
+ "example.com",
+ "vim.wikia.com",
+ "en.wikipedia.com",
+ "en.wikimpedia.org",
+ ],
+ )
+ def invalid_input(self, request: pytest.FixtureRequest) -> Optional[Match]:
+ return valid_site(request.param)
+
+ @pytest.fixture(
+ scope="class",
+ params=[
+ "en.wikipedia.org",
+ "commons.wikimedia.org",
+ "de.wikipedia.org",
+ "meta.wikimedia.org",
+ ],
+ )
+ def valid_input(self, request: pytest.FixtureRequest) -> Optional[Match]:
+ return valid_site(request.param)
+
+ def test_invalid_site_input(self, invalid_input: None) -> None:
+ """
+ Invalid site strings should not return regex match objects.
+ """
+ assert invalid_input is None
+
+ def test_valid_site_input(self, valid_input: Match) -> None:
+ """
+ Valid site strings should return regex match objects.
+ """
+ assert valid_input is not None
+
+
+class TestFileRegex:
+ @pytest.fixture(scope="class")
+ def file_match(self) -> Optional[Match]:
+ """
+ File regex should return a match object with match groups corresponding
+ to the file prefix and name.
+ """
+ return valid_file("File:Example.jpg")
+
+ def test_file_match_exists(self, file_match: Match) -> None:
assert file_match is not None
+ def test_file_match_entire_match(self, file_match: Match) -> None:
+ assert file_match.group(0) == "File:Example.jpg"
+
+ def test_file_match_first_group(self, file_match: Match) -> None:
+ assert file_match.group(1) == "File:"
+
+ def test_file_match_second_group(self, file_match: Match) -> None:
+ assert file_match.group(2) == "Example.jpg"
+
+
+class TestFileInput:
+ @pytest.fixture(
+ scope="class",
+ params=[
+ "file:example",
+ "example.jpg",
+ "Foo Bar.gif",
+ "Fil:Example.jpg",
+ ],
+ )
+ def invalid_input(self, request: pytest.FixtureRequest) -> Optional[Match]:
+ return valid_file(request.param)
+
+ @pytest.fixture(
+ scope="class",
+ params=[
+ "Image:example.jpg",
+ "file:example.jpg",
+ "File:example.file-01.jpg",
+ "FILE:FOO.BMP",
+ "File:ß handwritten sample.gif",
+ "File:A (1).jpeg",
+ ],
+ )
+ def valid_input(self, request: pytest.FixtureRequest) -> Optional[Match]:
+ return valid_file(request.param)
+
+ def test_invalid_file_input(self, invalid_input: None) -> None:
+ """
+ Invalid file strings should not return regex match objects.
+ """
+ assert invalid_input is None
+
+ def test_valid_file_input(self, valid_input: Match) -> None:
+ """
+ Valid file strings should return regex match objects.
+ """
+ assert valid_input is not None
+
-def test_verify_hash(tmp_path):
- """
- Confirm that verify_hash returns the proper SHA1 hash.
- """
- file_name = "testfile"
- file_contents = "foobar"
- file_sha1 = "8843d7f92416211de9ebb963ff4ce28125932878"
+class TestVerifyHash:
+ def test_verify_hash(self, tmp_path: Path) -> None:
+ """
+ Confirm that verify_hash returns the proper SHA1 hash.
+ """
+ file_name = "testfile"
+ file_contents = "foobar"
+ file_sha1 = "8843d7f92416211de9ebb963ff4ce28125932878"
- tmp_file = tmp_path / file_name
- tmp_file.write_text(file_contents)
+ tmp_file = tmp_path / file_name
+ tmp_file.write_text(file_contents)
- assert verify_hash(tmp_file) == file_sha1
+ assert verify_hash(str(tmp_file)) == file_sha1