Skip to content

Commit 4a60406

Browse files
authored
Default profile validation (#24)
* -Add validation logic around default profile. -Add help message for when default is not set (or points to an invalid/missing entry). * use \n instead of empty print() calls. * add tests * update tests to throw NoConfigProfileError()
1 parent 07c846f commit 4a60406

3 files changed

Lines changed: 52 additions & 6 deletions

File tree

src/code42cli/profile.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import code42cli.password as password
22
from code42cli.config import ConfigAccessor, config_accessor, NoConfigProfileError
3-
from code42cli.util import print_error, print_create_profile_help
4-
3+
from code42cli.util import (
4+
print_error,
5+
print_create_profile_help,
6+
print_set_default_profile_help,
7+
print_no_existing_profile_message,
8+
)
59

610
class Code42Profile(object):
711
def __init__(self, profile):
@@ -47,6 +51,8 @@ def _get_profile(profile_name=None):
4751

4852

4953
def get_profile(profile_name=None):
54+
if profile_name is None:
55+
validate_default_profile()
5056
try:
5157
return _get_profile(profile_name)
5258
except NoConfigProfileError as ex:
@@ -63,6 +69,16 @@ def default_profile_exists():
6369
return False
6470

6571

72+
def validate_default_profile():
73+
if not default_profile_exists():
74+
existing_profiles = get_all_profiles()
75+
if not existing_profiles:
76+
print_no_existing_profile_message()
77+
else:
78+
print_set_default_profile_help(existing_profiles)
79+
exit(1)
80+
81+
6682
def profile_exists(profile_name=None):
6783
try:
6884
_get_profile(profile_name)

src/code42cli/util.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,20 @@ def print_no_existing_profile_message():
5959

6060

6161
def print_create_profile_help():
62-
print(u"")
63-
print(u"To add a profile, use: ")
64-
print_bold(u"\tcode42 profile create <profile-name> <authority-URL> <username>")
62+
print(u"\nTo add a profile, use: ")
63+
print_bold(u"\tcode42 profile create <profile-name> <authority-URL> <username>\n")
64+
65+
66+
def print_set_default_profile_help(existing_profiles):
67+
print(
68+
u"\nNo default profile set.\n",
69+
u"\nUse the --profile flag to specify which profile to use.\n",
70+
u"\nTo set the default profile (used whenever --profile argument is not provided), use:"
71+
)
72+
print_bold(u"\tcode42 profile use <profile-name>")
73+
print(u"\nExisting profiles:")
74+
for profile in existing_profiles:
75+
print("\t{}".format(profile))
6576
print(u"")
6677

6778

tests/test_profile.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ def test_get_profile_returns_expected_profile(config_accessor):
5858
profile = cliprofile.get_profile("testprofilename")
5959
assert profile.name == "testprofilename"
6060

61-
6261
def test_get_profile_when_config_accessor_throws_exits(config_accessor):
6362
config_accessor.get_profile.side_effect = NoConfigProfileError()
6463
with pytest.raises(SystemExit):
@@ -77,6 +76,26 @@ def test_default_profile_exists_when_not_exists_returns_false(config_accessor):
7776
assert not cliprofile.default_profile_exists()
7877

7978

79+
def test_validate_default_profile_prints_set_default_help_when_no_valid_default_but_another_profile_exists(capsys, config_accessor):
80+
config_accessor.get_profile.side_effect = NoConfigProfileError()
81+
config_accessor.get_all_profiles.return_value = [
82+
MockSection("thisprofilexists")
83+
]
84+
with pytest.raises(SystemExit):
85+
cliprofile.validate_default_profile()
86+
capture = capsys.readouterr()
87+
assert "No default profile set." in capture.out
88+
89+
90+
def test_validate_default_profile_prints_create_profile_help_when_no_valid_default_and_no_other_profiles_exists(capsys, config_accessor):
91+
config_accessor.get_profile.side_effect = NoConfigProfileError()
92+
config_accessor.get_all_profiles.return_value = []
93+
with pytest.raises(SystemExit):
94+
cliprofile.validate_default_profile()
95+
capture = capsys.readouterr()
96+
assert "No existing profile." in capture.out
97+
98+
8099
def test_profile_exists_when_exists_returns_true(config_accessor):
81100
mock_section = MockSection("testprofilename")
82101
config_accessor.get_profile.return_value = mock_section

0 commit comments

Comments
 (0)