import pytest from components.addstuff.settings import RepositoriesDbManager, RepositoriesSettings, Repository, \ REPOSITORIES_SETTINGS_ENTRY from core.settings_management import SettingsManager, MemoryDbEngine @pytest.fixture def settings_manager(): return SettingsManager(MemoryDbEngine()) @pytest.fixture def db(session, settings_manager): return RepositoriesDbManager(session, settings_manager) def test_add_new_repository(db, settings_manager): """Test adding a new repository with valid data.""" db.add_repository("NewRepo", ["Table1", "Table2"]) settings = settings_manager.get(db.session, REPOSITORIES_SETTINGS_ENTRY) assert len(settings.repositories) == 1 assert settings.repositories[0].name == "NewRepo" assert settings.repositories[0].tables == ["Table1", "Table2"] def test_add_repository_duplicate_name(db, settings_manager): """Test adding a repository with an existing name.""" settings = RepositoriesSettings() settings.repositories.append(Repository(name="ExistingRepo", tables=[])) settings_manager.put(db.session, REPOSITORIES_SETTINGS_ENTRY, settings) with pytest.raises(ValueError, match="Repository 'ExistingRepo' already exists."): db.add_repository("ExistingRepo") def test_add_repository_empty_name(db): """Test adding a repository with an empty name.""" with pytest.raises(ValueError, match="Repository name cannot be empty."): db.add_repository("") def test_add_repository_none_name(db): """Test adding a repository with a None name.""" with pytest.raises(ValueError, match="Repository name cannot be empty."): db.add_repository(None) def test_add_repository_no_tables(db, settings_manager): """Test adding a repository without specifying tables.""" db.add_repository("RepoWithoutTables") settings = settings_manager.get(db.session, "Repositories") assert len(settings.repositories) == 1 assert settings.repositories[0].name == "RepoWithoutTables" assert settings.repositories[0].tables == [] def test_get_existing_repository(db, settings_manager): """Test retrieving an existing repository.""" # Pre-populate settings with a repository settings = RepositoriesSettings() repo = Repository(name="ExistingRepo", tables=["Table1"]) settings.repositories.append(repo) settings_manager.put(db.session, "Repositories", settings) # Retrieve the repository retrieved_repo = db.get_repository("ExistingRepo") # Verify the repository is correctly returned assert retrieved_repo.name == "ExistingRepo" assert retrieved_repo.tables == ["Table1"] def test_get_repository_not_found(db): """Test retrieving a repository that does not exist.""" with pytest.raises(ValueError, match="Repository 'NonExistentRepo' does not exists."): db.get_repository("NonExistentRepo") def test_get_repository_empty_name(db): """Test retrieving a repository with an empty name.""" with pytest.raises(ValueError, match="Repository name cannot be empty."): db.get_repository("") def test_get_repository_none_name(db): """Test retrieving a repository with a None name.""" with pytest.raises(ValueError, match="Repository name cannot be empty."): db.get_repository(None)