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
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
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
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
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)
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
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
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
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
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
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", )
def test_eq_when_not_equal(second_note): first_note = BasicNote("front", "back", ["tag1"], "deck") assert first_note != second_note
def test_eq_when_same(): first_note = BasicNote("front", "back", ["tag1"], "deck") second_note = BasicNote("front", "back", ["tag1"], "deck") assert first_note == second_note
def basic_note() -> BasicNote: return BasicNote("front content", "back content", ["tag1", "tag2"], "deck name")
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
def basic_note(): """BasicNote object with dummy data""" return BasicNote(front_md="dummy", back_md="dummy", tags=[], deck_name="")
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