class TestEnigma(TestCase): def setUp(self): self.key = 'secret_key' self.enigma = Enigma(self.key) self.mock_rotor = [ ('a', 'b'), ('b', 'a'), ] def test__get_initial_step_returns_an_int(self): returned_val = self.enigma._get_initial_step(self.key) assert type(returned_val) is int def test__get_initial_step_returns_encoded_int_value_of_key(self): expected_val = int(self.key.encode().hex(), 16) returned_val = self.enigma._get_initial_step(self.key) assert returned_val == expected_val def test__convert_char_returns_a_string(self): returned_val = self.enigma._convert_char(char='a', rotor=self.mock_rotor, rotor_num=0, reverse=False) assert type(returned_val) is str def test__process_char_returns_a_string(self): returned_val = self.enigma._process_char('a') assert type(returned_val) is str def test__decrypt_char_returns_a_string(self): returned_val = self.enigma._decrypt_char('a') assert type(returned_val) is str @mock.patch.object(Enigma, '_process_char') def test__decrypt_char_calls_process_char_with_reflected_true( self, mock_process_char): self.enigma._decrypt_char('a') mock_process_char.assert_called_with('a', reflected=True) def test__encrypt_char_returns_a_string(self): returned_val = self.enigma._encrypt_char('a') assert type(returned_val) is str @mock.patch.object(Enigma, '_process_char') def test__encrypt_char_calls_process_char_with_reflected_true( self, mock_process_char): self.enigma._encrypt_char('a') mock_process_char.assert_called_with('a') def test__reset_curr_step_sets_curr_step_to_inital_step(self): assert self.enigma.curr_step == self.enigma.initial_step self.enigma.curr_step += 33 assert self.enigma.curr_step != self.enigma.initial_step self.enigma._reset_curr_step() assert self.enigma.curr_step == self.enigma.initial_step def test_encrypt_text_returns_a_string(self): return_val = self.enigma.encrypt_text('secret message') assert type(return_val) is str @mock.patch.object(Enigma, '_reset_curr_step') def test_encrypt_text_calls_reset_curr_step(self, mock_reset_curr_step): self.enigma.encrypt_text('secret message') mock_reset_curr_step.assert_called_once() def test_encrypt_text_encrypts_consistently(self): msg_to_encrypt = 'secret message' first_encrypted_msg = self.enigma.encrypt_text(msg_to_encrypt) second_encrypted_msg = self.enigma.encrypt_text(msg_to_encrypt) assert first_encrypted_msg == second_encrypted_msg def test_encrypt_text_does_not_return_original_text(self): msg_to_encrypt = 'secret message' encrypted_msg = self.enigma.encrypt_text(msg_to_encrypt) assert encrypted_msg != msg_to_encrypt def test_decrypt_text_returns_a_string(self): return_val = self.enigma.decrypt_text('jfsd#jd0') assert type(return_val) is str @mock.patch.object(Enigma, '_reset_curr_step') def test_decrypt_text_calls_reset_curr_step(self, mock_reset_curr_step): self.enigma.decrypt_text('jfsd#jd0') mock_reset_curr_step.assert_called_once() def test_decrypt_text_decrypts_consistently(self): msg_to_decrypt = 'jfsd#jd0' first_decrypted_msg = self.enigma.decrypt_text(msg_to_decrypt) second_decrypted_msg = self.enigma.decrypt_text(msg_to_decrypt) assert first_decrypted_msg == second_decrypted_msg def test_decrypt_text_does_not_return_original_text(self): msg_to_decrypt = 'jfsd#jd0' decrypted_msg = self.enigma.decrypt_text(msg_to_decrypt) assert decrypted_msg != msg_to_decrypt
encryptor.rotors = Rotors.OddSet elif rotor_who == '2': encryptor.rotors = Rotors.EvenSet else: print("Wrong input, try again.") """ elif op == '2': while True: ask = input("Encrypt or Decrypt? (e/d)") if ask == 'e': enc = input("Enter a text to be encrypted: ") if not any(char in not_allowed for char in enc): text = encryptor.encrypt_text(enc.lower()) print(f"Encrypted text: {text}") else: print("Wrong plaintext format. Please make sure your plaintext does not contain any numbers or special characters.") break elif ask == 'd': dec = input("Enter a text to be decrypted: ") if any(char.isnumeric() for char in dec.replace(" ", "")): text = encryptor.decrypt_text(dec) print(f"Decrypted text: {text}") print("NOTE: Create a new enigma machine to decrypt.") else: print("Wrong format. Please try again.")