Skip to content

Commit b5342dd

Browse files
committed
feat: add tests for manifest
1 parent dbe7b7d commit b5342dd

5 files changed

Lines changed: 75 additions & 8 deletions

File tree

packages/polywrap-manifest/polywrap_manifest/deserialize.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@
1212

1313

1414
def deserialize_wrap_manifest(
15-
manifest: bytearray, options: Optional[DeserializeManifestOptions] = None
15+
manifest: bytes, options: Optional[DeserializeManifestOptions] = None
1616
) -> AnyWrapManifest:
1717
decoded_manifest = msgpack_decode(manifest)
1818
if not decoded_manifest.get("version"):
1919
raise ValueError("Expected manifest version to be defined!")
2020

2121
no_validate = options and options.no_validate
2222
manifest_version = WrapManifestVersions(decoded_manifest["version"])
23-
match manifest_version:
23+
match manifest_version.value:
2424
case "0.1.0":
2525
return (
2626
WrapManifest_0_1.construct(**decoded_manifest)

packages/polywrap-manifest/polywrap_manifest/manifest.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
from dataclasses import dataclass
88
from enum import Enum
99

10-
from wrap_0_1 import WrapManifest as WrapManifest_0_1
11-
from wrap_0_1 import Abi as WrapAbi_0_1_0_1
12-
from wrap_0_1 import *
10+
from .wrap_0_1 import WrapManifest as WrapManifest_0_1
11+
from .wrap_0_1 import Abi as WrapAbi_0_1_0_1
12+
from .wrap_0_1 import *
1313

1414

1515
@dataclass(slots=True, kw_only=True)

packages/polywrap-manifest/scripts/templates/manifest.py.jinja2

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ from typing import Union
1111
{%- endif %}
1212

1313
{% for version in versions -%}
14-
from wrap_{{ version.manifest_module_version }} import WrapManifest as WrapManifest_{{ version.manifest_module_version }}
15-
from wrap_{{ version.manifest_module_version }} import Abi as WrapAbi_{{ version.manifest_module_version }}_{{ version.abi_module_version }}
14+
from .wrap_{{ version.manifest_module_version }} import WrapManifest as WrapManifest_{{ version.manifest_module_version }}
15+
from .wrap_{{ version.manifest_module_version }} import Abi as WrapAbi_{{ version.manifest_module_version }}_{{ version.abi_module_version }}
1616
{%- endfor %}
17-
from wrap_{{ latest.manifest_module_version }} import *
17+
from .wrap_{{ latest.manifest_module_version }} import *
1818

1919

2020
@dataclass(slots=True, kw_only=True)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
��version�0.1�name�Simple�type�wasm�abi��version�0.1�moduleType��type�Module�kind̀�methods���name�simpleMethod�return��type�String�name�simpleMethod�requiredäkind"�scalar��name�simpleMethod�type�String�requiredäkind�type�Method�kind@�requiredéarguments���type�String�name�arg�requiredäkind"�scalar��name�arg�type�String�requiredäkind
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import pytest
2+
from pathlib import Path
3+
from polywrap_manifest import (
4+
deserialize_wrap_manifest,
5+
WrapManifest_0_1,
6+
DeserializeManifestOptions,
7+
)
8+
from pydantic import ValidationError
9+
from polywrap_msgpack import msgpack_encode, msgpack_decode
10+
11+
12+
@pytest.fixture
13+
def test_case_dir() -> Path:
14+
return Path(__file__).parent / "cases"
15+
16+
17+
@pytest.fixture
18+
def msgpack_manifest(test_case_dir: Path) -> bytes:
19+
with open(test_case_dir / "simple" / "wrap.info", "rb") as f:
20+
return f.read()
21+
22+
23+
def test_deserialize_without_validate(msgpack_manifest: bytes):
24+
deserialized = deserialize_wrap_manifest(msgpack_manifest, DeserializeManifestOptions(no_validate=True))
25+
assert isinstance(deserialized, WrapManifest_0_1)
26+
assert deserialized.version.value == "0.1"
27+
assert deserialized.abi.version == "0.1"
28+
assert deserialized.name == "Simple"
29+
30+
31+
def test_deserialize_with_validate(msgpack_manifest: bytes):
32+
deserialized = deserialize_wrap_manifest(msgpack_manifest)
33+
assert isinstance(deserialized, WrapManifest_0_1)
34+
assert deserialized.version.value == "0.1"
35+
assert deserialized.abi.version == "0.1"
36+
assert deserialized.name == "Simple"
37+
38+
39+
def test_invalid_version(msgpack_manifest: bytes):
40+
decoded = msgpack_decode(msgpack_manifest)
41+
decoded["version"] = "bad-str"
42+
manifest: bytes = msgpack_encode(decoded)
43+
44+
with pytest.raises(ValueError) as e:
45+
deserialize_wrap_manifest(manifest)
46+
assert e.match("'bad-str' is not a valid WrapManifestVersions")
47+
48+
49+
def test_unaccepted_field(msgpack_manifest: bytes):
50+
decoded = msgpack_decode(msgpack_manifest)
51+
decoded["invalid_field"] = "not allowed"
52+
manifest: bytes = msgpack_encode(decoded)
53+
54+
with pytest.raises(ValidationError) as e:
55+
deserialize_wrap_manifest(manifest)
56+
assert e.match("extra fields not permitted")
57+
58+
59+
def test_invalid_name(msgpack_manifest: bytes):
60+
decoded = msgpack_decode(msgpack_manifest)
61+
decoded["name"] = "foo bar baz $%##$@#$@#$@#$#$",
62+
manifest: bytes = msgpack_encode(decoded)
63+
64+
with pytest.raises(ValidationError) as e:
65+
deserialize_wrap_manifest(manifest)
66+
assert e.match("str type expected")

0 commit comments

Comments
 (0)