import { describe, expect, it, xdescribe } from '@jest/globals'
import { decode, encode } from './atbash-cipher.ts'

describe('AtbashCipher', () => {
  describe('encoding', () => {
    it('encode yes', () => {
      const cipherText = encode('yes')
      expect(cipherText).toEqual('bvh')
    })

    it('encode no', () => {
      const cipherText = encode('no')
      expect(cipherText).toEqual('ml')
    })

    it('encode OMG', () => {
      const cipherText = encode('OMG')
      expect(cipherText).toEqual('lnt')
    })

    it('encode spaces', () => {
      const cipherText = encode('O M G')
      expect(cipherText).toEqual('lnt')
    })

    it('encode mindblowingly', () => {
      const cipherText = encode('mindblowingly')
      expect(cipherText).toEqual('nrmwy oldrm tob')
    })

    it('encode numbers', () => {
      const cipherText = encode('Testing,1 2 3, testing.')
      expect(cipherText).toEqual('gvhgr mt123 gvhgr mt')
    })

    it('encode deep thought', () => {
      const cipherText = encode('Truth is fiction.')
      expect(cipherText).toEqual('gifgs rhurx grlm')
    })

    it('encode all the letters', () => {
      const cipherText = encode('thequickbrownfoxjumpsoverthelazydog')
      expect(cipherText).toEqual('gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt')
    })
  })

  describe('decode', () => {
    it('decode exercism', () => {
      const plainText = decode('vcvix rhn')
      expect(plainText).toEqual('exercism')
    })

    it('decode a sentence', () => {
      const cipherText = decode('zmlyh gzxov rhlug vmzhg vkkrm thglm v')
      expect(cipherText).toEqual('anobstacleisoftenasteppingstone')
    })

    it('decode numbers', () => {
      const plainText = decode('gvhgr mt123 gvhgr mt')
      expect(plainText).toEqual('testing123testing')
    })

    it('decode all the letters', () => {
      const cipherText = decode('gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt')
      expect(cipherText).toEqual('thequickbrownfoxjumpsoverthelazydog')
    })
  })
})
