Untitled

🧩 Syntax:
python -m pytest
================================================================================= test session starts =================================================================================
platform win32 -- Python 3.9.12, pytest-7.1.2, pluggy-1.0.0
rootdir: C:\Users\nmyle\OneDrive\Desktop\flaskcode\flaskblog2
plugins: anyio-3.5.0
collected 8 items

app\tests\test_testingpytest.py ...                                                                                                                                              [ 37%]
app\tests\functional\test_routes.py FFFE                                                                                                                                         [ 87%]
app\tests\unit\test_models.py .                                                                                                                                                  [100%]

======================================================================================= ERRORS ========================================================================================
_________________________________________________________________________ ERROR at setup of test_valid_login __________________________________________________________________________

self = <sqlalchemy.engine.base.Connection object at 0x0000023137D657F0>, dialect = <sqlalchemy.dialects.sqlite.pysqlite.SQLiteDialect_pysqlite object at 0x0000023137D35670>
constructor = <bound method DefaultExecutionContext._init_compiled of <class 'sqlalchemy.dialects.sqlite.base.SQLiteExecutionContext'>>
statement = 'INSERT INTO user (username, hashed_password, email, confirmation_email, reset_email_password) VALUES (?, ?, ?, ?, ?)'
parameters = ('fkpr[kfkuh', b'$2b$12$hAnRfVSm6r0uTMB29QikPek13Kw6c3g1lYJpD2v3n2EyUUBO6zjQC', 'nmyles@mail.com', 0, 0)
execution_options = immutabledict({'autocommit': True, 'compiled_cache': {(<sqlalchemy.dialects.sqlite.pysqlite.SQLiteDialect_pysqlite obj...word', 'username'), False, False), <sqlalchemy.dialects.sqlite.base.SQLiteCompiler object at 0x0000023137D6CE20>, 1]}})
args = (<sqlalchemy.dialects.sqlite.base.SQLiteCompiler object at 0x0000023137D6CE20>, [{'confirmation_email': False, 'email'...w6c3g1lYJpD2v3n2EyUUBO6zjQC', 'username': 'fkpr[kfkuh'}], <sqlalchemy.sql.dml.Insert object at 0x0000023137D6C880>, [])
kw = {'cache_hit': symbol('CACHE_MISS')}, branched = <sqlalchemy.engine.base.Connection object at 0x0000023137D657F0>
conn = <sqlalchemy.pool.base._ConnectionFairy object at 0x0000023137D65DF0>, context = <sqlalchemy.dialects.sqlite.base.SQLiteExecutionContext object at 0x0000023137DBFCD0>
cursor = <sqlite3.Cursor object at 0x0000023137D70E30>, fn = <function ConnectionEvents._listen.<locals>.wrap_before_cursor_execute at 0x0000023137D94550>, evt_handled = False

    def _execute_context(
        self,
        dialect,
        constructor,
        statement,
        parameters,
        execution_options,
        *args,
        **kw
    ):
        """Create an :class:`.ExecutionContext` and execute, returning
        a :class:`_engine.CursorResult`."""

        branched = self
        if self.__branch_from:
            # if this is a "branched" connection, do everything in terms
            # of the "root" connection, *except* for .close(), which is
            # the only feature that branching provides
            self = self.__branch_from

        try:
            conn = self._dbapi_connection
            if conn is None:
                conn = self._revalidate_connection()

            context = constructor(
                dialect, self, conn, execution_options, *args, **kw
            )
        except (exc.PendingRollbackError, exc.ResourceClosedError):
            raise
        except BaseException as e:
            self._handle_dbapi_exception(
                e, util.text_type(statement), parameters, None, None
            )

        if (
            self._transaction
            and not self._transaction.is_active
            or (
                self._nested_transaction
                and not self._nested_transaction.is_active
            )
        ):
            self._invalid_transaction()

        elif self._trans_context_manager:
            TransactionalContext._trans_ctx_check(self)

        if self._is_future and self._transaction is None:
            self._autobegin()

        context.pre_exec()

        if dialect.use_setinputsizes:
            context._set_input_sizes()

        cursor, statement, parameters = (
            context.cursor,
            context.statement,
            context.parameters,
        )

        if not context.executemany:
            parameters = parameters[0]

        if self._has_events or self.engine._has_events:
            for fn in self.dispatch.before_cursor_execute:
                statement, parameters = fn(
                    self,
                    cursor,
                    statement,
                    parameters,
                    context,
                    context.executemany,
                )

        if self._echo:

            self._log_info(statement)

            stats = context._get_cache_stats()

            if not self.engine.hide_parameters:
                self._log_info(
                    "[%s] %r",
                    stats,
                    sql_util._repr_params(
                        parameters, batches=10, ismulti=context.executemany
                    ),
                )
            else:
                self._log_info(
                    "[%s] [SQL parameters hidden due to hide_parameters=True]"
                    % (stats,)
                )

        evt_handled = False
        try:
            if context.executemany:
                if self.dialect._has_events:
                    for fn in self.dialect.dispatch.do_executemany:
                        if fn(cursor, statement, parameters, context):
                            evt_handled = True
                            break
                if not evt_handled:
                    self.dialect.do_executemany(
                        cursor, statement, parameters, context
                    )
            elif not parameters and context.no_parameters:
                if self.dialect._has_events:
                    for fn in self.dialect.dispatch.do_execute_no_params:
                        if fn(cursor, statement, context):
                            evt_handled = True
                            break
                if not evt_handled:
                    self.dialect.do_execute_no_params(
                        cursor, statement, context
                    )
            else:
                if self.dialect._has_events:
                    for fn in self.dialect.dispatch.do_execute:
                        if fn(cursor, statement, parameters, context):
                            evt_handled = True
                            break
                if not evt_handled:
>                   self.dialect.do_execute(
                        cursor, statement, parameters, context
                    )

..\..\..\..\anaconda3\lib\site-packages\sqlalchemy\engine\base.py:1808:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <sqlalchemy.dialects.sqlite.pysqlite.SQLiteDialect_pysqlite object at 0x0000023137D35670>, cursor = <sqlite3.Cursor object at 0x0000023137D70E30>
statement = 'INSERT INTO user (username, hashed_password, email, confirmation_email, reset_email_password) VALUES (?, ?, ?, ?, ?)'
parameters = ('fkpr[kfkuh', b'$2b$12$hAnRfVSm6r0uTMB29QikPek13Kw6c3g1lYJpD2v3n2EyUUBO6zjQC', 'nmyles@mail.com', 0, 0)
context = <sqlalchemy.dialects.sqlite.base.SQLiteExecutionContext object at 0x0000023137DBFCD0>

    def do_execute(self, cursor, statement, parameters, context=None):
>       cursor.execute(statement, parameters)
E       sqlite3.OperationalError: no such table: user

..\..\..\..\anaconda3\lib\site-packages\sqlalchemy\engine\default.py:732: OperationalError

The above exception was the direct cause of the following exception:

new_user = <User 'fkpr[kfkuh'>

    @pytest.fixture()
    def init_database(new_user):

        # Create the database and the database table
        db.create_all()
        # Insert user data
        # fill out the data that is new. ]

        db.session.add(new_user)
        # Commit the changes for the users
>       db.session.commit()

app\tests\conftest.py:93:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
..\..\..\..\anaconda3\lib\site-packages\sqlalchemy\orm\session.py:1431: in commit
    self._transaction.commit(_to_root=self.future)
..\..\..\..\anaconda3\lib\site-packages\sqlalchemy\orm\session.py:829: in commit
    self._prepare_impl()
..\..\..\..\anaconda3\lib\site-packages\sqlalchemy\orm\session.py:808: in _prepare_impl
    self.session.flush()
..\..\..\..\anaconda3\lib\site-packages\sqlalchemy\orm\session.py:3363: in flush
    self._flush(objects)
..\..\..\..\anaconda3\lib\site-packages\sqlalchemy\orm\session.py:3503: in _flush
    transaction.rollback(_capture_exception=True)
..\..\..\..\anaconda3\lib\site-packages\sqlalchemy\util\langhelpers.py:70: in __exit__
    compat.raise_(
..\..\..\..\anaconda3\lib\site-packages\sqlalchemy\util\compat.py:207: in raise_
    raise exception
..\..\..\..\anaconda3\lib\site-packages\sqlalchemy\orm\session.py:3463: in _flush
    flush_context.execute()
..\..\..\..\anaconda3\lib\site-packages\sqlalchemy\orm\unitofwork.py:456: in execute
    rec.execute(self)
..\..\..\..\anaconda3\lib\site-packages\sqlalchemy\orm\unitofwork.py:630: in execute
    util.preloaded.orm_persistence.save_obj(
..\..\..\..\anaconda3\lib\site-packages\sqlalchemy\orm\persistence.py:244: in save_obj
    _emit_insert_statements(
..\..\..\..\anaconda3\lib\site-packages\sqlalchemy\orm\persistence.py:1237: in _emit_insert_statements
    result = connection._execute_20(
..\..\..\..\anaconda3\lib\site-packages\sqlalchemy\engine\base.py:1620: in _execute_20
    return meth(self, args_10style, kwargs_10style, execution_options)
..\..\..\..\anaconda3\lib\site-packages\sqlalchemy\sql\elements.py:325: in _execute_on_connection
    return connection._execute_clauseelement(
..\..\..\..\anaconda3\lib\site-packages\sqlalchemy\engine\base.py:1487: in _execute_clauseelement
    ret = self._execute_context(
..\..\..\..\anaconda3\lib\site-packages\sqlalchemy\engine\base.py:1851: in _execute_context
    self._handle_dbapi_exception(
..\..\..\..\anaconda3\lib\site-packages\sqlalchemy\engine\base.py:2032: in _handle_dbapi_exception
    util.raise_(
..\..\..\..\anaconda3\lib\site-packages\sqlalchemy\util\compat.py:207: in raise_
    raise exception
..\..\..\..\anaconda3\lib\site-packages\sqlalchemy\engine\base.py:1808: in _execute_context
    self.dialect.do_execute(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <sqlalchemy.dialects.sqlite.pysqlite.SQLiteDialect_pysqlite object at 0x0000023137D35670>, cursor = <sqlite3.Cursor object at 0x0000023137D70E30>
statement = 'INSERT INTO user (username, hashed_password, email, confirmation_email, reset_email_password) VALUES (?, ?, ?, ?, ?)'
parameters = ('fkpr[kfkuh', b'$2b$12$hAnRfVSm6r0uTMB29QikPek13Kw6c3g1lYJpD2v3n2EyUUBO6zjQC', 'nmyles@mail.com', 0, 0)
context = <sqlalchemy.dialects.sqlite.base.SQLiteExecutionContext object at 0x0000023137DBFCD0>

    def do_execute(self, cursor, statement, parameters, context=None):
>       cursor.execute(statement, parameters)
E       sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: user
E       [SQL: INSERT INTO user (username, hashed_password, email, confirmation_email, reset_email_password) VALUES (?, ?, ?, ?, ?)]
E       [parameters: ('fkpr[kfkuh', b'$2b$12$hAnRfVSm6r0uTMB29QikPek13Kw6c3g1lYJpD2v3n2EyUUBO6zjQC', 'nmyles@mail.com', 0, 0)]
E       (Background on this error at: https://sqlalche.me/e/14/e3q8)

..\..\..\..\anaconda3\lib\site-packages\sqlalchemy\engine\default.py:732: OperationalError
====================================================================================== FAILURES ======================================================================================= 
_______________________________________________________________________________ test_register_page_get ________________________________________________________________________________ 

make_app_run_in_test_env = <FlaskClient <Flask 'app.tests.conftest'>>

    def test_register_page_get(make_app_run_in_test_env):
        client = make_app_run_in_test_env

        """
        GIVEN a Flask application configured for testing
        WHEN the '/register requested (GET)
        THEN check that the response is valid
        """
        response = client.get('/register')
        """
        In Python, the assert statement is used to continue the execute if the given condition evaluates to True.
        If the assert condition evaluates to False, then it raises the AssertionError exception with the specified error message.
        """
        # Why use a b string? What is response.data? Answer it only work if I have a status code 200.
>       assert response.status_code == 200
E       assert 404 == 200
E        +  where 404 = <WrapperTestResponse streamed [404 NOT FOUND]>.status_code

app\tests\functional\test_routes.py:24: AssertionError
_______________________________________________________________________________ test_register_page_post _______________________________________________________________________________ 

make_app_run_in_test_env = <FlaskClient <Flask 'app.tests.conftest'>>

    def test_register_page_post(make_app_run_in_test_env):
        client = make_app_run_in_test_env
        """
        GIVEN a Flask application configured for testing
        WHEN the '/register requested (POST)
        THEN check that the response is valid
        """
        response = client.post('/register')
        """
        In Python, the assert statement is used to continue the execute if the given condition evaluates to True.
        If the assert condition evaluates to False, then it raises the AssertionError exception with the specified error message.
        """
        # Why use a b string? What is response.data? Answer it only work if I have a status code 200.
>       assert response.status_code == 200
E       assert 404 == 200
E        +  where 404 = <WrapperTestResponse streamed [404 NOT FOUND]>.status_code

app\tests\functional\test_routes.py:41: AssertionError
_________________________________________________________________________________ test_verified_email _________________________________________________________________________________ 

make_app_run_in_test_env = <FlaskClient <Flask 'app.tests.conftest'>>, new_user = <User 'fkpr[kfkuh'>

    def test_verified_email( make_app_run_in_test_env, new_user):
        # making the token work because I can't import methods
        client = make_app_run_in_test_env

        '''
        example uid is a variable in the function
        response = make_app_run_in_test_env.get(f'/user/{uid}')
        '''
        response = client.get("/verified_email<token>", follow_redirects=True)
        # user = User.query.filter_by(email=new_user.email).first()
        #token = user.create_token()
>       assert response.status_code == 200
E       assert 404 == 200
E        +  where 404 = <WrapperTestResponse streamed [404 NOT FOUND]>.status_code

app\tests\functional\test_routes.py:61: AssertionError
================================================================================== warnings summary =================================================================================== 
..\..\..\..\anaconda3\lib\site-packages\flask\json\__init__.py:31
  C:\Users\nmyle\anaconda3\lib\site-packages\flask\json\__init__.py:31: DeprecationWarning: Importing 'itsdangerous.json' is deprecated and will be removed in ItsDangerous 2.1. Use Python's 'json' module instead.
    _slash_escape = "\\/" not in _json.dumps("/")

..\..\..\..\anaconda3\lib\site-packages\flask\json\__init__.py:61
  C:\Users\nmyle\anaconda3\lib\site-packages\flask\json\__init__.py:61: DeprecationWarning: Importing 'itsdangerous.json' is deprecated and will be removed in ItsDangerous 2.1. Use Python's 'json' module instead.
    class JSONEncoder(_json.JSONEncoder):

..\..\..\..\anaconda3\lib\site-packages\flask\json\__init__.py:103
  C:\Users\nmyle\anaconda3\lib\site-packages\flask\json\__init__.py:103: DeprecationWarning: Importing 'itsdangerous.json' is deprecated and will be removed in ItsDangerous 2.1. Use Python's 'json' module instead.
    class JSONDecoder(_json.JSONDecoder):

app/tests/functional/test_routes.py::test_register_page_get
app/tests/functional/test_routes.py::test_register_page_post
app/tests/functional/test_routes.py::test_verified_email
  C:\Users\nmyle\anaconda3\lib\site-packages\flask\app.py:2113: DeprecationWarning: 'BaseResponse' is deprecated and will be removed in Werkzeug 2.1. Use 'isinstance(obj, Response)' instead.
    elif isinstance(rv, BaseResponse) or callable(rv):

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=============================================================================== short test summary info =============================================================================== 
FAILED app/tests/functional/test_routes.py::test_register_page_get - assert 404 == 200
FAILED app/tests/functional/test_routes.py::test_register_page_post - assert 404 == 200
FAILED app/tests/functional/test_routes.py::test_verified_email - assert 404 == 200
ERROR app/tests/functional/test_routes.py::test_valid_login - sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: user