Coverage for tests/conftest.py: 100%

33 statements  

« prev     ^ index     » next       coverage.py v7.10.3, created at 2025-08-21 00:51 +0000

1import pathlib 

2import random 

3import typing 

4 

5import pytest 

6from faker import Faker 

7 

8from meta_tags_parser import settings 

9 

10 

11FIXTURES_DIR: typing.Final[pathlib.Path] = pathlib.Path(__file__).parent / "html_fixtures" 

12HTML_FIXTURES: typing.Final[tuple[str, ...]] = ("globo-com", "gazeta-ru") 

13POSSIBLE_OG_TAGS_VALUES: typing.Final[tuple[str, ...]] = ( 

14 "title", 

15 "url", 

16 "image", 

17 "type", 

18 "description", 

19 "locale", 

20 "site_name", 

21 "video", 

22) 

23 

24 

25@pytest.fixture 

26def provide_fake_meta(faker: Faker) -> tuple[dict[str, str], str]: 

27 """Generate random wannabe html tags.""" 

28 output_buffer: list[str] = [] 

29 control_result: list[tuple[str, str]] = [] 

30 output_buffer.extend( 

31 f"""<meta name="{one_name}" content="{faker.text()}">""" for one_name in settings.BASIC_META_TAGS 

32 ) 

33 for one_name in POSSIBLE_OG_TAGS_VALUES: 

34 for _ in range(random.randint(1, 5)): 

35 tag_content: str 

36 if one_name in ("url", "video"): 

37 tag_content = faker.url() 

38 elif one_name == "image": 

39 tag_content = faker.image_url() 

40 else: 

41 tag_content = faker.text() 

42 output_buffer.append(f"""<meta property="og:{one_name}" content="{tag_content}">""") 

43 output_buffer.append(f"""<meta name="twitter:{one_name}" content="{tag_content}">""") 

44 control_result.append((one_name, tag_content)) 

45 output_buffer.append(f"<title>{faker.text()}</title>") 

46 output_buffer.append(f"""<meta name="article:name" content="{faker.text()}">""") 

47 output_buffer.append(f"""<meta name="article:description" content="{faker.text()}">""") 

48 output_buffer.append("""<meta name="bad-tag">""") 

49 output_buffer.append("""<meta property="another-bad-tag">""") 

50 return dict(control_result), ("\n \t" * random.randint(1, 5)).join(output_buffer) 

51 

52 

53@pytest.fixture 

54def provide_html_file_paths() -> list[pathlib.Path]: 

55 """Return file paths for raw parse test.""" 

56 return [FIXTURES_DIR.joinpath(f"{one_name}.html") for one_name in HTML_FIXTURES]