示例#1
0
def test_update_image_links_in_several_basic_cards_with_same_images():
    image1 = "![](path/to/img1.png)"
    image2 = "![](images/image2.png)"
    card1 = BasicNote(
        front_md=f"{image2}\n\nSome {image1} text",
        back_md=f"Another text\n\n{image1}\n{image2}",
        tags=[],
        deck_name="deck",
    )
    card2 = BasicNote(
        front_md=f"{image2}Some text {image1}",
        back_md=f"{image1} {image2}\n\nAnother text\n\n",
        tags=[],
        deck_name="deck",
    )
    image_links = {image1: [card1, card2], image2: [card2, card1]}
    expected_front1 = "![](image2.png)\n\nSome ![](img1.png) text"
    expected_back1 = "Another text\n\n![](img1.png)\n![](image2.png)"
    expected_front2 = "![](image2.png)Some text ![](img1.png)"
    expected_back2 = "![](img1.png) ![](image2.png)\n\nAnother text\n\n"

    img_handler._update_image_links_in_notes(image_links)

    assert expected_front1 == card1.updated_front_md
    assert expected_back1 == card1.updated_back_md
    assert expected_front2 == card2.updated_front_md
    assert expected_back2 == card2.updated_back_md
示例#2
0
def test_handle_images_when_cards_have_images(anki_media, image,
                                              another_image):
    image_link1 = f"![some image]({image})"
    image_link2 = f"![another img]({another_image})"
    card1 = BasicNote(
        f"Some text {image_link1}",
        f"{image_link2} Another text",
        tags=[],
        deck_name="deck",
    )
    card2 = BasicNote("Question here",
                      f"And answer here {image_link2}",
                      tags=[],
                      deck_name="deck")
    expected_front1 = f"Some text ![some image]({os.path.basename(image)})"
    expected_front2 = "Question here"
    expected_back1 = f"![another img]({os.path.basename(another_image)}) Another text"
    expected_back2 = (
        f"And answer here ![another img]({os.path.basename(another_image)})")

    img_handler.handle_images_in([card1, card2], anki_media)

    assert expected_front1 == card1.raw_front_md
    assert expected_front2 == card2.raw_front_md
    assert expected_back1 == card1.raw_back_md
    assert expected_back2 == card2.raw_back_md
示例#3
0
def test_fetch_image_links_if_cards_do_not_have_images():
    card1 = BasicNote(front_md="Some text",
                      back_md="Another text",
                      tags=[],
                      deck_name="deck")
    card2 = BasicNote(front_md="More\n\nText",
                      back_md="Answer text",
                      tags=[],
                      deck_name="deck")
    card3 = ClozeNote(text_md="Some {{c1::question}} here",
                      tags=[],
                      deck_name="deck")

    links = img_handler._fetch_image_links([card1, card2, card3])

    assert {} == links
示例#4
0
def test_convert_cards_to_html_works_with_multiple_cards():
    text1 = r"inside $$\sqrt{2}$$ text"
    text2 = "1. Item1\n" "2. Item2\n" "3. Item3\n"
    basic_note1 = BasicNote(front_md=text1, back_md=text2, tags=[], deck_name="")
    basic_note2 = BasicNote(front_md=text2, back_md=text1, tags=[], deck_name="")
    cloze_note = ClozeNote(text_md="Some question {{c1::42}}", tags=[], deck_name="")
    expected1 = r"<p>inside \[\sqrt{2}\] text</p>"
    expected2 = "<ol><li>Item1</li><li>Item2</li><li>Item3</li></ol>"
    expected3 = "<p>Some question {{c1::42}}</p>"

    converter.convert_notes_to_html([basic_note1, basic_note2, cloze_note])

    assert basic_note1.front_html == expected1
    assert basic_note1.back_html == expected2
    assert basic_note2.front_html == expected2
    assert basic_note2.back_html == expected1
    assert cloze_note.text_html == expected3
示例#5
0
def test_handle_images_copies_images_to_anki_media(anki_media, image,
                                                   path_to_anki_image):
    card = BasicNote("Some text",
                     f"Another text ![img]({image})",
                     tags=[],
                     deck_name="deck")

    img_handler.handle_images_in([card], anki_media)

    os.path.exists(path_to_anki_image)
示例#6
0
def test_update_image_links_when_no_image_links():
    card1 = ClozeNote(text_md="Some text", tags=[], deck_name="deck")
    card2 = BasicNote(front_md="More\n\nText",
                      back_md="Answer text",
                      tags=[],
                      deck_name="deck")

    img_handler._update_image_links_in_notes({})

    assert card1.raw_text_md == card1.updated_text_md
    assert card2.raw_front_md == card2.updated_front_md
    assert card2.raw_back_md == card2.updated_back_md
示例#7
0
def test_fetch_image_links_if_cards_have_same_image():
    image = "![](path/to/img1.png)"
    card1 = ClozeNote(text_md=f"long {{sentence}} or not\n\n{image}",
                      tags=[],
                      deck_name="deck")
    card2 = BasicNote(front_md=f"More\n\n{image}",
                      back_md="Answer text",
                      tags=[],
                      deck_name="deck")
    expected = {image: [card1, card2]}

    links = img_handler._fetch_image_links([card1, card2])

    assert expected == links
示例#8
0
def test_update_image_links_when_basic_card_has_image_link():
    image = "![](path/to/img1.png)"
    card = BasicNote(
        front_md=f"Some {image} text",
        back_md=f"Another text\n\n{image}",
        tags=[],
        deck_name="deck",
    )
    image_links = {image: [card]}
    expected_front = "Some ![](img1.png) text"
    expected_back = "Another text\n\n![](img1.png)"

    img_handler._update_image_links_in_notes(image_links)

    assert expected_front == card.updated_front_md
    assert expected_back == card.updated_back_md
示例#9
0
def test_update_image_links_when_card_has_different_image_links():
    image1 = "![](path/to/img1.png)"
    image2 = "![](images/image2.png)"
    card = BasicNote(
        front_md=f"{image2}\n\nSome {image1} text",
        back_md=f"Another text\n\n{image1}\n{image2}",
        tags=[],
        deck_name="deck",
    )
    image_links = {image1: [card], image2: [card]}
    expected_front = "![](image2.png)\n\nSome ![](img1.png) text"
    expected_back = "Another text\n\n![](img1.png)\n![](image2.png)"

    img_handler._update_image_links_in_notes(image_links)

    assert expected_front == card.updated_front_md
    assert expected_back == card.updated_back_md
示例#10
0
def test_fetch_image_links_if_cards_have_images():
    image1 = "![](path/to/img1.png)"
    image2 = "![](img2.png)"
    card1 = BasicNote(
        front_md="Some text",
        back_md=f"Another text\n\n{image1}",
        tags=[],
        deck_name="deck",
    )
    card2 = ClozeNote(text_md=f"{{More}}\n\n{image2}",
                      tags=[],
                      deck_name="deck")
    expected = {image1: [card1], image2: [card2]}

    links = img_handler._fetch_image_links([card1, card2])

    assert expected == links
示例#11
0
def test_update_image_links_when_basic_and_cloze_notes():
    image1 = "![](path/to/img1.png)"
    image2 = "![](images/image2.png)"
    card1 = BasicNote(
        front_md=f"{image2}\n\nSome {image1} text",
        back_md=f"Another text\n\n{image1}\n{image2}",
        tags=[],
        deck_name="deck",
    )
    card2 = ClozeNote(text_md=f"{image2}Some text {{{image1}}}",
                      tags=[],
                      deck_name="deck")
    image_links = {image1: [card1, card2], image2: [card2, card1]}
    expected_front = "![](image2.png)\n\nSome ![](img1.png) text"
    expected_back = "Another text\n\n![](img1.png)\n![](image2.png)"
    expected_cloze = "![](image2.png)Some text {![](img1.png)}"

    img_handler._update_image_links_in_notes(image_links)

    assert expected_front == card1.updated_front_md
    assert expected_back == card1.updated_back_md
    assert expected_cloze == card2.updated_text_md
import pytest

from inka.models.notes.basic_note import BasicNote
from inka.models.notes.cloze_note import ClozeNote

test_cases = {
    "Deck: Abraham\n": [],
    ("Deck: Abraham\n"
     "Tags: some tags here"): [],
    ("Deck: Abraham\n"
     "\n"
     "1. Some question?\n"
     "\n"
     "> Answer"): [
        BasicNote(front_md="Some question?",
                  back_md="Answer",
                  tags=[],
                  deck_name="Abraham")
    ],
    ("Deck: Abraham\n"
     "\n"
     "Tags: one two-three\n"
     "\n"
     "1. Some question?\n"
     "\n"
     "> Answer"): [
        BasicNote(
            front_md="Some question?",
            back_md="Answer",
            tags=["one", "two-three"],
            deck_name="Abraham",
        )
示例#13
0
def test_eq_when_not_equal(second_note):
    first_note = BasicNote("front", "back", ["tag1"], "deck")

    assert first_note != second_note
示例#14
0
def test_eq_when_same():
    first_note = BasicNote("front", "back", ["tag1"], "deck")
    second_note = BasicNote("front", "back", ["tag1"], "deck")

    assert first_note == second_note
示例#15
0
def basic_note() -> BasicNote:
    return BasicNote("front content", "back content", ["tag1", "tag2"],
                     "deck name")
示例#16
0
def test_get_anki_note_type(basic_note, config):
    expected = "my super type"
    config.update_option_value("anki", "basic_type", expected)

    assert basic_note.get_anki_note_type(config) == expected


def test_eq_when_same():
    first_note = BasicNote("front", "back", ["tag1"], "deck")
    second_note = BasicNote("front", "back", ["tag1"], "deck")

    assert first_note == second_note


@pytest.mark.parametrize(
    "second_note",
    (
        BasicNote("oops", "back", ["tag1"], "deck"),
        BasicNote("front", "oops", ["tag1"], "deck"),
        BasicNote("front", "back", ["tag1", "tag2"], "deck"),
        BasicNote("front", "back", ["tag1"], "my deck"),
        None,
        ClozeNote("front", ["tag1"], "my deck"),
        "short string",
    ),
)
def test_eq_when_not_equal(second_note):
    first_note = BasicNote("front", "back", ["tag1"], "deck")

    assert first_note != second_note
示例#17
0
def basic_note():
    """BasicNote object with dummy data"""
    return BasicNote(front_md="dummy", back_md="dummy", tags=[], deck_name="")
示例#18
0
def test_handle_images_if_no_images_then_fields_remain_same(anki_media):
    card = BasicNote("Some text", "Another text", tags=[], deck_name="deck")

    img_handler.handle_images_in([card], anki_media)

    assert card.updated_front_md == card.raw_front_md