mirror of
https://github.com/gsi-upm/senpy
synced 2024-11-14 04:32:29 +00:00
908090f634
Bug-fixes and improvements: * Closes #5 * Closes #1 * Adds Client (beta) * Added several schemas * Lighter string representation -> should avoid delays in the analysis with plugins that have 'heavy' attributes Backwards-incompatible changes: * Context in headers by default * All schemas include a "@type" argument that is used for autodetection in the client ... And possibly many more, this is still <1.0
118 lines
3.3 KiB
Python
118 lines
3.3 KiB
Python
import logging
|
|
|
|
import jsonschema
|
|
|
|
import json
|
|
from unittest import TestCase
|
|
from senpy.models import Entry, Results, Sentiment, EmotionSet, Error
|
|
from senpy.plugins import SenpyPlugin
|
|
from pprint import pprint
|
|
|
|
|
|
class ModelsTest(TestCase):
|
|
def test_jsonld(self):
|
|
prueba = {"id": "test",
|
|
"analysis": [],
|
|
"entries": []}
|
|
r = Results(**prueba)
|
|
print("Response's context: ")
|
|
pprint(r.context)
|
|
|
|
assert r.id == "test"
|
|
|
|
j = r.jsonld(with_context=True)
|
|
print("As JSON:")
|
|
pprint(j)
|
|
assert ("@context" in j)
|
|
assert ("marl" in j["@context"])
|
|
assert ("entries" in j["@context"])
|
|
assert (j["@id"] == "test")
|
|
assert "id" not in j
|
|
|
|
r6 = Results(**prueba)
|
|
e = Entry({
|
|
"@id": "ohno",
|
|
"nif:isString": "Just testing"
|
|
})
|
|
r6.entries.append(e)
|
|
logging.debug("Reponse 6: %s", r6)
|
|
assert ("marl" in r6.context)
|
|
assert ("entries" in r6.context)
|
|
j6 = r6.jsonld(with_context=True)
|
|
logging.debug("jsonld: %s", j6)
|
|
assert ("@context" in j6)
|
|
assert ("entries" in j6)
|
|
assert ("analysis" in j6)
|
|
resp = r6.flask()
|
|
received = json.loads(resp.data.decode())
|
|
logging.debug("Response: %s", j6)
|
|
assert (received["entries"])
|
|
assert (received["entries"][0]["nif:isString"] == "Just testing")
|
|
assert (received["entries"][0]["nif:isString"] != "Not testing")
|
|
|
|
def test_id(self):
|
|
''' Adding the id after creation should overwrite the automatic ID
|
|
'''
|
|
r = Entry()
|
|
j = r.jsonld()
|
|
assert '@id' in j
|
|
r.id = "test"
|
|
j2 = r.jsonld()
|
|
assert j2['@id'] == 'test'
|
|
assert 'id' not in j2
|
|
|
|
def test_entries(self):
|
|
e = Entry()
|
|
self.assertRaises(jsonschema.ValidationError, e.validate)
|
|
e.nif__isString = "this is a test"
|
|
e.nif__beginIndex = 0
|
|
e.nif__endIndex = 10
|
|
e.validate()
|
|
|
|
def test_sentiment(self):
|
|
s = Sentiment()
|
|
self.assertRaises(jsonschema.ValidationError, s.validate)
|
|
s.nif__anchorOf = "so much testing"
|
|
s.prov__wasGeneratedBy = ""
|
|
s.validate()
|
|
|
|
def test_emotion_set(self):
|
|
e = EmotionSet()
|
|
self.assertRaises(jsonschema.ValidationError, e.validate)
|
|
e.nif__anchorOf = "so much testing"
|
|
e.prov__wasGeneratedBy = ""
|
|
e.validate()
|
|
|
|
def test_results(self):
|
|
r = Results()
|
|
e = Entry()
|
|
e.nif__isString = "Results test"
|
|
r.entries.append(e)
|
|
r.id = ":test_results"
|
|
r.validate()
|
|
|
|
def test_plugins(self):
|
|
self.assertRaises(Error, SenpyPlugin)
|
|
p = SenpyPlugin({"name": "dummy", "version": 0})
|
|
c = p.jsonld()
|
|
assert "info" not in c
|
|
assert "repo" not in c
|
|
assert "extra_params" in c
|
|
logging.debug("Framed:")
|
|
logging.debug(c)
|
|
p.validate()
|
|
|
|
def test_str(self):
|
|
"""The string representation shouldn't include private variables"""
|
|
r = Results()
|
|
p = SenpyPlugin({"name": "STR test", "version": 0})
|
|
p._testing = 0
|
|
s = str(p)
|
|
assert "_testing" not in s
|
|
r.analysis.append(p)
|
|
s = str(r)
|
|
assert "_testing" not in s
|
|
|
|
def test_frame_response(self):
|
|
pass
|