⚗️ add tests

This commit is contained in:
Ondřej Samohel 2024-10-10 11:28:00 +02:00
parent 092325e64e
commit 3981a2e4da
No known key found for this signature in database
GPG key ID: 02376E18990A97C6
5 changed files with 97 additions and 10 deletions

View file

@ -1,15 +1,14 @@
"""Content traits for the pipeline."""
from __future__ import annotations
from typing import TYPE_CHECKING, ClassVar, Optional
# TCH003 is there because Path in TYPECHECKING will fail in tests
from pathlib import Path # noqa: TCH003
from typing import ClassVar, Optional
from pydantic import Field
from .trait import TraitBase
if TYPE_CHECKING:
from pathlib import Path
class MimeType(TraitBase):
"""MimeType trait model.

View file

@ -4,6 +4,7 @@ from __future__ import annotations
import inspect
import sys
from abc import ABC, abstractmethod
from collections import OrderedDict
from functools import lru_cache
from typing import ClassVar, Optional, Type, Union
@ -179,11 +180,13 @@ class TraitsData:
dict: Data dictionary.
"""
result = {
trait_id: dict(sorted(trait.dict()))
for trait_id, trait in self._data.items()
}
return dict(sorted(result))
result = OrderedDict()
for trait_id, trait in self._data.items():
if not trait or not trait_id:
continue
result[trait_id] = OrderedDict(trait.dict())
return result
def __len__(self):
"""Return the length of the data."""

View file

@ -86,7 +86,8 @@ ignore = [
"UP006", # support for older python version (type vs. Type)
"UP007", # ..^
"UP035", # ..
"ARG002"
"ARG002",
"INP001", # add `__init__.py` to namespaced package
]
# Allow fix for all enabled rules (when `--fix`) is provided.

View file

@ -0,0 +1 @@
"""Tests for the representation traits."""

View file

@ -0,0 +1,83 @@
"""Tests for the representation traits."""
from __future__ import annotations
from pathlib import Path
import pytest
from ayon_core.pipeline.traits import (
FileLocation,
Image,
PixelBased,
Planar,
TraitBase,
TraitsData,
)
TRAITS_DATA = {
FileLocation.id: {
"file_path": Path("/path/to/file"),
"file_size": 1024,
"file_hash": None,
},
Image.id: {},
PixelBased.id: {
"display_window_width": 1920,
"display_window_height": 1080,
"pixel_aspect_ratio": 1.0,
},
Planar.id: {
"planar_configuration": "RGB",
},
}
@pytest.fixture()
def traits_data() -> TraitsData:
"""Return a traits data instance."""
return TraitsData(traits=[
FileLocation(**TRAITS_DATA[FileLocation.id]),
Image(),
PixelBased(**TRAITS_DATA[PixelBased.id]),
Planar(**TRAITS_DATA[Planar.id]),
])
def test_traits_data(traits_data: TraitsData) -> None:
"""Test setting and getting traits."""
assert len(traits_data) == len(TRAITS_DATA)
assert traits_data.get(trait_id=FileLocation.id)
assert traits_data.get(trait_id=Image.id)
assert traits_data.get(trait_id=PixelBased.id)
assert traits_data.get(trait_id=Planar.id)
assert traits_data.get(trait=FileLocation)
assert traits_data.get(trait=Image)
assert traits_data.get(trait=PixelBased)
assert traits_data.get(trait=Planar)
assert issubclass(type(traits_data.get(trait=FileLocation)), TraitBase)
assert traits_data.get(
trait=FileLocation) == traits_data.get(trait_id=FileLocation.id)
assert traits_data.get(
trait=Image) == traits_data.get(trait_id=Image.id)
assert traits_data.get(
trait=PixelBased) == traits_data.get(trait_id=PixelBased.id)
assert traits_data.get(
trait=Planar) == traits_data.get(trait_id=Planar.id)
assert traits_data.get(trait_id="ayon.2d.Image.v1")
assert traits_data.get(trait_id="ayon.2d.PixelBased.v1")
assert traits_data.get(trait_id="ayon.2d.Planar.v1")
assert traits_data.get(
trait_id="ayon.2d.PixelBased.v1").display_window_width == \
TRAITS_DATA[PixelBased.id]["display_window_width"]
assert traits_data.get(
trait=PixelBased).display_window_height == \
TRAITS_DATA[PixelBased.id]["display_window_height"]
def test_traits_data_to_dict(traits_data: TraitsData) -> None:
"""Test converting traits data to dictionary."""
result = traits_data.as_dict()
assert result == TRAITS_DATA