Coverage for tests/unit/test_structs.py: 100%

24 statements  

« prev     ^ index     » next       coverage.py v7.10.3, created at 2026-08-22 19:08 +0000

1import dataclasses 

2import typing 

3 

4import pytest 

5 

6from meta_tags_parser import structs 

7from tests import factories 

8 

9 

10GENERATED_TAGS_COUNT: typing.Final = 25 

11 

12 

13@pytest.mark.parametrize( 

14 ("tested_instance", "target_field_name", "new_value"), 

15 [ 

16 (structs.OneMetaTag(name="title", value="hello"), "name", "description"), 

17 (structs.ValuesGroup(original="Value", normalized="value"), "original", "other"), 

18 (structs.TagsGroup(), "title", "page title"), 

19 (structs.SnippetGroup(), "twitter", structs.SocialMediaSnippet(title="snippet")), 

20 (structs.SocialMediaSnippet(), "title", "snippet title"), 

21 (structs.SettingsFromUser(), "optimize_input", False), 

22 ], 

23) 

24def test_structs_are_frozen(tested_instance: object, target_field_name: str, new_value: object) -> None: 

25 with pytest.raises(dataclasses.FrozenInstanceError): 

26 setattr(tested_instance, target_field_name, new_value) 

27 

28 

29@pytest.mark.parametrize( 

30 ("original_name", "expected_normalized_name"), 

31 [ 

32 ("title", "title"), 

33 ("image:width", "image_width"), 

34 ("image:secure_url", "image_secure_url"), 

35 ("", ""), 

36 ], 

37) 

38def test_normalized_name_replaces_colons(original_name: str, expected_normalized_name: str) -> None: 

39 assert structs.OneMetaTag(name=original_name, value="x").normalized_name == expected_normalized_name 

40 

41 

42def test_tag_name_cache_is_bounded() -> None: 

43 """Tag names come from arbitrary pages, an unbounded cache would grow without limit.""" 

44 assert structs._transform_tag_name.cache_info().maxsize == structs.TAG_NAME_CACHE_SIZE 

45 

46 

47def test_snippet_dimension_fields_exist_on_the_snippet_struct() -> None: 

48 assert structs.DIMENSION_SNIPPET_FIELDS.issubset(structs.WHAT_ATTRS_IN_SOCIAL_MEDIA_SNIPPET) 

49 

50 

51def test_default_settings_parse_everything() -> None: 

52 assert set(structs.DEFAULT_SETTINGS_FROM_USER.what_to_parse) == set(structs.WhatToParse) 

53 assert structs.DEFAULT_SETTINGS_FROM_USER.optimize_input is True 

54 

55 

56@pytest.mark.parametrize("generated_tag", factories.OneMetaTagFactory.batch(GENERATED_TAGS_COUNT)) 

57def test_normalized_name_never_contains_colons(generated_tag: structs.OneMetaTag) -> None: 

58 assert ":" not in generated_tag.normalized_name 

59 assert generated_tag.normalized_name == generated_tag.name.replace(":", "_")