1"""Tests for the cli module""" 2 3import unittest 4from unittest import mock 5 6from khard import cli 7from khard import query 8 9from .helpers import mock_stream 10 11 12@mock.patch.dict('os.environ', KHARD_CONFIG='test/fixture/minimal.conf') 13class TestParseArgs(unittest.TestCase): 14 15 foo = query.TermQuery("foo") 16 bar = query.TermQuery("bar") 17 baz = query.TermQuery("baz") 18 uid = query.FieldQuery("uid", "foo") 19 20 def test_normal_search_terms_create_term_queries(self): 21 expected = self.foo 22 args, _config = cli.parse_args(['list', 'foo']) 23 actual = args.search_terms 24 self.assertEqual(expected, actual) 25 26 def test_uid_options_create_uid_queries(self): 27 expected = self.uid 28 args, _config = cli.parse_args(['list', '--uid=foo']) 29 actual = args.search_terms 30 self.assertEqual(expected, actual) 31 32 def test_multible_search_terms_generate_and_queries(self): 33 expected = query.AndQuery(self.foo, self.bar) 34 args, _config = cli.parse_args(['list', 'foo', 'bar']) 35 actual = args.search_terms 36 self.assertEqual(expected, actual) 37 38 def test_no_search_terms_create_an_any_query(self): 39 expected = query.AnyQuery() 40 args, _config = cli.parse_args(['list']) 41 actual = args.search_terms 42 self.assertEqual(expected, actual) 43 44 def test_target_search_terms_are_typed(self): 45 args, _config = cli.parse_args(['merge', '--target=foo', 'bar']) 46 self.assertEqual(self.foo, args.target_contact) 47 self.assertEqual(self.bar, args.source_search_terms) 48 49 def test_second_target_search_term_overrides_first(self): 50 args, _config = cli.parse_args(['merge', '--target=foo', 51 '--target=bar', 'baz']) 52 self.assertEqual(self.bar, args.target_contact) 53 self.assertEqual(self.baz, args.source_search_terms) 54 55 def test_target_uid_option_creates_uid_queries(self): 56 args, _config = cli.parse_args(['merge', '--target-uid=foo', 'bar']) 57 self.assertEqual(self.uid, args.target_contact) 58 self.assertEqual(self.bar, args.source_search_terms) 59 60 def test_uid_option_is_combined_with_search_terms_for_merge_command(self): 61 args, _config = cli.parse_args(['merge', '--uid=foo', '--target=bar']) 62 self.assertEqual(self.uid, args.source_search_terms) 63 self.assertEqual(self.bar, args.target_contact) 64 65 def test_uid_and_free_search_terms_produce_a_conflict(self): 66 with self.assertRaises(SystemExit): 67 with mock_stream("stderr"): # just silence stderr 68 cli.parse_args(['list', '--uid=foo', 'bar']) 69 70 def test_target_uid_and_free_target_search_terms_produce_a_conflict(self): 71 with self.assertRaises(SystemExit): 72 with mock_stream("stderr"): # just silence stderr 73 cli.parse_args(['merge', '--target-uid=foo', '--target=bar']) 74 75 def test_no_target_specification_results_in_an_any_query(self): 76 expected = query.AnyQuery() 77 args, _config = cli.parse_args(['merge']) 78 actual = args.target_contact 79 self.assertEqual(expected, actual) 80 81 def test_add_email_defaults_to_from_lowercase(self): 82 args, _config = cli.parse_args(["add-email"]) 83 actual = args.fields 84 self.assertEqual(["from"], actual) 85 86 def test_add_email_from_field(self): 87 args, _config = cli.parse_args(["add-email", "-H", "from"]) 88 actual = args.fields 89 self.assertEqual(["from"], actual) 90 91 def test_add_email_another_field(self): 92 args, _config = cli.parse_args(["add-email", "-H", "OtHer"]) 93 actual = args.fields 94 self.assertEqual(["other"], actual) 95 96 def test_add_email_multiple_headers_separate_args_takes_last(self): 97 args, _config = cli.parse_args( 98 ["add-email", "-H", "OtHer", "-H", "myfield"]) 99 actual = args.fields 100 self.assertEqual(["myfield"], actual) 101 102 def test_add_email_multiple_headers_comma_separated(self): 103 args, _config = cli.parse_args( 104 ["add-email", "-H", "OtHer,myfield,from"]) 105 actual = args.fields 106 self.assertEqual(["other", "myfield", "from"], actual) 107