Esempio n. 1
0
 def setUp(self):
     self.validator = CollexValidator(local_ns="test", local_ns_address="http://test.org/#")
     self.tree = etree.parse("test_rdf.rdf")
     self.test_item = self.tree.xpath("//test:test", namespaces=self.validator.ns)[0]
Esempio n. 2
0
class TestValidator(unittest.TestCase):
    def setUp(self):
        self.validator = CollexValidator(local_ns="test", local_ns_address="http://test.org/#")
        self.tree = etree.parse("test_rdf.rdf")
        self.test_item = self.tree.xpath("//test:test", namespaces=self.validator.ns)[0]

    def test_passes_if_item_meets_minimum_reqs(self):
        self.assertEquals("", self.validator.validate_object(self.test_item))

    def test_invalid_if_item_is_missing_a_required_field(self):
        invalid_item = deepcopy(self.test_item)
        dc_title = invalid_item.xpath("dc:title", namespaces=self.validator.ns)[0]
        invalid_item.remove(dc_title)

        self.assertEquals("Required field dc:title is missing\n", self.validator.validate_object(invalid_item))
        del invalid_item

    def test_invalid_if_item_has_more_than_one_field_with_singular_restriction(self):
        invalid_item = deepcopy(self.test_item)
        tag = etree.Element("{{{0}}}title".format(self.validator.ns["dc"]))
        tag.text = "extra title tag"
        invalid_item.append(tag)

        self.assertEquals("Too many dc:title unique_fields -- can only be one\n", self.validator.validate_object(invalid_item))
        del invalid_item

    def test_invalid_dc_dates_are_caught(self):
        date_tag = etree.Element("{{{0}}}date".format(self.validator.ns["dc"]))

        date_tag.text = "1982"
        self.assertEquals("", self.validator.validate_date(date_tag))

        date_tag.text = "Uncertain"
        self.assertEquals("", self.validator.validate_date(date_tag))

        date_tag.text = "123a"
        self.assertEquals("Date tags only accept numeric characters", self.validator.validate_date(date_tag))

        date_tag.text = "2100"
        self.assertEquals("Date is in the future!", self.validator.validate_date(date_tag))

    def test_valid_collex_dates_pass(self):
        date_tag = etree.Element("{{{0}}}date".format(self.validator.ns["dc"]))
        date_tag.append(self.make_collex_date(label="1900-1952", value="1900, 1952"))

        self.assertEquals("", self.validator.validate_date(date_tag))

    def test_catch_multiple_collex_dates_in_one_dcdate(self):
        date_tag = etree.Element("{{{0}}}date".format(self.validator.ns["dc"]))
        date_tag.append(self.make_collex_date(label="1900-1952", value="1900, 1952"))
        date_tag.append(self.make_collex_date(label="1900-1952", value="1900, 1952"))

        self.assertEquals("Too many collex:date tags in the dc:date field -- only one allowed", self.validator.validate_date(date_tag))

    def test_collex_date_value_valid_if_follows_standard(self):
        self.assertTrue(self.validator.is_valid_collex_date_value("1991, 2000"))
        self.assertTrue(self.validator.is_valid_collex_date_value("199u"))
        self.assertTrue(self.validator.is_valid_collex_date_value("19uu,200u"))

    def test_collex_date_value_invalid_if_not_standard(self):
        self.assertFalse(self.validator.is_valid_collex_date_value("1991-2000"))
        self.assertFalse(self.validator.is_valid_collex_date_value("190, 12"))
        self.assertFalse(self.validator.is_valid_collex_date_value("3000"))

    def make_collex_date(self, label="", value=""):
        collex_tag = etree.Element("{{{0}}}date".format(self.validator.ns["collex"]))
        collex_label = etree.Element("{{{0}}}label".format(self.validator.ns["rdfs"]))
        collex_value = etree.Element("{{{0}}}value".format(self.validator.ns["rdf"]))

        collex_label.text = label
        collex_value.text = value
        collex_tag.append(collex_label)
        collex_tag.append(collex_value)

        return collex_tag