import unittest

from atbash_cipher import (
    decode,
    encode,
)

# Tests adapted from `problem-specifications//canonical-data.json`


class AtbashCipherTest(unittest.TestCase):
    def test_encode_yes(self):
        self.assertEqual(encode("yes"), "bvh")

    def test_encode_no(self):
        self.assertEqual(encode("no"), "ml")

    def test_encode_omg(self):
        self.assertEqual(encode("OMG"), "lnt")

    def test_encode_spaces(self):
        self.assertEqual(encode("O M G"), "lnt")

    def test_encode_mindblowingly(self):
        self.assertEqual(encode("mindblowingly"), "nrmwy oldrm tob")

    def test_encode_numbers(self):
        self.assertEqual(encode("Testing,1 2 3, testing."), "gvhgr mt123 gvhgr mt")

    def test_encode_deep_thought(self):
        self.assertEqual(encode("Truth is fiction."), "gifgs rhurx grlm")

    def test_encode_all_the_letters(self):
        self.assertEqual(
            encode("The quick brown fox jumps over the lazy dog."),
            "gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt",
        )

    def test_decode_exercism(self):
        self.assertEqual(decode("vcvix rhn"), "exercism")

    def test_decode_a_sentence(self):
        self.assertEqual(
            decode("zmlyh gzxov rhlug vmzhg vkkrm thglm v"),
            "anobstacleisoftenasteppingstone",
        )

    def test_decode_numbers(self):
        self.assertEqual(decode("gvhgr mt123 gvhgr mt"), "testing123testing")

    def test_decode_all_the_letters(self):
        self.assertEqual(
            decode("gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt"),
            "thequickbrownfoxjumpsoverthelazydog",
        )

    def test_decode_with_too_many_spaces(self):
        self.assertEqual(decode("vc vix    r hn"), "exercism")

    def test_decode_with_no_spaces(self):
        self.assertEqual(
            decode("zmlyhgzxovrhlugvmzhgvkkrmthglmv"), "anobstacleisoftenasteppingstone"
        )


if __name__ == "__main__":
    unittest.main()
