コード例 #1
0
    def test_single_verse_object_set_verse_by_reference(
            self: ModelTestCase) -> None:
        # Given a test single verse object and a verse reference
        reference = "Genesis 1:1"

        # Given the verse id associated with that reference
        test_single_verse_object = TestSingleVerseObject(
            verse=ANOTHER_VALID_VERSE_ID)
        verse_id = convert_references_to_verse_ids(
            get_references(reference))[0]

        # Given that the current verse associated with the object is not the same as
        # the given reference
        self.assertNotEqual(test_single_verse_object.verse, reference)
        self.assertNotEqual(test_single_verse_object.verse, verse_id)

        # When we set the verse on the test object to be the reference
        test_single_verse_object.verse = reference
        test_single_verse_object.save()

        # Then the verse associated with the object matches the reference
        self.assertEqual(test_single_verse_object.verse, reference)

        # And the verse associated with the object after retrieving it from the DB
        # again still matches the reference
        updated_test_single_verse_object: TestSingleVerseObject = (
            TestSingleVerseObject.objects.get(id=test_single_verse_object.id))
        self.assertEqual(updated_test_single_verse_object.verse, reference)
コード例 #2
0
ファイル: fields.py プロジェクト: avendesora/djangobible
    def get_prep_value(self: VerseField, value: int | str | None) -> int:
        """Validate and convert the value to a verse id int."""
        if isinstance(value, str):
            validate_verse(value)
            value = bible.convert_references_to_verse_ids(
                bible.get_references(value), )[0]
        elif isinstance(value, int) and not bible.is_valid_verse_id(value):
            raise ValidationError(f"{value} is not a valid verse id.")

        return super().get_prep_value(value)
コード例 #3
0
ファイル: validators.py プロジェクト: avendesora/djangobible
def validate_verse(verse_value: str | None) -> None:
    """Validate that the given value is a valid string representation of a verse."""
    if verse_value is None:
        return

    references: list[NormalizedReference] = get_references(verse_value)

    if not references:
        raise ValidationError("Not a valid reference.")

    if len(references) > 1:
        raise ValidationError("Only single verse references allowed.")

    verse_ids: list[int] = convert_references_to_verse_ids(references)

    if len(verse_ids) > 1:
        raise ValidationError("Only single verse references allowed.")
コード例 #4
0
ファイル: test_search.py プロジェクト: avendesora/djangobible
    def test_search_by_text_with_scripture_references(
            self: SearchTestCase) -> None:
        # Given test_objects with scripture references and a search text
        text = ("You should read Psalm 130:4,8, Jeremiah 29:32-30:10,31:12, "
                "Matthew 1:18 - 2:18, and Luke 3: 5-7.")
        test_objects = get_test_objects()

        # When searching for test objects associated with the verses in the search text
        references = get_references(text)
        verse_ids = convert_references_to_verse_ids(references)
        actual_test_objects = TestObject.objects.filter_by_verse_ids(verse_ids)

        # Then the result is a queryset containing test object 1 and test object 5
        self.assertEqual(len(actual_test_objects), 2)

        for index, test_object in enumerate(test_objects):
            if index in {1, 5}:
                self.assertIn(test_object, actual_test_objects)
            else:
                self.assertNotIn(test_object, actual_test_objects)
コード例 #5
0
    def test_add_verses_from_text_with_scripture_references(
        self: ModelTestCase, ) -> None:
        # Given a test_object and a text with scripture references
        test_object = TestObjectFactory()
        text = ("You should read Psalm 130:4,8, Jeremiah 29:32-30:10,31:12, "
                "Matthew 1:18 - 2:18, and Luke 3: 5-7.")

        # Get the references from the text and convert them to verse ids
        references = get_references(text)
        verse_ids = convert_references_to_verse_ids(references)

        # When we add all of the verse ids to the test object
        for verse_id in verse_ids:
            test_object.add_verse(verse_id)

        # Then the list of verse ids list matches
        actual_verse_ids = test_object.verse_ids

        self.assertEqual(actual_verse_ids, verse_ids)
        self.assertEqual(actual_verse_ids, list(EXPECTED_VERSE_IDS))
コード例 #6
0
ファイル: test_search.py プロジェクト: avendesora/djangobible
def get_test_objects() -> list[TestObject]:
    test_objects = []
    references = [
        "Genesis 1:1-10",
        "Psalm 130",
        "Matthew 18",
        "Luke 15",
        "Exodus 20",
        "Jeremiah 29",
        "Psalm 51",
        "Genesis 1:1",
        "luke 2",
        "Genesis 1:1-4",
    ]

    for index in range(10):
        test_object = TestObjectFactory()
        test_object.set_verses(
            convert_references_to_verse_ids(get_references(
                references[index])), )
        test_objects.append(test_object)

    return test_objects
コード例 #7
0
ファイル: fields.py プロジェクト: avendesora/djangobible
    def get_db_prep_save(
        self: VerseField,
        value: Any,
        **kwargs: Any,
    ) -> int | None:
        """Validate and convert the value to a verse id int before saving to the DB."""
        if not value:
            return None

        if isinstance(value, str):
            references = bible.get_references(value)
            verse_ids = bible.convert_references_to_verse_ids(references)

            if not verse_ids:
                raise ValidationError(
                    f"{value} does not contain a valid Scripture reference.", )

            value = verse_ids[0]

        if not bible.is_valid_verse_id(value):
            raise ValidationError(f"{value} is not a valid verse id.")

        return int(value)