"""Test for dynamic models.""" from collections import namedtuple from unittest.mock import MagicMock from pynamodb.attributes import UnicodeAttribute from sosmodels.active_tables import DynamicModel from sosmodels.active_tables import get_incremented_connection from sosmodels.active_tables import get_noncached_connection class TestModel(DynamicModel): """Test model.""" class Meta: """Meta class for test model.""" table_name = 'test_table' some_key = UnicodeAttribute(hash_key=True) def test_get_table_name(monkeypatch): """Test get table name.""" table_name = 'test_table_2' active_table = namedtuple('Table', 'table_name')(table_name) mock = MagicMock(return_value=active_table) monkeypatch.setattr( 'sosmodels.active_tables.ActiveTables.get', mock) model = TestModel() assert model._get_connection().table_name == table_name assert mock.called def test_get_noncached_connection(monkeypatch): """Test get_noncached_connection method.""" mock = MagicMock() monkeypatch.setattr('sosmodels.active_tables.ActiveTables.get', mock) model = TestModel() model._get_connection = get_noncached_connection assert getattr( model._get_connection, '__func__')(model).table_name == 'test_table' model.Meta.table_name = 'test_table_2' assert getattr( model._get_connection, '__func__')(model).table_name == 'test_table_2' assert mock.call_count == 0 def test_get_incremented_connection(monkeypatch): """Test get_incremented_connection method.""" return_value = MagicMock() return_value.table_name = 'test_table_2' get_mock = MagicMock(return_value=return_value) get_mock.table_name = 'test_table_2' monkeypatch.setattr('sosmodels.active_tables.ActiveTables.get', get_mock) model = TestModel() model._get_connection = get_incremented_connection assert getattr( model._get_connection, '__func__')(model).table_name == 'test_table_3'