Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F85294689
test_bases.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sat, Sep 28, 02:24
Size
5 KB
Mime Type
text/x-python
Expires
Mon, Sep 30, 02:24 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
21155211
Attached To
R3600 invenio-infoscience
test_bases.py
View Options
# -*- coding: utf-8 -*-
#
# This file is part of Invenio.
# Copyright (C) 2014, 2015 CERN.
#
# Invenio is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# Invenio is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Invenio; if not, write to the Free Software Foundation, Inc.,
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
"""Unit tests for the JSONAlchemy bases."""
from
datetime
import
datetime
from
flask_registry
import
PkgResourcesDirDiscoveryRegistry
,
\
ImportPathRegistry
,
RegistryProxy
from
invenio.base.wrappers
import
lazy_import
from
invenio.testsuite
import
make_test_suite
,
run_test_suite
,
InvenioTestCase
Field_parser
=
lazy_import
(
'invenio.modules.jsonalchemy.parser:FieldParser'
)
Model_parser
=
lazy_import
(
'invenio.modules.jsonalchemy.parser:ModelParser'
)
guess_legacy_field_names
=
lazy_import
(
'invenio.modules.jsonalchemy.parser:guess_legacy_field_names'
)
get_producer_rules
=
lazy_import
(
'invenio.modules.jsonalchemy.parser:get_producer_rules'
)
TEST_PACKAGE
=
'invenio.modules.jsonalchemy.testsuite'
test_registry
=
RegistryProxy
(
'testsuite'
,
ImportPathRegistry
,
initial
=
[
TEST_PACKAGE
])
field_definitions
=
lambda
:
PkgResourcesDirDiscoveryRegistry
(
'fields'
,
registry_namespace
=
test_registry
)
model_definitions
=
lambda
:
PkgResourcesDirDiscoveryRegistry
(
'models'
,
registry_namespace
=
test_registry
)
def
clean_field_model_definitions
():
Field_parser
.
_field_definitions
=
{}
Field_parser
.
_legacy_field_matchings
=
{}
Model_parser
.
_model_definitions
=
{}
class
RegistryMixin
(
object
):
def
setUp
(
self
):
clean_field_model_definitions
()
self
.
app
.
extensions
[
'registry'
][
'testsuite.fields'
]
=
field_definitions
()
self
.
app
.
extensions
[
'registry'
][
'testsuite.models'
]
=
model_definitions
()
list
(
self
.
app
.
extensions
[
'registry'
][
'testsuite.fields'
])
list
(
self
.
app
.
extensions
[
'registry'
][
'testsuite.models'
])
def
tearDown
(
self
):
clean_field_model_definitions
()
del
self
.
app
.
extensions
[
'registry'
][
'testsuite.fields'
]
del
self
.
app
.
extensions
[
'registry'
][
'testsuite.models'
]
del
self
.
app
.
extensions
[
'registry'
][
'testsuite'
]
class
TestVersionable
(
RegistryMixin
,
InvenioTestCase
):
def
test_versionable_base
(
self
):
"""Versionable - model creation"""
from
invenio.modules.jsonalchemy.jsonext.engines
import
memory
self
.
app
.
config
[
'_VERSIONABLE_ENGINE'
]
=
memory
.
MemoryStorage
from
invenio.modules.jsonalchemy.wrappers
import
SmartJson
from
invenio.modules.jsonalchemy.reader
import
Reader
class
_VersionableJson
(
SmartJson
):
__storagename__
=
'_versionable'
@classmethod
def
create
(
cls
,
data
,
model
=
'test_versionable'
,
master_format
=
'json'
,
**
kwargs
):
document
=
Reader
.
translate
(
data
,
cls
,
master_format
=
master_format
,
model
=
model
,
namespace
=
'testsuite'
,
**
kwargs
)
cls
.
storage_engine
.
save_one
(
document
.
dumps
())
return
document
@classmethod
def
get_one
(
cls
,
_id
):
return
cls
(
cls
.
storage_engine
.
get_one
(
_id
))
def
_save
(
self
):
try
:
return
self
.
__class__
.
storage_engine
.
update_one
(
self
.
dumps
(),
id
=
self
[
'_id'
])
except
:
return
self
.
__class__
.
storage_engine
.
save_one
(
self
.
dumps
(),
id
=
self
[
'_id'
])
def
update
(
self
):
self
[
'modification_date'
]
=
datetime
.
now
()
return
self
.
_save
()
v0
=
_VersionableJson
.
create
({
'title'
:
'Version 0'
})
self
.
assertTrue
(
'title'
in
v0
)
self
.
assertTrue
(
'Version 0'
in
v0
[
'title'
])
v0
[
'title'
]
=
'Version 1'
v1
=
v0
.
update
()
v_older
=
_VersionableJson
.
get_one
(
v1
[
'older_version'
])
self
.
assertTrue
(
'older_version'
in
v1
)
self
.
assertTrue
(
v_older
[
'_id'
]
in
v1
[
'older_version'
])
self
.
assertTrue
(
'Version 1'
in
v1
[
'title'
])
self
.
assertTrue
(
v1
[
'_id'
]
in
v_older
[
'newer_version'
])
class
TestHidden
(
RegistryMixin
,
InvenioTestCase
):
def
test_dumps_hidden
(
self
):
from
invenio.modules.jsonalchemy.wrappers
import
SmartJson
from
invenio.modules.jsonalchemy.reader
import
Reader
data
=
{
'title'
:
'Test Title'
}
document
=
Reader
.
translate
(
data
,
SmartJson
,
master_format
=
'json'
,
model
=
'test_hidden'
,
namespace
=
'testsuite'
)
json
=
document
.
dumps
()
self
.
assertTrue
(
'title'
in
json
)
self
.
assertTrue
(
'hidden_basic'
in
json
)
json
=
document
.
dumps
(
filter_hidden
=
True
)
self
.
assertTrue
(
'title'
in
json
)
self
.
assertFalse
(
'hidden_basic'
in
json
)
TEST_SUITE
=
make_test_suite
(
TestVersionable
,
TestHidden
)
if
__name__
==
'__main__'
:
run_test_suite
(
TEST_SUITE
)
Event Timeline
Log In to Comment