def test_question_load_empty_answer(): """load question and only some empty answers; check empty answers are not loaded. """ quest = exam2pdf.Question() sequence = ( "Text", "Subject", "dir/ec/tor/y", 1, "", "", "Answer", "", "", "", "", "image.png", ) iterator = iter(sequence) quest.load_sequentially(iterator) assert quest.text == sequence[0] assert quest.subject == sequence[1] assert quest.image == Path(sequence[2]) assert quest.level == sequence[3] assert quest.answers[0].text == sequence[6] assert quest.answers[0].image == Path(".") assert quest.answers[1].text == sequence[10] assert quest.answers[1].image == Path(sequence[11]) with pytest.raises(IndexError): _ = quest.answers[2]
def test_copy_mix_exam_add_question(mix_dummy_exam): ex = mix_dummy_exam ex_questions_len = len(ex.questions) new_ex = ex.copy() new_ex.add_question(exam2pdf.Question("new")) assert len(ex.questions) == ex_questions_len
def test_question_get(attribute, expected): """Test default attribute values """ text = "What's your name?" q = exam2pdf.Question(text) assert getattr(q, attribute) == expected
def test_question_default(): """Test default arguments """ q = exam2pdf.Question() expected = "" assert q.text == expected
def test_question_answer_correct_false(): """Test ineffectiveness of correct setting for the first answer added """ q = exam2pdf.Question("Who are you?") a1 = exam2pdf.Answer() q.add_answer(a1, False) assert q.correct_answer == a1
def test_question_init_empty(): """test init with no answer """ q = exam2pdf.Question() assert q.text == "" assert q.subject == "" assert q.image == Path() assert q.level == 0
def test_question_init(text, subject, image, level): """Test arguments assignments """ q = exam2pdf.Question(text, subject=subject, image=image, level=level) assert q.text == text assert q.subject == subject assert q.image == image assert q.level == level
def test_exam_add_path_parent2(tmp_path): image = Path("images/image.png") folder_path = tmp_path q1 = exam2pdf.Question("q1 text", "") q1.answers = ( exam2pdf.Answer("a1 text", image), exam2pdf.Answer("a2 text", image), ) q2 = exam2pdf.Question("q2 text", "", image) q2.add_answer(exam2pdf.Answer("a3 text")) ex = exam2pdf.Exam(q1, q2) ex.add_path_parent(folder_path) assert ex.questions[0].image == Path() assert ex.questions[0].answers[0].image == folder_path / image assert ex.questions[0].answers[1].image == folder_path / image assert ex.questions[1].image == folder_path / image assert ex.questions[1].answers[0].image == Path()
def mix_dummy_exam(): q1 = exam2pdf.Question( "question 1: correct is n. two", "subject 1", Path("a.png") ) a1 = exam2pdf.Answer("answer 1", Path("b.png")) a2 = exam2pdf.Answer("answer 2", Path("c.png")) a3 = exam2pdf.Answer("answer 3", Path("a.png")) q1.answers = (a1, a2, a3) q1.correct_option = "B" q2 = exam2pdf.Question( "question 2: correct is n. one", "subject 1", Path("a.png") ) a1 = exam2pdf.Answer("answer 1") a2 = exam2pdf.Answer("answer 2") a3 = exam2pdf.Answer("answer 3") q2.answers = (a1, a2, a3) q3 = exam2pdf.TrueFalseQuest("question 3: correct is True (first)") a1 = exam2pdf.TrueFalseAnswer(True) a2 = exam2pdf.TrueFalseAnswer(False) q3.answers = (a1, a2) q4 = exam2pdf.Question("question 4: no answer", "subject 2", Path("b.png")) q5 = exam2pdf.TrueFalseQuest("question 5: correct is False (first))") a1 = exam2pdf.TrueFalseAnswer(False) a2 = exam2pdf.TrueFalseAnswer(True) q5.answers = (a1, a2) q6 = exam2pdf.Question( "question 6: correct is n. three", "subject 4", Path("c.png") ) a1 = exam2pdf.Answer("answer 1") a2 = exam2pdf.Answer("answer 2") a3 = exam2pdf.Answer("answer 3") a4 = exam2pdf.Answer("answer 4") q6.add_answer(a1) q6.add_answer(a2) q6.add_answer(a3, is_correct=True) q6.add_answer(a4) dummy_ex = exam2pdf.Exam(q1, q2, q3, q4, q5, q6) return dummy_ex
def test_question_init_all_args(): """test init with no answer """ text, subject, image, level = ("q text", "q subject", Path("image.png"), 2) q = exam2pdf.Question(text, subject, image, level) assert q.text == text assert q.subject == subject assert q.image == image assert q.level == level
def test_copy_exam_add_question(dummy_exam): """GIVEN a exam copy WHEN a question is added to the copy THEN the original number of questions does not change""" ex = dummy_exam ex_questions_len = len(ex.questions) new_ex = ex.copy() new_ex.add_question(exam2pdf.Question("new")) assert len(ex.questions) == ex_questions_len
def test_question_add_one_answer(): """Test add answer """ q = exam2pdf.Question("Who are you?") a1 = exam2pdf.Answer("That's me.") q.add_answer(a1) assert q.correct_answer == a1 assert q.correct_index == 0 assert q.correct_option == "A"
def test_question_set(attribute, expected): """Test set right and wrong attribute """ q = exam2pdf.Question() try: setattr(q, attribute, expected) except TypeError: assert False assert getattr(q, attribute) == expected
def test_exam_question(): question1 = exam2pdf.Question("mc quest1 text", "subject") question1.answers = ( exam2pdf.Answer("Q1 A1"), exam2pdf.Answer("Q1 A2"), exam2pdf.Answer("Q1 A3"), ) question2 = exam2pdf.Question("mc quest2 text", "subject") question2.answers = ( exam2pdf.Answer("Q2 A1"), exam2pdf.Answer("Q2 A2"), exam2pdf.Answer("Q2 A3"), ) ex = exam2pdf.Exam(question1, question2) assert ex.questions[0].answers[1].image == Path() assert ex.questions[0].correct_answer.text == "Q1 A1" assert ex.questions[1].text == "mc quest2 text"
def test_question_correct_option(): """Test add answer """ q = exam2pdf.Question("Who are you?") a1 = exam2pdf.Answer("That's me.") a2 = exam2pdf.Answer("That's you.") q.add_answer(a1), q.add_answer(a2) with pytest.raises(ValueError): q.correct_option = "X"
def test_question_correct_index_invalid(): """Test set invalid correct answer index """ q = exam2pdf.Question("Who are you?") a1 = exam2pdf.Answer() a2 = exam2pdf.Answer() q.add_answer(a1) q.add_answer(a2) with pytest.raises(ValueError): q.correct_index = 2
def test_question_answer_add_one(): """Test one answer addition and correctness """ q = exam2pdf.Question("Who are you?") a = exam2pdf.Answer() q.add_answer(a) assert a in q.answers assert q.correct_answer == a assert q.correct_index == 0
def dummy_exam(): q1, q2, q3, q4, q5 = ( exam2pdf.Question("q1 text", "q1 subject", Path("a.png"), 1), exam2pdf.Question("q2 text", "q2 subject", Path("b.png"), 2), exam2pdf.Question("q3 text", "q3 subject", Path("c.png"), 3), exam2pdf.Question("q4 text", "q4 subject", Path("a.png"), 4), exam2pdf.Question("q5 text", "q5 subject", Path("b.png"), 5), ) q1.answers = ( exam2pdf.Answer("q1 a1"), exam2pdf.Answer("q1 a2", Path("t1.jpg")), ) q1.correct_index = 1 q2.answers = ( exam2pdf.Answer("q2 a1", Path("t2.png")), exam2pdf.Answer("q2 a2"), ) return exam2pdf.Exam(q1, q2, q3, q4, q5)
def test_question_shuffle_one_answer(): """Test shuffle with one answer added """ q = exam2pdf.Question("Who are you?") a1 = exam2pdf.Answer("That's me.") q.add_answer(a1) random.seed(1) q.shuffle() assert q.correct_answer == a1 assert q.correct_index == 0 assert q.correct_option == "A"
def test_question_answer_correct_set(): """Test correctness of the last answer added when set correct """ q = exam2pdf.Question("Who are you?") a1 = exam2pdf.Answer() a2 = exam2pdf.Answer() q.add_answer(a2) q.add_answer(a1, True) assert q.correct_answer == a1 assert q.correct_index == 1
def test_question_correct_index_set(): """Test set correct answer index """ q = exam2pdf.Question("Who are you?") a1 = exam2pdf.Answer() a2 = exam2pdf.Answer() q.add_answer(a1) q.add_answer(a2) q.correct_index = 1 assert q.correct_answer == a2 assert q.correct_index == 1
def test_question_add_two_answers(): """Test add answer """ q = exam2pdf.Question("Who are you?") a1 = exam2pdf.Answer("That's me.") a2 = exam2pdf.Answer("That's you.") q.add_answer(a1), q.add_answer(a2) q.correct_option = "B" assert q.correct_answer == a2 assert q.correct_index == 1 assert q.correct_option == "B"
def test_question_load_empty(): """Empty iterator. """ test_tuple = () quest = exam2pdf.Question() quest.load_sequentially(iter(test_tuple)) assert quest.text == "" assert quest.subject == "" assert quest.image == Path() assert quest.level == 0 assert quest.answers == ()
def test_exam_add_path_parent1(tmp_path): """test with a file path """ image = Path("images/image.png") file_path = tmp_path / "A.txt" file_path.touch() q1 = exam2pdf.Question("q1 text", "") q1.answers = ( exam2pdf.Answer("a1 text", image), exam2pdf.Answer("a2 text", image), ) q2 = exam2pdf.Question("q2 text", "", image) q2.add_answer(exam2pdf.Answer("a3 text")) ex = exam2pdf.Exam(q1, q2) ex.add_path_parent(file_path) assert ex.questions[0].image == Path() assert ex.questions[0].answers[0].image == file_path.parent / image assert ex.questions[0].answers[1].image == file_path.parent / image assert ex.questions[1].image == file_path.parent / image assert ex.questions[1].answers[0].image == Path()
def test_question_load_full(): """load a complete question; no answer. """ test_tuple = ("t1", "s1", "p1", "1") quest = exam2pdf.Question() quest.load_sequentially(iter(test_tuple)) assert quest.text == test_tuple[0] assert quest.subject == test_tuple[1] assert quest.image == Path(test_tuple[2]) assert quest.level == int(test_tuple[3]) assert quest.answers == ()
def test_question_answer_add_two(): """Test two answers addition and correctness """ q = exam2pdf.Question("Who are you?") a1 = exam2pdf.Answer() a2 = exam2pdf.Answer() q.add_answer(a1) q.add_answer(a2) assert q.answers == (a1, a2) assert q.correct_answer == a1 assert q.correct_index == 0
def test_question_load_partial(): """load question text and subject; check for default image, level; no answer. """ test_tuple = ("t1", "s1") quest = exam2pdf.Question() quest.load_sequentially(iter(test_tuple)) assert quest.text == test_tuple[0] assert quest.subject == test_tuple[1] assert quest.image == Path() assert quest.level == 0 assert quest.answers == ()
def test_question_print(): """test __str__ method """ quest = exam2pdf.Question() quest_text = "Text" quest_subject = "Subject" quest_image = "dir/ec/tor/y" quest_level = 1 iterator = iter((quest_text, quest_subject, quest_image, quest_level)) quest.load_sequentially(iterator) assert f"text: {quest.text}" in quest.__str__() assert f"subject: {quest_subject}" in quest.__str__() assert f"image: {quest_image}" in quest.__str__() assert f"level: {quest_level}" in quest.__str__()
def test_question_add_path_parent0(): """Test whether not existing file path is added to Answer.image """ path = Path("home/my_home/file.txt") quest = exam2pdf.Question("question text", image=Path()) image_path = Path("image1.png") answer_1 = exam2pdf.Answer() answer_1.image = image_path answer_2 = exam2pdf.Answer() answer_2.image = Path() quest.answers = (answer_1, answer_2) quest.add_parent_path(path) assert quest.image == Path() assert quest.answers[0].image == path.parent / image_path assert quest.answers[1].image == Path()
def test_question_load_partial_answer(): """load question and only answer text; answer image checked for default value. """ quest = exam2pdf.Question() sequence = ("Text", "Subject", "dir/ec/tor/y", 1, "Answer") iterator = iter(sequence) quest.load_sequentially(iterator) assert quest.text == sequence[0] assert quest.subject == sequence[1] assert quest.image == Path(sequence[2]) assert quest.level == sequence[3] assert quest.answers[0].text == sequence[4] assert quest.answers[0].image == Path(".") with pytest.raises(IndexError): _ = quest.answers[1]