Files
electra-archon/tests/__pycache__/test_state.cpython-312-pytest-9.0.2.pyc

232 lines
40 KiB
Plaintext
Raw Normal View History

<EFBFBD>
w<><77>i<EFBFBD>!<00><00>^<00>dZddlZddlmcmZddlZddlZddl Z ddl
m
Z
m Z ddl m Z ddlZejj!dee e<12>j&j&<00><00>ddlmZmZmZmZGd<06>d<07>ZGd<08>d <09>ZGd
<EFBFBD>d <0B>Zed k(re j:ed g<02>yy)z-
Tests for State Model and Schema Validation
<EFBFBD>N)<02>datetime<6D>timezone)<01>Path)<04>State<74> StateType<70> StateMetadata<74> load_schemac<00>(<00>eZdZdZd<02>Zd<03>Zd<04>Zd<05>Zy)<07>TestStateMetadatazTests for StateMetadata class.c<00>T<00>t<00>}|j}d}||k(}|s<>tjd|fd||f<02>dt j
<00>vstj |<01>rtj|<01>ndtj|<02>tj|<03>d<05>z}dd|iz}ttj|<06><00><00>dx}x}}|j}d}||u}|s<>tjd |fd
||f<02>dt j
<00>vstj |<01>rtj|<01>ndtj|<02>tj|<03>d<05>z}dd|iz}ttj|<06><00><00>dx}x}}|j}d}||u}|s<>tjd |fd ||f<02>dt j
<00>vstj |<01>rtj|<01>ndtj|<02>tj|<03>d<05>z}dd|iz}ttj|<06><00><00>dx}x}}|j}g}||k(}|s<>tjd|fd ||f<02>dt j
<00>vstj |<01>rtj|<01>ndtj|<02>tj|<03>d<05>z}dd|iz}ttj|<06><00><00>dx}x}}y) z%Test creating metadata with defaults.<2E>unknown<77><01>==<3D>z.%(py2)s
{%(py2)s = %(py0)s.source
} == %(py5)s<>meta<74><03>py0<79>py2<79>py5<79>assert %(py7)s<>py7N<37><01>is)z2%(py2)s
{%(py2)s = %(py0)s.provenance
} is %(py5)s)z2%(py2)s
{%(py2)s = %(py0)s.created_by
} is %(py5)s<>z,%(py2)s
{%(py2)s = %(py0)s.tags
} == %(py5)s<> r<00>source<63>
@pytest_ar<61>_call_reprcompare<72> @py_builtins<6E>locals<6C>_should_repr_global_name<6D> _saferepr<70>AssertionError<6F>_format_explanation<6F>
provenance<EFBFBD>
created_by<EFBFBD>tags<67><07>selfr<00> @py_assert1<74> @py_assert4<74> @py_assert3<74> @py_format6<74> @py_format8s <20>8/root/wizards/allegro/electra-archon/tests/test_state.py<70>test_default_creationz'TestStateMetadata.test_default_creations<><00><00><1C><EFBFBD><04><13>{<7B>{<7B>'<27>i<EFBFBD>'<27>{<7B>i<EFBFBD>'<27>'<27>'<27>'<27>{<7B>i<EFBFBD>'<27>'<27>'<27>'<27>'<27>'<27>t<EFBFBD>'<27>'<27>'<27>t<EFBFBD>'<27>'<27>'<27>{<7B>'<27>'<27>'<27>i<EFBFBD>'<27>'<27>'<27>'<27>'<27>'<27>'<27><13><EFBFBD><EFBFBD>&<26>$<24>&<26><EFBFBD>$<24>&<26>&<26>&<26>&<26><EFBFBD>$<24>&<26>&<26>&<26>&<26>&<26>&<26>t<EFBFBD>&<26>&<26>&<26>t<EFBFBD>&<26>&<26>&<26><EFBFBD>&<26>&<26>&<26>$<24>&<26>&<26>&<26>&<26>&<26>&<26>&<26><13><EFBFBD><EFBFBD>&<26>$<24>&<26><EFBFBD>$<24>&<26>&<26>&<26>&<26><EFBFBD>$<24>&<26>&<26>&<26>&<26>&<26>&<26>t<EFBFBD>&<26>&<26>&<26>t<EFBFBD>&<26>&<26>&<26><EFBFBD>&<26>&<26>&<26>$<24>&<26>&<26>&<26>&<26>&<26>&<26>&<26><13>y<EFBFBD>y<EFBFBD><1E>B<EFBFBD><1E>y<EFBFBD>B<EFBFBD><EFBFBD><1E><1E><1E>y<EFBFBD>B<EFBFBD><1E><1E><1E><1E><1E><1E>t<EFBFBD><1E><1E><1E>t<EFBFBD><1E><1E><1E>y<EFBFBD><1E><1E><1E>B<EFBFBD><1E><1E><1E><1E><1E><1E><1E>c<00>j<00>tdddddg<02><06>}|j}d}||k(}|s<>tjd|fd||f<02>d t j
<00>vstj |<01>rtj|<01>nd tj|<02>tj|<03>d
<EFBFBD>z}d d |iz}ttj|<06><00><00>d x}x}}|j}d}||k(}|s<>tjd|fd||f<02>d t j
<00>vstj |<01>rtj|<01>nd tj|<02>tj|<03>d
<EFBFBD>z}d d |iz}ttj|<06><00><00>d x}x}}|j}d}||k(}|s<>tjd|fd||f<02>d t j
<00>vstj |<01>rtj|<01>nd tj|<02>tj|<03>d
<EFBFBD>z}d d |iz}ttj|<06><00><00>d x}x}}|j}ddg}||k(}|s<>tjd|fd||f<02>d t j
<00>vstj |<01>rtj|<01>nd tj|<02>tj|<03>d
<EFBFBD>z}d d |iz}ttj|<06><00><00>d x}x}}y )z'Test creating metadata with all fields.z test-sourcez trace-123<32>electra<72>seed<65>test<73>rr%r&r'rrrrrrN<>z2%(py2)s
{%(py2)s = %(py0)s.provenance
} == %(py5)s)z2%(py2)s
{%(py2)s = %(py0)s.created_by
} == %(py5)srrr(s r/<00>test_full_creationz$TestStateMetadata.test_full_creations<><00><00><1C> <20>"<22> <20><18>&<26>!<21> 
<EFBFBD><04> <14>{<7B>{<7B>+<2B>m<EFBFBD>+<2B>{<7B>m<EFBFBD>+<2B>+<2B>+<2B>+<2B>{<7B>m<EFBFBD>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>t<EFBFBD>+<2B>+<2B>+<2B>t<EFBFBD>+<2B>+<2B>+<2B>{<7B>+<2B>+<2B>+<2B>m<EFBFBD>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B><13><EFBFBD><EFBFBD>-<2D>+<2B>-<2D><EFBFBD>+<2B>-<2D>-<2D>-<2D>-<2D><EFBFBD>+<2B>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>t<EFBFBD>-<2D>-<2D>-<2D>t<EFBFBD>-<2D>-<2D>-<2D><EFBFBD>-<2D>-<2D>-<2D>+<2B>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D><13><EFBFBD><EFBFBD>+<2B>)<29>+<2B><EFBFBD>)<29>+<2B>+<2B>+<2B>+<2B><EFBFBD>)<29>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>t<EFBFBD>+<2B>+<2B>+<2B>t<EFBFBD>+<2B>+<2B>+<2B><EFBFBD>+<2B>+<2B>+<2B>)<29>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B><13>y<EFBFBD>y<EFBFBD>,<2C>V<EFBFBD>V<EFBFBD>,<2C>,<2C>y<EFBFBD>,<2C>,<2C>,<2C>,<2C>,<2C>y<EFBFBD>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>t<EFBFBD>,<2C>,<2C>,<2C>t<EFBFBD>,<2C>,<2C>,<2C>y<EFBFBD>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,r1c<00>D<00>tdddg<02><04>}|j<00>}|d}d}||k(}|sltjd|fd||f<02>tj|<03>tj|<04>d<08>z}d d
|iz}t tj |<07><00><00>d x}x}}|d }ddg}||k(}|sltjd|fd||f<02>tj|<03>tj|<04>d<08>z}d d
|iz}t tj |<07><00><00>d x}x}}|d }d }||u}|sltjd|fd||f<02>tj|<03>tj|<04>d<08>z}d d
|iz}t tj |<07><00><00>d x}x}}y )zTest metadata serialization.r5<00>a<>b<>rr'rr<00>z%(py1)s == %(py4)s<><02>py1<79>py4<79>assert %(py6)s<>py6Nr'r%r<00>z%(py1)s is %(py4)s)r<00>to_dictrrr"r#r$)r)r<00>d<> @py_assert0r,<00> @py_assert2<74> @py_format5<74> @py_format7s r/<00> test_to_dictzTestStateMetadata.test_to_dict*s <00><00><1C>F<EFBFBD>#<23>s<EFBFBD><1A><<3C><04> <10>L<EFBFBD>L<EFBFBD>N<EFBFBD><01><10><18>{<7B>$<24>f<EFBFBD>$<24>{<7B>f<EFBFBD>$<24>$<24>$<24>$<24>{<7B>f<EFBFBD>$<24>$<24>$<24>{<7B>$<24>$<24>$<24>f<EFBFBD>$<24>$<24>$<24>$<24>$<24>$<24>$<24><10><16>y<EFBFBD>&<26>S<EFBFBD>#<23>J<EFBFBD>&<26>y<EFBFBD>J<EFBFBD>&<26>&<26>&<26>&<26>y<EFBFBD>J<EFBFBD>&<26>&<26>&<26>y<EFBFBD>&<26>&<26>&<26>J<EFBFBD>&<26>&<26>&<26>&<26>&<26>&<26>&<26><10><1C><EFBFBD>&<26>$<24>&<26><EFBFBD>$<24>&<26>&<26>&<26>&<26><EFBFBD>$<24>&<26>&<26>&<26><EFBFBD>&<26>&<26>&<26>$<24>&<26>&<26>&<26>&<26>&<26>&<26>&r1c<00>^<00>ddddgd<05>}tj|<01>}|j}d}||k(}|s<>tjd|fd||f<02>dt j <00>vstj|<02>rtj|<02>ndtj|<03>tj|<04>d <09>z}d
d |iz}ttj|<07><00><00>d x}x}}|j}d}||k(}|s<>tjd|fd ||f<02>dt j <00>vstj|<02>rtj|<02>ndtj|<03>tj|<04>d <09>z}d
d |iz}ttj|<07><00><00>d x}x}}y )zTest metadata deserialization.<2E>src<72>prov<6F>user<65>tr6rrrrrrNr7) r<00> from_dictrrrrr r!r"r#r$r%)r)<00>datarr*r+r,r-r.s r/<00>test_from_dictz TestStateMetadata.test_from_dict2s<><00><00><1F>v<EFBFBD>V<EFBFBD>VY<56>UZ<55>[<5B><04><1C>&<26>&<26>t<EFBFBD>,<2C><04><13>{<7B>{<7B>#<23>e<EFBFBD>#<23>{<7B>e<EFBFBD>#<23>#<23>#<23>#<23>{<7B>e<EFBFBD>#<23>#<23>#<23>#<23>#<23>#<23>t<EFBFBD>#<23>#<23>#<23>t<EFBFBD>#<23>#<23>#<23>{<7B>#<23>#<23>#<23>e<EFBFBD>#<23>#<23>#<23>#<23>#<23>#<23>#<23><13><EFBFBD><EFBFBD>(<28>&<26>(<28><EFBFBD>&<26>(<28>(<28>(<28>(<28><EFBFBD>&<26>(<28>(<28>(<28>(<28>(<28>(<28>t<EFBFBD>(<28>(<28>(<28>t<EFBFBD>(<28>(<28>(<28><EFBFBD>(<28>(<28>(<28>&<26>(<28>(<28>(<28>(<28>(<28>(<28>(r1N)<08>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__r0r8rJrR<00>r1r/r r s<00><00>(<28><1F> -<2D>'<27>)r1r c<00>^<00>eZdZdZd<02>Zd<03>Zd<04>Zd<05>Zd<06>Zd<07>Z d<08>Z
d <09>Z d
<EFBFBD>Z d <0B>Z d <0C>Zd <0A>Zd<0E>Zy)<10> TestStatezTests for State class.c<00>, <00>ttj<00><00>}tj|t
j ddi<01><03>}|j}||k(}|s<>tjd|fd||f<02>dtj<00>vstj|<02>rtj|<02>ndtj|<03>dtj<00>vstj|<01>rtj|<01>ndd<08>z}d d
|iz}ttj|<06><00><00>d x}}|j }t
j }||k(}|s<>tjd|fd ||f<02>dtj<00>vstj|<02>rtj|<02>ndtj|<03>d tj<00>vstjt
<00>rtjt
<00>nd tj|<07>d<0E>z}dd|iz}ttj|<08><00><00>d x}x}}|j"}ddi} || k(}|s<>tjd|fd|| f<02>dtj<00>vstj|<02>rtj|<02>ndtj|<03>tj| <09>d<12>z}
dd|
iz} ttj| <0B><00><00>d x}x}} |j$}d} || k(}|s<>tjd|fd|| f<02>dtj<00>vstj|<02>rtj|<02>ndtj|<03>tj| <09>d<12>z}
dd|
iz} ttj| <0B><00><00>d x}x}} |j&}d } || u}|s<>tjd|fd|| f<02>dtj<00>vstj|<02>rtj|<02>ndtj|<03>tj| <09>d<12>z}
dd|
iz} ttj| <0B><00><00>d x}x}} |j(}d } || u}|s<>tjd|fd|| f<02>dtj<00>vstj|<02>rtj|<02>ndtj|<03>tj| <09>d<12>z}
dd|
iz} ttj| <0B><00><00>d x}x}} tj*|j,<00>y )z!Test State.create factory method.<2E>key<65>value<75><03> entity_id<69>
state_type<EFBFBD>payloadr<00>z1%(py2)s
{%(py2)s = %(py0)s.entity_id
} == %(py4)s<>stater^<00>rrr@rArBN)zN%(py2)s
{%(py2)s = %(py0)s.state_type
} == %(py6)s
{%(py6)s = %(py4)s.ACTIVE
}r<00>rrr@rB<00>assert %(py8)s<>py8<79>z/%(py2)s
{%(py2)s = %(py0)s.payload
} == %(py5)srrr<00><00>z/%(py2)s
{%(py2)s = %(py0)s.version
} == %(py5)sr)z9%(py2)s
{%(py2)s = %(py0)s.previous_state_id
} is %(py5)s)z+%(py2)s
{%(py2)s = %(py0)s.ttl
} is %(py5)s)<17>str<74>uuid<69>uuid4r<00>creater<00>ACTIVEr^rrrr r!r"r#r$r_r`<00>version<6F>previous_state_id<69>ttl<74>UUID<49>id) r)r^rbr*r,rHrI<00> @py_assert5<74> @py_format9r+r-r.s r/<00>test_create_with_defaultsz#TestState.test_create_with_defaults=s<00><00><17><04>
<EFBFBD>
<EFBFBD> <0C>%<25> <09><15> <0C> <0C><1F> <20>'<27>'<27><1A>G<EFBFBD>$<24>
<EFBFBD><05> <15><EFBFBD><EFBFBD>+<2B><EFBFBD>)<29>+<2B>+<2B>+<2B>+<2B><EFBFBD>)<29>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>u<EFBFBD>+<2B>+<2B>+<2B>u<EFBFBD>+<2B>+<2B>+<2B><EFBFBD>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>)<29>+<2B>+<2B>+<2B>)<29>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B><14><1F><1F>3<>9<EFBFBD>#3<>#3<>3<><1F>#3<>3<>3<>3<>3<><1F>#3<>3<>3<>3<>3<>3<>3<>u<EFBFBD>3<>3<>3<>u<EFBFBD>3<>3<>3<><1F>3<>3<>3<>3<>3<>3<>9<EFBFBD>3<>3<>3<>9<EFBFBD>3<>3<>3<>#3<>3<>3<>3<>3<>3<>3<>3<><14>}<7D>}<7D>0<><15><07> 0<>0<>}<7D> 0<>0<>0<>0<>0<>}<7D> 0<>0<>0<>0<>0<>0<>0<>u<EFBFBD>0<>0<>0<>u<EFBFBD>0<>0<>0<>}<7D>0<>0<>0<> 0<>0<>0<>0<>0<>0<>0<>0<><14>}<7D>}<7D>!<21><01>!<21>}<7D><01>!<21>!<21>!<21>!<21>}<7D><01>!<21>!<21>!<21>!<21>!<21>!<21>u<EFBFBD>!<21>!<21>!<21>u<EFBFBD>!<21>!<21>!<21>}<7D>!<21>!<21>!<21><01>!<21>!<21>!<21>!<21>!<21>!<21>!<21><14>&<26>&<26>.<2E>$<24>.<2E>&<26>$<24>.<2E>.<2E>.<2E>.<2E>&<26>$<24>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>u<EFBFBD>.<2E>.<2E>.<2E>u<EFBFBD>.<2E>.<2E>.<2E>&<26>.<2E>.<2E>.<2E>$<24>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><14>y<EFBFBD>y<EFBFBD> <20>D<EFBFBD> <20>y<EFBFBD>D<EFBFBD> <20> <20> <20> <20>y<EFBFBD>D<EFBFBD> <20> <20> <20> <20> <20> <20>u<EFBFBD> <20> <20> <20>u<EFBFBD> <20> <20> <20>y<EFBFBD> <20> <20> <20>D<EFBFBD> <20> <20> <20> <20> <20> <20> <20> <0C> <09> <09>%<25>(<28>(<28>r1c<00>N<00>tddg<01><03>}tjtt j
<00><00>t ji|<01><04>}|j}|j}d}||k(}|s<>tjd|fd||f<02>dtj<00>vstj|<02>rtj|<02>ndtj|<03>tj|<04>tj|<05>d<08>z}d d
|iz}t!tj"|<08><00><00>d x}x}x}}|j}|j$}dg}||k(}|s<>tjd|fd ||f<02>dtj<00>vstj|<02>rtj|<02>ndtj|<03>tj|<04>tj|<05>d<08>z}d d
|iz}t!tj"|<08><00><00>d x}x}x}}y ) z Test State.create with metadata.r5<00> importantr<)r^r_r`<00>metadatar)zL%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.metadata
}.source
} == %(py7)srb<00>rrr@r<00>assert %(py9)s<>py9N)zJ%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.metadata
}.tags
} == %(py7)s)rrrmrjrkrlr<00>PENDINGryrrrrr r!r"r#r$r') r)rrbr*r,<00> @py_assert6rtr.<00> @py_format10s r/<00>test_create_with_metadataz#TestState.test_create_with_metadataOsK<00><00><1C>F<EFBFBD>+<2B><1D>?<3F><04><15> <0C> <0C><19>$<24>*<2A>*<2A>,<2C>'<27> <20>(<28>(<28><16><19> 
<EFBFBD><05> <15>~<7E>~<7E>.<2E>~<7E>$<24>$<24>.<2E><06>.<2E>$<24><06>.<2E>.<2E>.<2E>.<2E>$<24><06>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>u<EFBFBD>.<2E>.<2E>.<2E>u<EFBFBD>.<2E>.<2E>.<2E>~<7E>.<2E>.<2E>.<2E>$<24>.<2E>.<2E>.<2E><06>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><14>~<7E>~<7E>3<>~<7E>"<22>"<22>3<>{<7B>m<EFBFBD>3<>"<22>m<EFBFBD>3<>3<>3<>3<>"<22>m<EFBFBD>3<>3<>3<>3<>3<>3<>u<EFBFBD>3<>3<>3<>u<EFBFBD>3<>3<>3<>~<7E>3<>3<>3<>"<22>3<>3<>3<>m<EFBFBD>3<>3<>3<>3<>3<>3<>3r1c
<00><00>tjtd<01><02>5tdt t j <00><00>tjitjtj<00>d<04><05>ddd<06>y#1swYyxYw)z)Test that invalid UUIDs raise ValueError.z Invalid UUID<49><01>matchz
not-a-uuidrh<00>rsr^r_r`<00> timestamproN<> <0A>pytest<73>raises<65>
ValueErrorrrjrkrlrrnr<00>nowr<00>utc<74>r)s r/<00>test_invalid_uuid_raisesz"TestState.test_invalid_uuid_raises[s]<00><00> <13>]<5D>]<5D>:<3A>^<5E> <<3C> <0E> <11><1F><1D>d<EFBFBD>j<EFBFBD>j<EFBFBD>l<EFBFBD>+<2B>$<24>+<2B>+<2B><1A>"<22>,<2C>,<2C>x<EFBFBD>|<7C>|<7C>4<><19>  <0E> <0E> <0E> <0E>s <00>AB<03>B
c
<00>P<00>tjtd<01><02>5tt t j <00><00>t t j <00><00>tjitjtj<00>d<03><04>ddd<05>y#1swYyxYw)z(Test that version < 1 raises ValueError.zVersion must be >= 1r<31>rr<>Nr<4E>r<>s r/<00>test_invalid_version_raisesz%TestState.test_invalid_version_raisesgsi<00><00> <13>]<5D>]<5D>:<3A>-C<> D<> <0E> <11><16>t<EFBFBD>z<EFBFBD>z<EFBFBD>|<7C>$<24><1D>d<EFBFBD>j<EFBFBD>j<EFBFBD>l<EFBFBD>+<2B>$<24>+<2B>+<2B><1A>"<22>,<2C>,<2C>x<EFBFBD>|<7C>|<7C>4<><19>  <0E> <0E> <0E> <0E>s <00>A7B<03>B%c
<00>R<00>tjtd<01><02>5tt t j <00><00>t t j <00><00>tjitjtj<00>dd<04><05>ddd<06>y#1swYyxYw)z)Test that negative TTL raises ValueError.zTTL must be non-negativer<65>rh<00><><EFBFBD><EFBFBD><EFBFBD>)rsr^r_r`r<>rorqNr<4E>r<>s r/<00>test_negative_ttl_raisesz"TestState.test_negative_ttl_raisesssl<00><00> <13>]<5D>]<5D>:<3A>-G<> H<> <0E> <11><16>t<EFBFBD>z<EFBFBD>z<EFBFBD>|<7C>$<24><1D>d<EFBFBD>j<EFBFBD>j<EFBFBD>l<EFBFBD>+<2B>$<24>+<2B>+<2B><1A>"<22>,<2C>,<2C>x<EFBFBD>|<7C>|<7C>4<><19><16> <0E> <0E> <0E> <0E>s <00>A8B<03>B&c<00>$<00>tjttj<00><00>t
j ddi<01><03>}|j<00>}|d}|j}||k(}|s<>tjd|fd||f<02>tj|<03>dtj<00>vstj|<01>rtj|<01>ndtj|<04>d<08>z}d d
|iz}ttj |<07><00><00>d x}x}}|d }|j"}||k(}|s<>tjd|fd ||f<02>tj|<03>dtj<00>vstj|<01>rtj|<01>ndtj|<04>d<08>z}d d
|iz}ttj |<07><00><00>d x}x}}|d}d}||k(}|sltjd|fd||f<02>tj|<03>tj|<08>d<11>z} dd| iz}
ttj |
<EFBFBD><00><00>d x}x}}|d}ddi}||k(}|sltjd|fd||f<02>tj|<03>tj|<08>d<11>z} dd| iz}
ttj |
<EFBFBD><00><00>d x}x}}d}||v}|s<>tjd|fd||f<02>tj|<03>dtj<00>vstj|<02>rtj|<02>ndd<19>z} dd| iz}ttj |<06><00><00>d x}}|d}d}||k(}|sltjd|fd||f<02>tj|<03>tj|<08>d<11>z} dd| iz}
ttj |
<EFBFBD><00><00>d x}x}}y )z$Test state to dictionary conversion.<2E>count<6E>*r]rsr)z*%(py1)s == %(py5)s
{%(py5)s = %(py3)s.id
}rb<00>r?<00>py3rrrNr^)z1%(py1)s == %(py5)s
{%(py5)s = %(py3)s.entity_id
}r_<00>activer=r>rArBr`r<><00><01>in<69>z%(py1)s in %(py3)srE<00>r?r<><00>assert %(py5)srrorh)rrmrjrkrlrrnrDrsrrr"rr r!r#r$r^) r)rbrErFr+rGr-r.r,rHrI<00> @py_format4s r/<00>test_to_dict_serializationz$TestState.test_to_dict_serialization<6F>sd<00><00><15> <0C> <0C><19>$<24>*<2A>*<2A>,<2C>'<27> <20>'<27>'<27><1C>b<EFBFBD>M<EFBFBD>
<EFBFBD><05>
<12>M<EFBFBD>M<EFBFBD>O<EFBFBD><01><10><14>w<EFBFBD>"<22>%<25>(<28>(<28>"<22>w<EFBFBD>(<28>"<22>"<22>"<22>"<22>w<EFBFBD>(<28>"<22>"<22>"<22>w<EFBFBD>"<22>"<22>"<22>"<22>"<22>"<22>%<25>"<22>"<22>"<22>%<25>"<22>"<22>"<22>(<28>"<22>"<22>"<22>"<22>"<22>"<22>"<22><10><1B>~<7E>0<><15><1F><1F>0<>~<7E><1F>0<>0<>0<>0<>~<7E><1F>0<>0<>0<>~<7E>0<>0<>0<>0<>0<>0<><15>0<>0<>0<><15>0<>0<>0<><1F>0<>0<>0<>0<>0<>0<>0<><10><1C><EFBFBD>*<2A>(<28>*<2A><EFBFBD>(<28>*<2A>*<2A>*<2A>*<2A><EFBFBD>(<28>*<2A>*<2A>*<2A><EFBFBD>*<2A>*<2A>*<2A>(<28>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A><10><19>|<7C>,<2C><07><12>}<7D>,<2C>|<7C>}<7D>,<2C>,<2C>,<2C>,<2C>|<7C>}<7D>,<2C>,<2C>,<2C>|<7C>,<2C>,<2C>,<2C>}<7D>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C><1A><1F>{<7B>a<EFBFBD><1F><1F><1F><1F>{<7B>a<EFBFBD><1F><1F><1F>{<7B><1F><1F><1F><1F><1F><1F>a<EFBFBD><1F><1F><1F>a<EFBFBD><1F><1F><1F><1F><1F><1F><1F><10><19>|<7C> <20>q<EFBFBD> <20>|<7C>q<EFBFBD> <20> <20> <20> <20>|<7C>q<EFBFBD> <20> <20> <20>|<7C> <20> <20> <20>q<EFBFBD> <20> <20> <20> <20> <20> <20> r1c<00><><00>tjttj<00><00>t
j ddi<01><03>}|j<00>}tj|<02>}|d}d}||k(}|sltjd|fd||f<02>tj|<04>tj|<05>d<07>z}dd |iz}ttj|<08><00><00>d
x}x}}|d d}d}||u}|sltjd |fd ||f<02>tj|<04>tj|<05>d<07>z}dd |iz}ttj|<08><00><00>d
x}x}}y
)zTest state to JSON conversion.<2E>archivedTr]r_rr=r>rArBNr`rrC)rrmrjrkrlr<00>ARCHIVED<45>to_json<6F>json<6F>loadsrrr"r#r$) r)rb<00>json_str<74>parsedrFr,rGrHrIs r/<00>test_to_json_serializationz$TestState.test_to_json_serialization<6F>s<><00><00><15> <0C> <0C><19>$<24>*<2A>*<2A>,<2C>'<27> <20>)<29>)<29><1F><14>&<26>
<EFBFBD><05>
<19>=<3D>=<3D>?<3F><08><16><1A><1A>H<EFBFBD>%<25><06><15>l<EFBFBD>#<23>1<>z<EFBFBD>1<>#<23>z<EFBFBD>1<>1<>1<>1<>#<23>z<EFBFBD>1<>1<>1<>#<23>1<>1<>1<>z<EFBFBD>1<>1<>1<>1<>1<>1<>1<><15>i<EFBFBD> <20><1A>,<2C>4<><04>4<>,<2C><04>4<>4<>4<>4<>,<2C><04>4<>4<>4<>,<2C>4<>4<>4<><04>4<>4<>4<>4<>4<>4<>4r1c <00>4<00>ttj<00><00>}ttj<00><00>|dddiddddittj<00><00>dd <09> }tj|<02>}|j
}||k(}|s<>t jd
|fd ||f<02>d tj<00>vst j|<03>rt j|<03>nd t j|<04>d tj<00>vst j|<01>rt j|<01>nd d<0E>z}dd|iz}tt j|<07><00><00>dx}}|j}tj }||k(}|s<>t jd
|fd||f<02>d tj<00>vst j|<03>rt j|<03>nd t j|<04>dtj<00>vst jt<00>rt jt<00>ndt j|<08>d<14>z}dd|iz} tt j| <09><00><00>dx}x}}|j"}d}
||
k(}|s<>t jd
|fd||
f<02>d tj<00>vst j|<03>rt j|<03>nd t j|<04>t j|
<EFBFBD>d<18>z} dd| iz} tt j| <0C><00><00>dx}x}}
|j$}d}
||
k(}|s<>t jd
|fd||
f<02>d tj<00>vst j|<03>rt j|<03>nd t j|<04>t j|
<EFBFBD>d<18>z} dd| iz} tt j| <0C><00><00>dx}x}}
y)z&Test state from dictionary conversion.<2E>pending<6E>status<75>waitingz2026-04-02T12:00:00+00:00<30>rr5i) rsr^r_r`r<>roryrprqrrarbr^rcrArBN)zO%(py2)s
{%(py2)s = %(py0)s.state_type
} == %(py6)s
{%(py6)s = %(py4)s.PENDING
}rrdrerfrirrr)z+%(py2)s
{%(py2)s = %(py0)s.ttl
} == %(py5)s)rjrkrlrrPr^rrrr r!r"r#r$r_rr}rorq) r)r^rQrbr*r,rHrIrtrur+r-r.s r/<00>test_from_dict_deserializationz(TestState.test_from_dict_deserialization<6F>sT<00><00><17><04>
<EFBFBD>
<EFBFBD> <0C>%<25> <09><15>d<EFBFBD>j<EFBFBD>j<EFBFBD>l<EFBFBD>#<23>"<22>#<23> <20>)<29>,<2C>4<><18>!<21>6<EFBFBD>*<2A>!$<24>T<EFBFBD>Z<EFBFBD>Z<EFBFBD>\<5C>!2<><17>

<EFBFBD><04><16><0F><0F><04>%<25><05><14><EFBFBD><EFBFBD>+<2B><EFBFBD>)<29>+<2B>+<2B>+<2B>+<2B><EFBFBD>)<29>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>u<EFBFBD>+<2B>+<2B>+<2B>u<EFBFBD>+<2B>+<2B>+<2B><EFBFBD>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>)<29>+<2B>+<2B>+<2B>)<29>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B><14><1F><1F>4<>9<EFBFBD>#4<>#4<>4<><1F>#4<>4<>4<>4<>4<><1F>#4<>4<>4<>4<>4<>4<>4<>u<EFBFBD>4<>4<>4<>u<EFBFBD>4<>4<>4<><1F>4<>4<>4<>4<>4<>4<>9<EFBFBD>4<>4<>4<>9<EFBFBD>4<>4<>4<>#4<>4<>4<>4<>4<>4<>4<>4<><14>}<7D>}<7D>!<21><01>!<21>}<7D><01>!<21>!<21>!<21>!<21>}<7D><01>!<21>!<21>!<21>!<21>!<21>!<21>u<EFBFBD>!<21>!<21>!<21>u<EFBFBD>!<21>!<21>!<21>}<7D>!<21>!<21>!<21><01>!<21>!<21>!<21>!<21>!<21>!<21>!<21><14>y<EFBFBD>y<EFBFBD> <20>D<EFBFBD> <20>y<EFBFBD>D<EFBFBD> <20> <20> <20> <20>y<EFBFBD>D<EFBFBD> <20> <20> <20> <20> <20> <20>u<EFBFBD> <20> <20> <20>u<EFBFBD> <20> <20> <20>y<EFBFBD> <20> <20> <20>D<EFBFBD> <20> <20> <20> <20> <20> <20> r1c<00>^<00>tjttj<00><00>t
j ddi<01><03>}|j<00>}tj|<02>}|j}|j}||k(}|s<>tjd|fd||f<02>dtj<00>vstj|<03>rtj|<03>ndtj|<04>dtj<00>vstj|<01>rtj|<01>ndtj|<05>d<08>z}d d
|iz}t!tj"|<08><00><00>d x}x}}|j$}t
j }||k(}|s<>tjd|fd ||f<02>dtj<00>vstj|<03>rtj|<03>ndtj|<04>d tj<00>vstjt
<00>rtjt
<00>nd tj|<05>d<08>z}d d
|iz}t!tj"|<08><00><00>d x}x}}|j&}|j&}||k(}|s<>tjd|fd||f<02>dtj<00>vstj|<03>rtj|<03>ndtj|<04>dtj<00>vstj|<01>rtj|<01>ndtj|<05>d<08>z}d d
|iz}t!tj"|<08><00><00>d x}x}}y )z Test state from JSON conversion.<2E>
deleted_atz
2026-04-01r]r)zB%(py2)s
{%(py2)s = %(py0)s.id
} == %(py6)s
{%(py6)s = %(py4)s.id
}<7D>restoredrbrdrerfN)zO%(py2)s
{%(py2)s = %(py0)s.state_type
} == %(py6)s
{%(py6)s = %(py4)s.DELETED
}r)zL%(py2)s
{%(py2)s = %(py0)s.payload
} == %(py6)s
{%(py6)s = %(py4)s.payload
})rrmrjrkrlr<00>DELETEDr<44><00> from_jsonrsrrrr r!r"r#r$r_r`) r)rbr<>r<>r*rtr,rIrus r/<00>test_from_json_deserializationz(TestState.test_from_json_deserialization<6F>s <00><00><15> <0C> <0C><19>$<24>*<2A>*<2A>,<2C>'<27> <20>(<28>(<28>!<21><<3C>0<>
<EFBFBD><05>
<19>=<3D>=<3D>?<3F><08><18>?<3F>?<3F>8<EFBFBD>,<2C><08><17>{<7B>{<7B>&<26>e<EFBFBD>h<EFBFBD>h<EFBFBD>&<26>{<7B>h<EFBFBD>&<26>&<26>&<26>&<26>{<7B>h<EFBFBD>&<26>&<26>&<26>&<26>&<26>&<26>x<EFBFBD>&<26>&<26>&<26>x<EFBFBD>&<26>&<26>&<26>{<7B>&<26>&<26>&<26>&<26>&<26>&<26>e<EFBFBD>&<26>&<26>&<26>e<EFBFBD>&<26>&<26>&<26>h<EFBFBD>&<26>&<26>&<26>&<26>&<26>&<26>&<26><17>"<22>"<22>7<>i<EFBFBD>&7<>&7<>7<>"<22>&7<>7<>7<>7<>7<>"<22>&7<>7<>7<>7<>7<>7<>7<>x<EFBFBD>7<>7<>7<>x<EFBFBD>7<>7<>7<>"<22>7<>7<>7<>7<>7<>7<>i<EFBFBD>7<>7<>7<>i<EFBFBD>7<>7<>7<>&7<>7<>7<>7<>7<>7<>7<>7<><17><1F><1F>0<>5<EFBFBD>=<3D>=<3D>0<><1F>=<3D>0<>0<>0<>0<><1F>=<3D>0<>0<>0<>0<>0<>0<>x<EFBFBD>0<>0<>0<>x<EFBFBD>0<>0<>0<><1F>0<>0<>0<>0<>0<>0<>5<EFBFBD>0<>0<>0<>5<EFBFBD>0<>0<>0<>=<3D>0<>0<>0<>0<>0<>0<>0r1c<00><><00>tjttj<00><00>t
j i<00><01>}|j}|<02>}| }|s<>ddtj<00>vstj|<01>rtj|<01>ndtj|<02>tj|<03>d<04>z}ttj|<05><00><00>dx}x}}y)z*Test that state without TTL never expires.r]<00>Iassert not %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.is_expired
}()
}rbrcN<>rrmrjrkrlrrn<00>
is_expiredrr rr!r"r#r$<00>r)rbr*r,rtr-s r/<00>test_is_expired_no_ttlz TestState.test_is_expired_no_ttl<74>s<><00><00><15> <0C> <0C><19>$<24>*<2A>*<2A>,<2C>'<27> <20>'<27>'<27><16>
<EFBFBD><05>
<19>#<23>#<23>%<25>#<23>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>5<EFBFBD>%<25>%<25>%<25>5<EFBFBD>%<25>%<25>%<25>#<23>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%r1c<00><><00>tjttj<00><00>t
j id<01><02>}|j}|<02>}| }|s<>ddtj<00>vstj|<01>rtj|<01>ndtj|<02>tj|<03>d<05>z}ttj|<05><00><00>dx}x}}y)zTest TTL expiration logic.rh)r^r_r`rqr<>rbrcNr<4E>r<>s r/<00>test_is_expired_with_ttlz"TestState.test_is_expired_with_ttl<74>s<><00><00><15> <0C> <0C><19>$<24>*<2A>*<2A>,<2C>'<27> <20>'<27>'<27><16><11> 
<EFBFBD><05> <19>#<23>#<23>%<25>#<23>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>5<EFBFBD>%<25>%<25>%<25>5<EFBFBD>%<25>%<25>%<25>#<23>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%r1c<00>H
<00>tjttj<00><00>t
j ddid<03><04>}|jddi<01>}|j}d}||k(}|s<>tjd|fd||f<02>d tj<00>vstj|<02>rtj|<02>nd tj|<03>tj|<04>d
<EFBFBD>z}d d |iz}ttj |<07><00><00>d x}x}}|j"}|j$}||k(}|s<>tjd|fd||f<02>d tj<00>vstj|<02>rtj|<02>nd tj|<03>dtj<00>vstj|<01>rtj|<01>ndtj|<08>d<10>z} dd| iz}
ttj |
<EFBFBD><00><00>d x}x}}|j&}|j&}||k(}|s<>tjd|fd||f<02>d tj<00>vstj|<02>rtj|<02>nd tj|<03>dtj<00>vstj|<01>rtj|<01>ndtj|<08>d<10>z} dd| iz}
ttj |
<EFBFBD><00><00>d x}x}}|j(}ddi}||k(}|s<>tjd|fd||f<02>d tj<00>vstj|<02>rtj|<02>nd tj|<03>tj|<04>d
<EFBFBD>z}d d |iz}ttj |<07><00><00>d x}x}}|j*}|j*}||k(}|s<>tjd|fd||f<02>d tj<00>vstj|<02>rtj|<02>nd tj|<03>dtj<00>vstj|<01>rtj|<01>ndtj|<08>d<10>z} dd| iz}
ttj |
<EFBFBD><00><00>d x}x}}y )z$Test creating next version of state.r<>rh<00>)r^r_r`ror<><00>rri<00>
next_staterrrN)zQ%(py2)s
{%(py2)s = %(py0)s.previous_state_id
} == %(py6)s
{%(py6)s = %(py4)s.id
}rbrdrerf)zP%(py2)s
{%(py2)s = %(py0)s.entity_id
} == %(py6)s
{%(py6)s = %(py4)s.entity_id
}rg)zR%(py2)s
{%(py2)s = %(py0)s.state_type
} == %(py6)s
{%(py6)s = %(py4)s.state_type
})rrmrjrkrlrrn<00> next_versionrorrrr r!r"r#r$rprsr^r`r_) r)rbr<>r*r+r,r-r.rtrIrus r/<00>test_next_versionzTestState.test_next_version<6F>s<><00><00><15> <0C> <0C><19>$<24>*<2A>*<2A>,<2C>'<27> <20>'<27>'<27><1C>a<EFBFBD>L<EFBFBD><15> 
<EFBFBD><05><1B>'<27>'<27><17>!<21> <0C>5<>
<EFBFBD><19>!<21>!<21>&<26>Q<EFBFBD>&<26>!<21>Q<EFBFBD>&<26>&<26>&<26>&<26>!<21>Q<EFBFBD>&<26>&<26>&<26>&<26>&<26>&<26>z<EFBFBD>&<26>&<26>&<26>z<EFBFBD>&<26>&<26>&<26>!<21>&<26>&<26>&<26>Q<EFBFBD>&<26>&<26>&<26>&<26>&<26>&<26>&<26><19>+<2B>+<2B>7<>u<EFBFBD>x<EFBFBD>x<EFBFBD>7<>+<2B>x<EFBFBD>7<>7<>7<>7<>+<2B>x<EFBFBD>7<>7<>7<>7<>7<>7<>z<EFBFBD>7<>7<>7<>z<EFBFBD>7<>7<>7<>+<2B>7<>7<>7<>7<>7<>7<>u<EFBFBD>7<>7<>7<>u<EFBFBD>7<>7<>7<>x<EFBFBD>7<>7<>7<>7<>7<>7<>7<><19>#<23>#<23>6<>u<EFBFBD><EFBFBD><EFBFBD>6<>#<23><EFBFBD>6<>6<>6<>6<>#<23><EFBFBD>6<>6<>6<>6<>6<>6<>z<EFBFBD>6<>6<>6<>z<EFBFBD>6<>6<>6<>#<23>6<>6<>6<>6<>6<>6<>u<EFBFBD>6<>6<>6<>u<EFBFBD>6<>6<>6<><EFBFBD>6<>6<>6<>6<>6<>6<>6<><19>!<21>!<21>1<>g<EFBFBD>q<EFBFBD>\<5C>1<>!<21>\<5C>1<>1<>1<>1<>!<21>\<5C>1<>1<>1<>1<>1<>1<>z<EFBFBD>1<>1<>1<>z<EFBFBD>1<>1<>1<>!<21>1<>1<>1<>\<5C>1<>1<>1<>1<>1<>1<>1<><19>$<24>$<24>8<><05>(8<>(8<>8<>$<24>(8<>8<>8<>8<>8<>$<24>(8<>8<>8<>8<>8<>8<>8<>z<EFBFBD>8<>8<>8<>z<EFBFBD>8<>8<>8<>$<24>8<>8<>8<>8<>8<>8<><05>8<>8<>8<><05>8<>8<>8<>(8<>8<>8<>8<>8<>8<>8<>8r1c<00><00>ttj<00><00>}tD<00>]<5D>}t j
||i<00><01>}|j }||k(}|s<>tjd|fd||f<02>dtj<00>vstj|<03>rtj|<03>ndtj|<04>dtj<00>vstj|<02>rtj|<02>ndd<06>z}dd|iz}ttj|<07><00><00>d x}}|j<00>d}|j } || k(}
|
s<EFBFBD>tjd|
fd
|| f<02>tj|<08>dtj<00>vstj|<02>rtj|<02>ndtj| <09>d <0B>z} d d | iz} ttj| <0C><00><00>d x}x}
} <09><01><>y )z Test all state type enum values.r]r)z2%(py2)s
{%(py2)s = %(py0)s.state_type
} == %(py4)srbr_rcrArBN)z-%(py1)s == %(py5)s
{%(py5)s = %(py3)s.value
}r<>rr)rjrkrlrrrmr_rrrr r!r"r#r$rDr\) r)r^r_rbr*r,rHrIrFr+rGr-r.s r/<00>test_all_state_typeszTestState.test_all_state_types<65>s=<00><00><17><04>
<EFBFBD>
<EFBFBD> <0C>%<25> <09>#<23> E<01>J<EFBFBD><19>L<EFBFBD>L<EFBFBD>#<23>%<25><1A><0E>E<EFBFBD>
<19>#<23>#<23> 1<>#<23>z<EFBFBD>1<> 1<> 1<> 1<>#<23>z<EFBFBD> 1<> 1<> 1<> 1<> 1<> 1<>5<EFBFBD> 1<> 1<> 1<>5<EFBFBD> 1<> 1<> 1<>#<23> 1<> 1<> 1<> 1<> 1<> 1<>z<EFBFBD> 1<> 1<> 1<>z<EFBFBD> 1<> 1<> 1<> 1<> 1<> 1<> 1<><18>=<3D>=<3D>?<3F><<3C>0<> D<>J<EFBFBD>4D<34>4D<34> D<>0<>4D<34>D<> D<> D<> D<>0<>4D<34> D<> D<> D<>0<> D<> D<> D<> D<> D<> D<>J<EFBFBD> D<> D<> D<>J<EFBFBD> D<> D<> D<>4D<34> D<> D<> D<> D<> D<> D<> D<> Er1N)rSrTrUrVrvr<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>rWr1r/rYrY:sG<00><00> <20><1C>$
4<>
<0E>
<0E> <0E>!<21> 5<>!<21>* 1<>&<26>&<26>9<>" Er1rYc<00><00>eZdZdZd<02>Zd<03>Zy)<05>
TestSchemazTests for JSON Schema.c<00>^<00>t<00>}|d}d}||k(}|sltjd|fd||f<02>tj|<02>tj|<03>d<05>z}dd|iz}t tj
|<06><00><00>dx}x}}d }||v}|s<>tjd
|fd ||f<02>tj|<02>d t j<00>vstj|<01>rtj|<01>nd d <0A>z}dd|iz}t tj
|<08><00><00>dx}}d}|d}||v}|sltjd
|fd||f<02>tj|<02>tj|<03>d<05>z}dd|iz}t tj
|<06><00><00>dx}x}}d}|d}||v}|sltjd
|fd||f<02>tj|<02>tj|<03>d<05>z}dd|iz}t tj
|<06><00><00>dx}x}}y)z&Test that schema file loads correctly.<2E>titlezSEED State Schemarr=r>rArBN<>
propertiesr<EFBFBD>r<><00>schemar<61>r<>rrs<00>required)z%(py1)s in %(py4)sr^) r rrr"r#r$rr r!) r)r<>rFr,rGrHrIr<>r-s r/<00>test_schema_loadszTestSchema.test_schema_loads<64>sX<00><00><1C><1D><06><15>g<EFBFBD><EFBFBD>5<>"5<>5<><EFBFBD>"5<>5<>5<>5<>5<><EFBFBD>"5<>5<>5<>5<><EFBFBD>5<>5<>5<>"5<>5<>5<>5<>5<>5<>5<>5<><1B>%<25>|<7C>v<EFBFBD>%<25>%<25>%<25>%<25>|<7C>v<EFBFBD>%<25>%<25>%<25>|<7C>%<25>%<25>%<25>%<25>%<25>%<25>v<EFBFBD>%<25>%<25>%<25>v<EFBFBD>%<25>%<25>%<25>%<25>%<25>%<25>%<25><13>)<29>v<EFBFBD>j<EFBFBD>)<29>)<29>t<EFBFBD>)<29>)<29>)<29>)<29>)<29>t<EFBFBD>)<29>)<29>)<29>)<29>t<EFBFBD>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29><1A>0<>f<EFBFBD>Z<EFBFBD>0<>0<>{<7B>0<>0<>0<>0<>0<>{<7B>0<>0<>0<>0<>{<7B>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0r1c<00>6<00>t<00>}d}||v}|s<>tjd|fd||f<02>tj|<02>dt j
<00>vstj |<01>rtj|<01>ndd<05>z}dd|iz}ttj|<05><00><00>dx}}|d}t|<06>}d }||kD} | s<>tjd
| fd ||f<02>d t j
<00>vstj t<00>rtjt<00>nd tj|<06>tj|<07>tj|<08>d <0A>z}
dd|
iz} ttj| <0B><00><00>dx}x}x} }y)z#Test that schema includes examples.<2E>examplesr<73>r<>r<>r<>r<>rNr)<01>>)z/%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} > %(py7)s<>lenrzr{r|)
r rrr"rr r!r#r$r<>) r)r<>rFrGr<>r-r*r,r~rtr.rs r/<00>test_schema_has_examplesz#TestSchema.test_schema_has_examples<65>s<><00><00><1C><1D><06><19>#<23>z<EFBFBD>V<EFBFBD>#<23>#<23>#<23>#<23>z<EFBFBD>V<EFBFBD>#<23>#<23>#<23>z<EFBFBD>#<23>#<23>#<23>#<23>#<23>#<23>V<EFBFBD>#<23>#<23>#<23>V<EFBFBD>#<23>#<23>#<23>#<23>#<23>#<23>#<23><19>*<2A>%<25>*<2A>s<EFBFBD>%<25>&<26>*<2A><11>*<2A>&<26><11>*<2A>*<2A>*<2A>*<2A>&<26><11>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>s<EFBFBD>*<2A>*<2A>*<2A>s<EFBFBD>*<2A>*<2A>*<2A>%<25>*<2A>*<2A>*<2A>&<26>*<2A>*<2A>*<2A><11>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*r1N)rSrTrUrVr<>r<>rWr1r/r<>r<><00>s<00><00> <20>1<>+r1r<><00>__main__z-v)rV<00>builtinsr<00>_pytest.assertion.rewrite<74> assertion<6F>rewriterr<>rkr<>rr<00>pathlibr<00>sys<79>path<74>insertrj<00>__file__<5F>parent<6E> models.staterrrr r rYr<>rS<00>mainrWr1r/<00><module>r<>s<><00><01><04><01><00> <0B> <0B> <0A>'<27><18>
<EFBFBD><04><08><08><0F><0F><01>3<EFBFBD>t<EFBFBD>H<EFBFBD>~<7E>,<2C>,<2C>3<>3<>4<>5<>E<>E<>%)<29>%)<29>PwE<01>wE<01>t+<2B>+<2B>$ <0C>z<EFBFBD><19><0F>F<EFBFBD>K<EFBFBD>K<EFBFBD><18>4<EFBFBD> <20>!<21>r1