Skip to content
Snippets Groups Projects
test_blockchains_repo.py 7.01 KiB
import pytest
from duniterpy.documents import BlockUID

from sakia.data.entities import Blockchain, BlockchainParameters
from sakia.data.repositories import BlockchainsRepo


def test_add_get_drop_blockchain(meta_repo):
    blockchains_repo = BlockchainsRepo(meta_repo.conn)
    blockchains_repo.insert(
        Blockchain(
            parameters=BlockchainParameters(
                0.1,
                86400,
                100000,
                10800,
                40,
                2629800,
                31557600,
                1,
                0.9,
                604800,
                5,
                12,
                300,
                25,
                10,
                0.66,
                2,
                10800,
                2629800,
            ),
            current_buid="20-7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67",
            current_members_count=10,
            current_mass=1000000,
            median_time=86400,
            last_members_count=5,
            last_ud=100000,
            last_ud_base=0,
            last_ud_time=86400,
            previous_mass=999999,
            previous_members_count=10,
            previous_ud=6543,
            previous_ud_base=0,
            previous_ud_time=86400,
            currency="testcurrency",
        )
    )
    blockchain = blockchains_repo.get_one(currency="testcurrency")
    assert blockchain.parameters == BlockchainParameters(
        0.1,
        86400,
        100000,
        10800,
        40,
        2629800,
        31557600,
        1,
        0.9,
        604800,
        5,
        12,
        300,
        25,
        10,
        0.66,
        2,
        10800,
        2629800,
    )
    assert blockchain.currency == "testcurrency"
    assert blockchain.current_buid == BlockUID(
        20, "7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67"
    )
    assert blockchain.current_members_count == 10

    blockchains_repo.drop(blockchain)
    blockchain = blockchains_repo.get_one(currency="testcurrency")
    assert blockchain is None


def test_add_get_multiple_blockchain(meta_repo):
    blockchains_repo = BlockchainsRepo(meta_repo.conn)
    blockchains_repo.insert(
        Blockchain(
            parameters=BlockchainParameters(
                0.1,
                86400,
                100000,
                10800,
                40,
                2629800,
                31557600,
                1,
                0.9,
                604800,
                5,
                12,
                300,
                25,
                10,
                0.66,
                2,
                10800,
                2629800,
            ),
            current_buid="20-7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67",
            current_members_count=10,
            current_mass=1000000,
            median_time=86400,
            last_members_count=5,
            last_ud=100000,
            last_ud_base=0,
            last_ud_time=86400,
            previous_mass=999999,
            previous_members_count=10,
            previous_ud=6543,
            previous_ud_base=0,
            previous_ud_time=86400,
            currency="testcurrency",
        )
    )
    blockchains_repo.insert(
        Blockchain(
            BlockchainParameters(
                0.1,
                86400 * 365,
                100000,
                10800,
                40,
                2629800,
                31557600,
                1,
                0.9,
                604800,
                5,
                12,
                300,
                25,
                10,
                0.66,
                2,
                10800,
                2629800,
            ),
            current_buid="20-7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67",
            current_members_count=20,
            current_mass=1000000,
            median_time=86400,
            last_members_count=5,
            last_ud=100000,
            last_ud_base=0,
            last_ud_time=86400,
            previous_mass=999999,
            previous_members_count=10,
            previous_ud=6543,
            previous_ud_base=0,
            previous_ud_time=86400,
            currency="testcurrency2",
        )
    )

    blockchains = blockchains_repo.get_all()
    # result sorted by currency name by default
    assert 86400 == blockchains[0].parameters.dt
    assert "testcurrency" == blockchains[0].currency
    assert 10 == blockchains[0].current_members_count

    assert 86400 * 365 == blockchains[1].parameters.dt
    assert "testcurrency2" == blockchains[1].currency
    assert 20 == blockchains[1].current_members_count


def test_add_update_blockchain(meta_repo):
    blockchains_repo = BlockchainsRepo(meta_repo.conn)
    blockchain = Blockchain(
        BlockchainParameters(
            0.1,
            86400,
            100000,
            10800,
            40,
            2629800,
            31557600,
            1,
            0.9,
            604800,
            5,
            12,
            300,
            25,
            10,
            0.66,
            2,
            10800,
            2629800,
        ),
        current_buid="20-7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67",
        current_members_count=10,
        current_mass=1000000,
        median_time=86400,
        last_members_count=5,
        last_ud=100000,
        last_ud_base=0,
        last_ud_time=86400,
        previous_mass=999999,
        previous_members_count=10,
        previous_ud=6543,
        previous_ud_base=0,
        previous_ud_time=86400,
        currency="testcurrency",
    )
    blockchains_repo.insert(blockchain)
    blockchain.current_members_count = 30
    blockchains_repo.update(blockchain)
    blockchain2 = blockchains_repo.get_one(currency="testcurrency")
    assert 30 == blockchain2.current_members_count


@pytest.mark.parametrize("meta_repo", [0], indirect=True)
def test_update_blockchain_table_to_v2(meta_repo):
    blockchains_repo = BlockchainsRepo(meta_repo.conn)
    blockchain = Blockchain(
        BlockchainParameters(
            0.1,
            86400,
            100000,
            10800,
            40,
            2629800,
            31557600,
            1,
            0.9,
            604800,
            5,
            12,
            300,
            25,
            10,
            0.66,
        ),
        current_buid="20-7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67",
        current_members_count=10,
        current_mass=1000000,
        median_time=86400,
        last_members_count=5,
        last_ud=100000,
        last_ud_base=0,
        last_ud_time=86400,
        previous_mass=999999,
        previous_members_count=10,
        previous_ud=6543,
        previous_ud_base=0,
        previous_ud_time=86400,
        currency="testcurrency",
    )
    blockchains_repo.insert(blockchain)
    meta_repo.upgrade_database()
    blockchain2 = blockchains_repo.get_one(currency="testcurrency")
    assert 0 == blockchain2.parameters.ud_time_0