#!/usr/bin/env python

from unittest import TestCase

from dungeonsheets import features
from dungeonsheets.features import create_feature, Feature, all_features


class TestFeatures(TestCase):
    """Tests for features and feature-related activities."""

    def test_all_features(self):
        # Make sure only features are returned
        for ThisFeature in all_features():
            self.assertTrue(
                isinstance(ThisFeature, type),
                f"``all_features`` returned {ThisFeature} (not a class)",
            )
            self.assertTrue(
                issubclass(ThisFeature, Feature),
                f"``all_features`` returned {ThisFeature} (not a feature)",
            )
        # Pick a couple of known features to spot-check for
        all_the_features = list(all_features())
        self.assertIn(features.FalseIdentity, all_the_features)
        self.assertIn(features.DivineSmite, all_the_features)

    def test_create_feature(self):
        NewFeature = create_feature(name="Hello world")
        self.assertTrue(issubclass(NewFeature, Feature))
        self.assertEqual(NewFeature.name, "Hello world")
        feature = NewFeature()
        print(feature, feature.__class__, type(feature))
