Как высмеять команду Django, которая вставляет данные в модель django

Я выполняю unittest на команде Django, которая вставляет данные, полученные из ответа API, в таблицу базы данных. Я использую unittest и mock, чтобы подражать классу Command и его методу, но я не уверен, правильно ли я это делаю.

Ниже приведен мой код для Command и test:

Команда

class Command():    
  
    def _insert_data(self, report_data, start_date):
        for data in report_data:
           
            self.cursor.execute('''
                        INSERT IGNORE INTO `report`
                        (
                            `start_date`, `value_a`, `value_b`, `value_c`,`value_d`, 
                        )
                        VALUES
                        (%s,%s,%s,%s,%s);''',
                        (
                            str(start_date).split()[0], data['value_a'], data['value_b'], data['value_c'], data['value_d']
                            
                        )
                    )

test_report_data.py

from unittest import mock
from base.test import BaseTestCase
from client.models.intergration import Report
from client.management.commands.update_report import Command as ReportCommand

class CommandTestMixin(BaseTestCase):
    def setUp(self):
        super().setUp()
         
        self.mock_api_response = {
                    "metrics": {
                        "value_a": "123",
                        "value_b": "123",
                        "value_c": "1.48",
                        "value_d": "1.0",
                    }
                }

        self.mock_row = Report.objects.create(
                  date = "2022-06-013" 
                  value_a = "123",
                  value_b = "123" ,
                  value_c = "1.48",
                  value_d = "1.0",
         )
        


    def mock_response(self, json_data=None):
        mock_resp = mock.Mock()
        if json_data:
            mock_resp.json = mock.Mock(
                return_value = json_data
            )
        return mock_resp  

class TestInsertReportData(CommandTestMixin):
    def setUp(self):
        super().setUp()
    
    
    def test_api_data_insert(self):

        command = ReportCommand()
        command._insert_data = mock.Mock()
        mock_resp = self.mock_response(json_data = self.mock_api_response)
        command._insert_data.return_value = self.mock_row
        command._insert_data(mock_resp, "2022-06-13")
        
        row = Report.objects.first()
  
        self.assertEqual(str(row.start_date), "2022-06-13")
        self.assertEqual(row.value_a, "123")
        self.assertEqual(row.value_b, "123")
        self.assertEqual(row.value_c, "1.48")
        self.assertEqual(row.value_d, "1.0") 

Когда я запускаю вышеприведенный тест, он проходит успешно. Но я не уверен, что тест работает так, как должен работать, и ничего странного не происходит.

Я не уверен насчет возвращаемого значения command._insert_data.return_value = self.mock_row, правильно ли это делать или нет? Потому что когда я передаю mock_resp, который высмеивает ответ API через высмеиваемый метод _insert_data класса Command, я должен вставить точно такие же данные в таблицу и при запросе таблицы Report должен вернуть то же значение, что и mock_resp.

пожалуйста, исправьте мой тест и скажите, правильно ли я насмехаюсь над этим.

Вернуться на верх