Skip to content

Commit 1271fd7

Browse files
committed
dumpers: added test for dump and load.
* Test should fail, as it is not allowed to load/dump with different types.
1 parent 8e90161 commit 1271fd7

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

tests/test_api_dumpers.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,20 @@
99
"""Test the dumpers API."""
1010

1111
from datetime import date, datetime
12+
from enum import Enum
1213
from uuid import UUID
1314

1415
import pytest
16+
from invenio_db import db
1517
from sqlalchemy.dialects import mysql
18+
from sqlalchemy_utils.types import ChoiceType
1619

1720
from invenio_records.api import Record
1821
from invenio_records.dumpers import ElasticsearchDumper, ElasticsearchDumperExt
1922
from invenio_records.dumpers.relations import RelationDumperExt
2023
from invenio_records.models import RecordMetadataBase
24+
from invenio_records.systemfields import SystemFieldsMixin
25+
from invenio_records.systemfields.model import ModelField
2126
from invenio_records.systemfields.relations import PKListRelation, \
2227
PKRelation, RelationsField
2328

@@ -215,3 +220,40 @@ class RecordWithRelations(Record):
215220
# Load it
216221
# new_record = Record.loads(dump, loader=dumper)
217222
# assert 'count' not in new_record
223+
224+
225+
def test_load_dump_type(testapp):
226+
dumper = ElasticsearchDumper()
227+
rec = TestRecord.create({}, test=EnumTestModel.REGISTERED)
228+
# Serialize
229+
dumped_data = dumper.dump(rec, {})
230+
assert isinstance(dumped_data["test"], str)
231+
# Deserialize
232+
loaded_data = dumper.load(dumped_data, TestRecord)
233+
assert isinstance(loaded_data.test, EnumTestModel)
234+
235+
236+
# Similar to PIDStatus
237+
class EnumTestModel(Enum):
238+
NEW = "N"
239+
REGISTERED = "R"
240+
241+
def __init__(self, value):
242+
"""Hack."""
243+
244+
def __str__(self):
245+
"""Return its value."""
246+
return self.value
247+
248+
249+
class TestMetadata(db.Model, RecordMetadataBase):
250+
"""Represent a record metadata."""
251+
252+
__tablename__ = 'test_dumper_table'
253+
test = db.Column(ChoiceType(EnumTestModel, impl=db.CHAR(1)))
254+
255+
256+
# Similar to ModelPIDField
257+
class TestRecord(Record, SystemFieldsMixin):
258+
model_cls = TestMetadata
259+
test = ModelField(dump_type=str)

0 commit comments

Comments
 (0)