def test_numeric_question_validate_answer() -> None: q = NumericQuestion(1, 'choose!', 1, 1000) a = Answer(15) a2 = Answer("a") a3 = Answer(1000) a4 = Answer(1001) a5 = Answer(True) assert q.validate_answer(a) is True assert q.validate_answer(a2) is False assert q.validate_answer(a3) is True assert q.validate_answer(a4) is False assert q.validate_answer(a5) is False
def test_answer_is_valid() -> None: a_multiple = Answer("a") a_checkbox = Answer(["a", "b"]) a_yesno = Answer(True) a_yesno_2 = Answer(1) a_numeric = Answer(15) assert a_multiple.is_valid(MultipleChoiceQuestion(1, "choose", ["a", "b"]))\ is True assert a_multiple.is_valid(MultipleChoiceQuestion(1, "choose", ["c", "b"])) \ is False assert a_checkbox.is_valid(CheckboxQuestion(2, "choose", ["a", "b"])) is \ True assert a_checkbox.is_valid(CheckboxQuestion(2, "choose", ["a", "a"])) is \ False assert a_yesno.is_valid(YesNoQuestion(1, "choose")) is True assert a_yesno_2.is_valid(YesNoQuestion(1, "choose")) is False assert a_numeric.is_valid(NumericQuestion(1, "5+10", 1, 20)) is True assert a_numeric.is_valid(NumericQuestion(1, "5+10", 18, 20)) is False
def test_numeric_question_get_similarity() -> None: q = NumericQuestion(1, 'choose!', 0, 10) a1 = Answer(5) a2 = Answer(6) assert q.get_similarity(a1, a2) == 0.9
def test_str_numeric_question() -> None: q = NumericQuestion(1, 'choose!', 1, 1000) assert str(q) == 'choose! (1, 1000)'
def test_survey_num_similarity() -> None: """A test for get_similarity() in class NumericQuestion.""" q = NumericQuestion(1, 'ABC', 0, 10) a1 = Answer(8) a2 = Answer(4) assert q.get_similarity(a1, a2) == 0.6
def test_survey_num_invalid_answer_second() -> None: """A test for validate_answer() in class NumericQuestion.""" q = NumericQuestion(1, 'ABC', 0, 10) a = Answer(7.5) assert q.validate_answer(a) is False
def test_survey_num_valid_answer() -> None: """A test for validate_answer() in class NumericQuestion.""" q = NumericQuestion(1, 'ABC', 0, 10) a = Answer(2) assert q.validate_answer(a)
def test_survey_num_to_string() -> None: """A test for __str__() in class NumericQuestion.""" q = NumericQuestion(1, 'ABC', 0, 10) assert type(str(q)) is str
def test_questions() -> None: mcq_1 = MultipleChoiceQuestion(1, "Cities in Canada", ["Toronto", "Ottawa", "Vancouver"]) assert mcq_1.id == 1 assert mcq_1.text == "Cities in Canada" assert "Cities in Canada" in str(mcq_1) assert "Toronto" in str(mcq_1) assert "Ottawa" in str(mcq_1) assert "Montreal" not in str(mcq_1) mcq_1_ans = Answer("Toronto") mcq_1_c_ans = Answer("Toronto") mcq_2_ans = Answer("Montreal") mcq_3_ans = Answer("") assert mcq_1_ans.is_valid(mcq_1) assert not mcq_2_ans.is_valid(mcq_1) assert mcq_1.validate_answer(mcq_1_ans) assert not mcq_1.validate_answer(mcq_2_ans) assert not mcq_1.validate_answer(mcq_3_ans) assert mcq_1.get_similarity(mcq_1_ans, mcq_1_c_ans) == 1.0 assert mcq_1.get_similarity(mcq_1_ans, mcq_2_ans) == 0.0 nq_1 = NumericQuestion(1, "A n.o between 1 and 5", 1, 5) nq_1_ans = Answer(1) nq_2_ans = Answer(2) nq_3_ans = Answer(3) nq_4_ans = Answer(5) nq_5_ans = Answer(10) nq_6_ans = Answer(1) assert nq_1.validate_answer(nq_1_ans) assert nq_1.validate_answer(nq_2_ans) assert nq_1.validate_answer(nq_3_ans) assert nq_1.validate_answer(nq_4_ans) assert not nq_1.validate_answer(nq_5_ans) assert nq_1_ans.is_valid(nq_1) assert nq_2_ans.is_valid(nq_1) assert nq_3_ans.is_valid(nq_1) assert nq_4_ans.is_valid(nq_1) assert not nq_5_ans.is_valid(nq_1) assert nq_1.get_similarity(nq_1_ans, nq_6_ans) == 1.0 assert nq_1.get_similarity(nq_1_ans, nq_4_ans) == 0.0 assert nq_1.get_similarity(nq_2_ans, nq_3_ans) == 0.75 ynq = YesNoQuestion(1, "Is earth round") ynq_1 = Answer(True) ynq_2 = Answer(False) ynq_3 = Answer(False) assert ynq_1.is_valid(ynq) assert ynq_2.is_valid(ynq) assert not ynq.get_similarity(ynq_1, ynq_2) assert ynq.get_similarity(ynq_2, ynq_3) cbq = CheckboxQuestion(1, "Cities in Canada", ["Toronto", "Ottawa", "Vancouver"]) cbq_1 = Answer(["Toronto", "Ottawa"]) cbq_2 = Answer(["Seoul", "Busan"]) cbq_3 = Answer(["Toronto", "Ottawa"]) cbq_4 = Answer(["Toronto", "Vancouver"]) assert cbq.validate_answer(cbq_1) assert not cbq.validate_answer(cbq_2) assert cbq_1.is_valid(cbq) assert not cbq_2.is_valid(cbq) assert cbq.get_similarity(cbq_1, cbq_3) == 1 assert cbq.get_similarity(cbq_1, cbq_4) == 1 / 3 assert cbq.get_similarity(cbq_1, cbq_2) == 0.0