class TestForViewModel(unittest.TestCase):

    def setUp(self):
        self.view_model = ViewModel()

    def test_check_number_or_rows_in_init(self):
        self.assertEqual(self.view_model.get_number_of_rows(), 3)

    def test_check_init_matrix_by_zero_values(self):
        self.assertEqual(self.view_model.get_matrix_as_list(), [[0]*3]*3)

    def test_check_init_matrix_by_non_zero_values(self):
        content = [[2, 1, 2], [0, 3, 0], [3, 1, 1]]
        self.view_model.update_matrix_content(content)
        self.assertEqual(self.view_model.get_matrix_as_list(), [[2, 1, 2], [0, 3, 0], [3, 1, 1]])

    def test_get_number_of_rows(self):
        self.view_model.set_number_of_rows(4)
        self.assertEqual(self.view_model.get_number_of_rows(), 4)

    def test_change_matrix_rank(self):
        self.view_model.set_number_of_rows(4)
        self.assertEqual(self.view_model.init_zero_matrix_with_new_rank_value(), [[0]*4]*4)

    def test_calculate_determinant(self):
        content = [[2, 1, 2], [0, 3, 0], [3, 1, 1]]
        self.view_model.update_matrix_content(content)
        self.assertEqual(self.view_model.calculate_determinant(), -12)

    def test_set_answer(self):
        answer_str = '1'
        self.view_model.set_answer(answer_str)
        self.assertEqual(self.view_model.answer, answer_str)

    def test_check_correct_answer(self):
        content = [[2, 1, 2], [0, 3, 0], [3, 1, 1]]
        self.view_model.update_matrix_content(content)
        self.view_model.calculate_determinant()
        self.assertEqual(self.view_model.answer, -12)