Pour tout problème contactez-nous par mail : support@froggit.fr | La FAQ :grey_question: | Rejoignez-nous sur le Chat :speech_balloon:

Skip to content
Snippets Groups Projects
README.md 3.53 KiB
Newer Older
  • Learn to ignore specific revisions
  • Dorian Turba's avatar
    Dorian Turba committed
    # fake_session_maker
    
    
    Dorian Turba's avatar
    Dorian Turba committed
    [![Latest Release](https://lab.frogg.it/dorianturba/fake_session_maker/-/badges/release.svg?order_by=release_at)](https://lab.frogg.it/dorianturba/fake_session_maker/-/releases)
    [![Pipeline](https://lab.frogg.it/dorianturba/fake_session_maker/badges/main/pipeline.svg)](https://lab.frogg.it/dorianturba/fake_session_maker/-/pipelines)
    [![Supported Python versions](https://img.shields.io/pypi/pyversions/fake_session_maker.svg)](https://pypi.org/project/fake_session_maker)
    [![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/)
    [![PyPI - Downloads](https://img.shields.io/pypi/dm/fake_session_maker)](https://pypi.org/project/fake_session_maker)
    [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://lab.frogg.it/dorianturba/fake_session_maker/-/blob/main/LICENSE)
    [![Black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
    [![Markdown: pymarkdown](https://img.shields.io/badge/%20markdown-pymarkdown-%231674b1?style=flat&labelColor=ef8336)](https://github.com/jackdewinter/pymarkdown)
    
    
    Dorian Turba's avatar
    Dorian Turba committed
    The `fake_session_maker` is a SQLAlchemy and Pytest-based package designed to facilitate
    database testing by replacing a classic SQLAlchemy `SessionMaker` context manager.
    
    Dorian Turba's avatar
    Dorian Turba committed
    
    ## Features
    
    
    Dorian Turba's avatar
    Dorian Turba committed
    - Replaces the SQLAlchemy `SessionMaker` context manager with a "read-only" session
      during tests.
    
    Dorian Turba's avatar
    Dorian Turba committed
    - Rollbacks database state at the end of each test, ensuring isolation between tests.
    - Simple fixture-based usage integrates smoothly with your Pytest suite.
    
    
    ## Drawbacks
    
    Code that plan to be tested using `fake_session_maker` have the following limitations:
    
    
    Dorian Turba's avatar
    Dorian Turba committed
    - Prevent the use of factory_boy automated build and bulk. Each object needs to be
      created and added to the session manually.
    
    Dorian Turba's avatar
    Dorian Turba committed
    ## Installation
    
    Dorian Turba's avatar
    Dorian Turba committed
    
    
    Dorian Turba's avatar
    Dorian Turba committed
    ```bash
    pip install fake_session_maker
    ```
    
    Dorian Turba's avatar
    Dorian Turba committed
    
    ## Usage
    
    
    Dorian Turba's avatar
    Dorian Turba committed
    ### Define the fixture
    
    Below is an example of how to use fake_session_maker in a pytest fixture:
    
    
    Dorian Turba's avatar
    Dorian Turba committed
    ```python
    import pytest
    
    from fake_session_maker import fsm
    
    Dorian Turba's avatar
    Dorian Turba committed
    
    
    Dorian Turba's avatar
    Dorian Turba committed
    # Assuming Namespace is where the session_maker is defined
    
    Dorian Turba's avatar
    Dorian Turba committed
    
    @pytest.fixture
    def fake_session_maker():
    
                db_url="sqlite:///tests/test.sqlite",
                namespace=Namespace,
                symbol_name="session_maker",
    
    Dorian Turba's avatar
    Dorian Turba committed
        ) as fake_session_maker_:
            yield fake_session_maker_
    
    # Now, you can use fake_session_maker in your tests
    ```
    
    ### Use the fixture
    
    Below is an example of how to use fake_session_maker fixture in a test:
    
    ```python
    # Each test will have a fresh database, empty of any data
    @pytest.mark.parametrize("name", ["jane", "joe"])
    def test_create_example(fake_session_maker, name):
        result = create_example('test')
    
    Dorian Turba's avatar
    Dorian Turba committed
        assert result == 'success'
        with fake_session_maker() as session:
    
    Dorian Turba's avatar
    Dorian Turba committed
            # Each time we check, only the data created in this test will be present
            assert session.query(models.User).count() == 1
    ```
    
    Dorian Turba's avatar
    Dorian Turba committed
    
    
    Dorian Turba's avatar
    Dorian Turba committed
    See
    the [tests.test_fsm.py](https://lab.frogg.it/dorianturba/fake_session_maker/-/blob/main/tests/test_fsm.py)
    directory for a full example.
    
    Dorian Turba's avatar
    Dorian Turba committed
    
    ## Contributing
    
    
    Dorian Turba's avatar
    Dorian Turba committed
    Contributions are welcome! Please
    see [CONTRIBUTING.md](https://lab.frogg.it/dorianturba/fake_session_maker/-/blob/main/CONTRIBUTING.md)
    for more details.
    
    Dorian Turba's avatar
    Dorian Turba committed
    
    ## Testing
    
    
    If you want to run the tests locally, you can follow instructions here:
    
    Dorian Turba's avatar
    Dorian Turba committed
    [CONTRIBUTING.md #testing](https://lab.frogg.it/dorianturba/fake_session_maker/-/blob/main/CONTRIBUTING.md#testing).
    
    Dorian Turba's avatar
    Dorian Turba committed
    
    ## License
    
    
    Dorian Turba's avatar
    Dorian Turba committed
    Distributed under the MIT License.
    See [LICENSE](Lhttps://lab.frogg.it/dorianturba/fake_session_maker/-/blob/main/LICENSE)
    
    Dorian Turba's avatar
    Dorian Turba committed
    for more information.