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
« prev ^ index » next coverage.py v7.10.3, created at 2026-08-22 19:08 +0000
1import dataclasses
2import typing
4import pytest
6from meta_tags_parser import structs
7from tests import factories
10GENERATED_TAGS_COUNT: typing.Final = 25
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)
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
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
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)
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
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(":", "_")