Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F95938272
test_bibknowledge.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
Fri, Dec 20, 21:25
Size
10 KB
Mime Type
text/x-python
Expires
Sun, Dec 22, 21:25 (2 d)
Engine
blob
Format
Raw Data
Handle
23083942
Attached To
R3600 invenio-infoscience
test_bibknowledge.py
View Options
# -*- coding: utf-8 -*-
##
## This file is part of Invenio.
## Copyright (C) 2009, 2010, 2011, 2012, 2013 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.
"""Regression tests for BibKnowledge."""
from
invenio.config
import
CFG_SITE_URL
,
CFG_SITE_SECURE_URL
,
CFG_TMPDIR
from
invenio.testsuite
import
InvenioTestCase
,
make_test_suite
,
\
run_test_suite
,
test_web_page_content
class
BibknowledgeRegressionTests
(
InvenioTestCase
):
"""Regression test functions for bibknowledge."""
def
_randomstring
(
self
):
"""Produce a random 62-character alphanumeric string."""
from
random
import
shuffle
sl
=
list
(
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
)
shuffle
(
sl
)
return
''
.
join
(
sl
)
def
_name_a_db
(
self
):
return
"unittest_dynamic_kb_"
+
self
.
_randomstring
()
def
setUp
(
self
):
"""bibknowledge test setup
Mostly just creates the dynamic kb used later.
"""
from
invenio.bibknowledge
import
add_dynamic_kb
,
get_kb_name
new_kb_id
=
add_dynamic_kb
(
self
.
_name_a_db
(),
"100__a"
,
searchwith
=
"245__:*%*"
)
self
.
dyn_kbname
=
get_kb_name
(
new_kb_id
)
def
test_kb_pages_available
(
self
):
"""bibknowledge - test /kb page availability"""
kbpage
=
CFG_SITE_URL
+
"/kb"
errs
=
test_web_page_content
(
kbpage
)
self
.
assertEqual
([],
errs
)
def
test_kb_pages_curator_can_read
(
self
):
"""bibknowledge - test that balthasar from the curator group can read page"""
kbpage
=
CFG_SITE_URL
+
"/kb"
errs
=
test_web_page_content
(
kbpage
,
username
=
"balthasar"
,
password
=
"b123althasar"
,
expected_text
=
"BibKnowledge Admin"
)
self
.
assertEqual
([],
errs
)
def
test_EJOURNALS_exists
(
self
):
"""bibknowledge - test that EJOURNALS kb is there"""
from
invenio.bibknowledge
import
kb_exists
isthere
=
kb_exists
(
"EJOURNALS"
)
self
.
assertEqual
(
True
,
isthere
)
def
test_kbs_info
(
self
):
"""bibknowledge - get_kbs_info returns EJOURNALS info"""
from
invenio.bibknowledge
import
get_kbs_info
myinfolist
=
get_kbs_info
(
""
,
"EJOURNALS"
)
myinfo
=
myinfolist
[
0
]
self
.
assertEqual
(
myinfo
[
"name"
],
"EJOURNALS"
)
def
test_EJOURNALS_keys
(
self
):
"""bibknowledge - test left/right rules (key lookups)"""
from
invenio.bibknowledge
import
get_kbr_values
,
get_kbr_keys
mykeys
=
get_kbr_keys
(
"EJOURNALS"
,
"Acta"
)
self
.
assertEqual
(
2
,
len
(
mykeys
))
mykeys
=
get_kbr_values
(
"EJOURNALS"
,
''
,
searchtype
=
'e'
)
self
.
assertEqual
(
0
,
len
(
mykeys
))
mykeys
=
get_kbr_values
(
"EJOURNALS"
,
searchtype
=
's'
)
self
.
assertEqual
(
327
,
len
(
mykeys
))
mykeys
=
get_kbr_values
(
"EJOURNALS"
,
searchkey
=
''
,
searchtype
=
's'
)
self
.
assertEqual
(
327
,
len
(
mykeys
))
def
test_EJOURNALS_values
(
self
):
"""bibknowledge - test a left/right rule (value lookup)"""
from
invenio.bibknowledge
import
get_kbr_values
vals
=
get_kbr_values
(
"EJOURNALS"
,
"Astron."
)
self
.
assertEqual
(
29
,
len
(
vals
))
def
test_get_EJOURNALS_kba_values
(
self
):
"""bibknowledge - test recovering just values"""
from
invenio.bibknowledge
import
get_kba_values
mylist
=
get_kba_values
(
"EJOURNALS"
)
self
.
assertEqual
(
327
,
len
(
mylist
))
def
test_EJOURNALS_export_as_json
(
self
):
"""bibknowledge - export key-value mappings to web as json list"""
kbpage
=
CFG_SITE_URL
+
"/kb/export?kbname=EJOURNALS&format=jquery"
expected
=
'[{"value": "AAS Photo Bull.", "label": "AAS Photo Bull."},'
errs
=
test_web_page_content
(
kbpage
,
expected_text
=
expected
)
self
.
assertEqual
([],
errs
)
def
test_EJOURNALS_get_as_json
(
self
):
"""bibknowledge - get key-value mappings as json list"""
from
invenio.bibknowledge
import
get_kb_mappings_json
api_returns
=
get_kb_mappings_json
(
'EJOURNALS'
,
'AAS'
,
'AAS'
,
's'
)
expected
=
'[{"value": "AAS Photo Bull.", "label": "AAS Photo Bull."}]'
self
.
assertEqual
(
expected
,
api_returns
)
def
test_add_get_remove
(
self
):
"""bibknowledge - test creating a kb, adding a mapping, removing it, removing kb"""
from
invenio.bibknowledge
import
add_kb
,
get_kb_name
,
\
kb_mapping_exists
,
remove_kb_mapping
,
delete_kb
,
kb_exists
,
\
add_kb_mapping
new_kb_id
=
add_kb
()
new_name
=
get_kb_name
(
new_kb_id
)
add_kb_mapping
(
new_name
,
"foobar"
,
"barfoo"
)
fbexists
=
kb_mapping_exists
(
new_name
,
"foobar"
)
self
.
assertEqual
(
True
,
fbexists
)
remove_kb_mapping
(
new_name
,
"foobar"
)
fbexists
=
kb_mapping_exists
(
new_name
,
"foobar"
)
self
.
assertEqual
(
False
,
fbexists
)
delete_kb
(
new_name
)
still_there
=
kb_exists
(
new_name
)
self
.
assertEqual
(
False
,
still_there
)
def
test_taxonomy
(
self
):
"""bibknowledge - test a taxonomy (must run as bibsched user)"""
import
mechanize
from
os
import
remove
from
invenio.bibknowledge
import
get_kbt_items_for_bibedit
,
add_kb
,
\
get_kb_name
,
delete_kb
,
kb_exists
username
=
"balthasar"
password
=
"b123althasar"
#create a new taxonomy kb
new_kb_id
=
add_kb
(
"testtaxonomy"
,
"taxonomy"
)
#what was the name?
new_kb_name
=
get_kb_name
(
new_kb_id
)
#get the taxonomy file
response
=
mechanize
.
urlopen
(
"http://invenio-software.org/download/invenio-demo-site-files/HEP.rdf"
)
content
=
response
.
read
()
f
=
open
(
CFG_TMPDIR
+
"/HEP.rdf"
,
"w"
)
f
.
write
(
content
)
f
.
close
()
#upload it to the right destination, but log in first
browser
=
mechanize
.
Browser
()
browser
.
open
(
CFG_SITE_SECURE_URL
+
"/youraccount/login"
)
browser
.
select_form
(
nr
=
0
)
browser
[
'nickname'
]
=
username
browser
[
'password'
]
=
password
browser
.
submit
()
#go to upload page
uploadpage
=
browser
.
open
(
CFG_SITE_URL
+
"/kb?kb="
+
str
(
new_kb_id
))
#check that we are there
content
=
uploadpage
.
read
()
namethere
=
content
.
count
(
"testtaxonomy"
)
assert
namethere
>
0
#upload
browser
.
open
(
CFG_SITE_URL
+
"/kb?kb="
+
str
(
new_kb_id
))
browser
.
select_form
(
name
=
"upload"
)
browser
.
form
[
"kb"
]
=
str
(
new_kb_id
)
#force the id
browser
.
form
.
add_file
(
open
(
CFG_TMPDIR
+
"/HEP.rdf"
),
content_type
=
'text/plain'
,
filename
=
"HEP.rdf"
,
name
=
"file"
)
browser
.
submit
()
#check that we can get an item from the kb
items
=
get_kbt_items_for_bibedit
(
new_kb_name
,
"prefLabel"
,
"Altarelli"
)
#item should contain 1 string: 'Altarelli-Parisi equation'
self
.
assertEqual
(
1
,
len
(
items
))
#delete the temp file
remove
(
CFG_TMPDIR
+
"/HEP.rdf"
)
#delete the test odf the DB
delete_kb
(
new_kb_name
)
still_there
=
kb_exists
(
new_kb_name
)
self
.
assertEqual
(
False
,
still_there
)
def
test_get_kbd_values
(
self
):
"""bibknowledge - search a "find x by y" kb"""
from
invenio.bibknowledge
import
get_kbd_values
vals
=
get_kbd_values
(
self
.
dyn_kbname
,
"Rodentia"
)
self
.
assertEqual
(
1
,
len
(
vals
))
self
.
assertEqual
(
vals
[
0
],
'Charles Darwin'
)
def
test_kbd_export_as_list
(
self
):
"""bibknowledge - export dynamic kb to web as list of values"""
kbpage
=
CFG_SITE_URL
+
"/kb/export?kbname="
+
self
.
dyn_kbname
errs
=
test_web_page_content
(
kbpage
,
expected_text
=
[
'Charles Darwin'
,
'李白'
])
self
.
assertEqual
([],
errs
)
def
test_kbd_export_as_json
(
self
):
"""bibknowledge - export dynamic kb to web as json list"""
kbpage
=
CFG_SITE_URL
+
"/kb/export?kbname="
+
self
.
dyn_kbname
+
'&format=jquery'
errs
=
test_web_page_content
(
kbpage
,
expected_text
=
[
'["Charles Darwin",'
,
'"
\\
u674e
\\
u767d"]'
])
self
.
assertEqual
([],
errs
)
def
test_kbd_retrieval_as_json
(
self
):
"""bibknowledge - retrieve dynamic kb as json list"""
from
invenio.bibknowledge
import
get_kbd_values_json
api_returns
=
get_kbd_values_json
(
self
.
dyn_kbname
,
'Rodentia'
)
expected
=
'["Charles Darwin"]'
self
.
assertEqual
(
expected
,
api_returns
)
def
test_kbd_search_as_json
(
self
):
"""bibknowledge - search dynamic kb on web; get json hits"""
kbpage
=
CFG_SITE_URL
+
"/kb/export?kbname="
+
self
.
dyn_kbname
+
'&format=jquery&term=Rodentia'
errs
=
test_web_page_content
(
kbpage
,
expected_text
=
'["Charles Darwin"]'
)
self
.
assertEqual
([],
errs
)
def
test_kb_for_bibedit
(
self
):
"""bibknowledge - test a bibedit-style *very* dynamic kb"""
from
invenio.bibknowledge
import
get_kbd_values_for_bibedit
myvalues
=
get_kbd_values_for_bibedit
(
"100__a"
,
searchwith
=
"Ellis"
,
expression
=
"100__a:*%*"
)
self
.
assertEqual
(
1
,
len
(
myvalues
))
def
test_kb_attribute_update
(
self
):
"""bibknowledge - attribute modifications persist in database"""
from
invenio.bibknowledge
import
update_kb_attributes
,
get_kb_id
from
invenio.bibknowledge_dblayer
import
get_kb_description
# NB: Tested here because with the exception of get_kb_description,
# these are exported by module bibknowledge. This mostly is
# exercising bibknowledge_dblayer, though.
dyn_kb_oldname
=
self
.
dyn_kbname
dyn_kb_newname
=
self
.
_name_a_db
()
junk_desc
=
self
.
_randomstring
()
dyn_kb_id
=
get_kb_id
(
dyn_kb_oldname
)
# we created it so we know it has no desc
self
.
assertEqual
(
''
,
get_kb_description
(
dyn_kb_oldname
))
# now check that we can rename it
update_kb_attributes
(
dyn_kb_oldname
,
dyn_kb_newname
)
self
.
assertEqual
(
None
,
get_kb_id
(
dyn_kb_oldname
))
self
.
assertEqual
(
dyn_kb_id
,
get_kb_id
(
dyn_kb_newname
))
# now check that we can tag it with a description
update_kb_attributes
(
dyn_kb_newname
,
dyn_kb_newname
,
junk_desc
)
self
.
assertEqual
(
junk_desc
,
get_kb_description
(
dyn_kb_newname
))
update_kb_attributes
(
dyn_kb_newname
,
dyn_kb_oldname
)
def
tearDown
(
self
):
"""bbibknowledge test cleanup"""
from
invenio.bibknowledge
import
delete_kb
delete_kb
(
self
.
dyn_kbname
)
TEST_SUITE
=
make_test_suite
(
BibknowledgeRegressionTests
)
if
__name__
==
"__main__"
:
run_test_suite
(
TEST_SUITE
)
Event Timeline
Log In to Comment