text: # -*- coding: utf-8 -*-
  ########################################################################
  #                                                                      #
  # Тесты для методов работы с базой данных                              #
  #                                                                      #
  # MIT License                                                          #
  # Copyright (c) 2021 Michael Nikitenko                                 #
  #                                                                      #
  ########################################################################
  
  
  import unittest
  from unittest.mock import patch
  
  import db_engine
  
  
  class TestDB(unittest.TestCase):
      """Тестирование методов работы с базой данных"""
  
      def test_get_all_rows(self):
          """Тестируем получение всех строк из БД"""
          expected = [
              ('https://www.yanao.ru/presscenter/news/75851/',),
              ('https://www.yanao.ru/presscenter/news/75852/',),
              ('https://www.yanao.ru/presscenter/news/75853/',),
          ]
          unexpected = [
              ('https://www.yanao.ru/presscenter/news/75852/',),
              ('https://www.yanao.ru/presscenter/news/75852/',),
              ('https://www.yanao.ru/presscenter/news/75853/',),
          ]
  
          with patch('db_engine.cursor') as mock_cursor:
              mock_cursor.fetchall.return_value = expected
              self.assertIs(db_engine.cursor, mock_cursor)
              result = db_engine.get_all_rows()
              self.assertEqual(result, expected)
              self.assertNotEqual(result, unexpected)
  
      def test_generate_insert_query(self):
          """Тестируем генерацию INSERT SQL запроса"""
          test_data = {
              'title': 'test title',
              'url': 'https://www.yanao.ru/presscenter/news/75852/',
              'img_url': 'https://yanao.ru/upload/resize_cache/alt/bf8/bf8e970b216c97459af8e6ae68564b0f_1120_672.png',
          }
          expected_query = f"INSERT INTO news (title, url, img) VALUES " \
                           f"('{test_data['title']}', '{test_data['url']}', '{test_data['img_url']}')"
          unexpected_query = ''
          result = db_engine.generate_insert_query(test_data)
          self.assertEqual(result, expected_query)
          self.assertIsInstance(result, str)
  
      @patch('db_engine.conn')
      @patch('db_engine.cursor')
      def test_insert_data_in_db(self, mock_cursor, mock_conn):
          """Тестируем вставку в БД"""
          mock_conn.commit.return_value = False
          mock_cursor.execute.return_value = False
          test_data = {
              'title': 'test title',
              'url': 'https://www.yanao.ru/presscenter/news/75852/',
              'img_url': 'https://yanao.ru/upload/resize_cache/alt/bf8/bf8e970b216c97459af8e6ae68564b0f_1120_672.png',
          }
          self.assertIs(db_engine.cursor, mock_cursor)
          self.assertIs(db_engine.conn, mock_conn)
          result = db_engine.insert_data_in_db(test_data)
          self.assertTrue(result)
  