{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "996a6c12",
   "metadata": {},
   "source": [
    "# 22-33 · Тесты для Flask\n",
    "\n",
    "Практика к разделу [«Автоматическое тестирование Flask-приложения»](../../site/chapters/glava-22/22-33-testiruem-flask.html)."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "44fa3323",
   "metadata": {},
   "source": [
    "## Про тестовый клиент\n",
    "\n",
    "`app.test_client()` формирует запрос внутри процесса и передаёт его приложению через тестовый интерфейс Flask/Werkzeug — без открытия сетевого порта и без настоящего браузера."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "54647796",
   "metadata": {},
   "source": [
    "## Рабочий пример — маленькое приложение и три проверки"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d387d1b8",
   "metadata": {},
   "outputs": [],
   "source": [
    "from flask import Flask, jsonify\n",
    "\n",
    "app = Flask(__name__)\n",
    "\n",
    "\n",
    "@app.route(\"/api/ping\")\n",
    "def ping():\n",
    "    return jsonify({\"status\": \"ok\"})\n",
    "\n",
    "\n",
    "@app.route(\"/net-takogo-adresa-tut-net\")\n",
    "def zavedomo_otsutstvuet():\n",
    "    pass\n",
    "\n",
    "\n",
    "client = app.test_client()\n",
    "\n",
    "otvet_ping = client.get(\"/api/ping\")\n",
    "otvet_404 = client.get(\"/adres-kotorogo-net\")\n",
    "\n",
    "print(otvet_ping.status_code, otvet_ping.get_json())\n",
    "print(otvet_404.status_code)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a633124d",
   "metadata": {},
   "source": [
    "## Проверка результата"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "61fc9a5b",
   "metadata": {},
   "outputs": [],
   "source": [
    "assert otvet_ping.status_code == 200\n",
    "assert otvet_ping.content_type == \"application/json\"\n",
    "assert otvet_ping.get_json() == {\"status\": \"ok\"}\n",
    "assert otvet_404.status_code == 404\n",
    "print(\"Верно: успешный JSON-ответ и код 404 для несуществующего адреса проверены тестовым клиентом.\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Cartesian Python 3.14",
   "language": "python",
   "name": "cartesian-python314"
  },
  "language_info": {
   "name": "python",
   "version": "3.14.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
