from typing import Type

import pytest

from auto_archiver.core.metadata import Metadata
from auto_archiver.core.extractor import Extractor


class TestExtractorBase(object):
    extractor_module: str = None
    config: dict = None

    @pytest.fixture(autouse=True)
    def setup_extractor(self, setup_module):
        assert self.extractor_module is not None, "self.extractor_module must be set on the subclass"
        assert self.config is not None, "self.config must be a dict set on the subclass"

        self.extractor: Type[Extractor] = setup_module(self.extractor_module, self.config)

    def assertValidResponseMetadata(self, test_response: Metadata, title: str, timestamp: str, status: str = ""):
        assert test_response is not False

        if not status:
            assert test_response.is_success()
        else:
            assert status == test_response.status

        assert title in test_response.get_title()
        assert timestamp == test_response.get("timestamp")
