[docs]
class ConfigurationCollectionTestBase(Generic[_ConfigurationKeyT, _ConfigurationT]):
"""
A base class for testing :py:class:`betty.config.collections.ConfigurationCollection` implementations.
"""
[docs]
async def get_sut(
self, configurations: Iterable[_ConfigurationT] | None = None
) -> ConfigurationCollection[_ConfigurationKeyT, _ConfigurationT]:
"""
Produce the collection under test.
"""
raise NotImplementedError
[docs]
def get_configuration_keys(
self,
) -> tuple[
_ConfigurationKeyT, _ConfigurationKeyT, _ConfigurationKeyT, _ConfigurationKeyT
]:
"""
Produce four configuration keys to test the collection with.
"""
raise NotImplementedError
[docs]
async def get_configurations(
self,
) -> tuple[_ConfigurationT, _ConfigurationT, _ConfigurationT, _ConfigurationT]:
"""
Produce four configuration items to test the collection with.
"""
raise NotImplementedError
[docs]
async def test_replace_without_items(self) -> None:
"""
Tests :py:meth:`betty.config.collections.ConfigurationCollection.replace` implementations.
"""
sut = await self.get_sut()
sut.clear()
assert len(sut) == 0
await self.get_configurations()
sut.replace()
assert len(sut) == 0
[docs]
async def test_replace_with_items(self) -> None:
"""
Tests :py:meth:`betty.config.collections.ConfigurationCollection.replace` implementations.
"""
sut = await self.get_sut()
sut.clear()
assert len(sut) == 0
configurations = await self.get_configurations()
sut.replace(*configurations)
assert len(sut) == len(configurations)
[docs]
async def test___getitem__(self) -> None:
"""
Tests :py:meth:`betty.config.collections.ConfigurationCollection.__getitem__` implementations.
"""
configuration = (await self.get_configurations())[0]
sut = await self.get_sut([configuration])
assert list(sut.values()) == [configuration]
[docs]
async def test_keys(self) -> None:
"""
Tests :py:meth:`betty.config.collections.ConfigurationCollection.keys` implementations.
"""
configurations = await self.get_configurations()
sut = await self.get_sut(configurations)
assert list(sut.keys()) == [*self.get_configuration_keys()]
[docs]
async def test_values(self) -> None:
"""
Tests :py:meth:`betty.config.collections.ConfigurationCollection.values` implementations.
"""
configurations = await self.get_configurations()
sut = await self.get_sut(configurations)
assert list(sut.values()) == [*configurations]
[docs]
async def test___delitem__(self) -> None:
"""
Tests :py:meth:`betty.config.collections.ConfigurationCollection.__delitem__` implementations.
"""
configuration = (await self.get_configurations())[0]
sut = await self.get_sut([configuration])
del sut[self.get_configuration_keys()[0]]
assert list(sut.values()) == []
[docs]
async def test___iter__(self) -> None:
"""
Tests :py:meth:`betty.config.collections.ConfigurationCollection.__iter__` implementations.
"""
raise NotImplementedError
[docs]
async def test___len__(self) -> None:
"""
Tests :py:meth:`betty.config.collections.ConfigurationCollection.__len__` implementations.
"""
configurations = await self.get_configurations()
sut = await self.get_sut(
[
configurations[0],
configurations[1],
]
)
assert len(sut) == 2
[docs]
async def test_prepend(self) -> None:
"""
Tests :py:meth:`betty.config.collections.ConfigurationCollection.prepend` implementations.
"""
configurations = await self.get_configurations()
sut = await self.get_sut(
[
configurations[1],
]
)
sut.prepend(configurations[0])
assert list(sut.values()) == [configurations[0], configurations[1]]
[docs]
async def test_append(self) -> None:
"""
Tests :py:meth:`betty.config.collections.ConfigurationCollection.append` implementations.
"""
configurations = await self.get_configurations()
sut = await self.get_sut(
[
configurations[0],
]
)
sut.append(configurations[1], configurations[2])
assert [configurations[0], configurations[1], configurations[2]] == list(
sut.values()
)
[docs]
async def test_insert(self) -> None:
"""
Tests :py:meth:`betty.config.collections.ConfigurationCollection.insert` implementations.
"""
configurations = await self.get_configurations()
sut = await self.get_sut(
[
configurations[0],
configurations[1],
]
)
sut.insert(1, configurations[2], configurations[3])
assert list(sut.values()) == [
configurations[0],
configurations[2],
configurations[3],
configurations[1],
]