|
32 | 32 | - tests.captured() Context manager to capture stdout. |
33 | 33 | - tests.mocked() Mock cloud password managers API response. |
34 | 34 | - tests.skipIfNo() Skip a password manager test if it is disabled. |
| 35 | + - tests.skipIfNoInstalled() Skip a test if a program is not installed. |
| 36 | + - tests.skipIfNoModule() Skip a test if an optional module is not installed. |
35 | 37 | - tests.mock_hibp() Mock HIBP API response. |
36 | 38 | """ |
37 | 39 |
|
@@ -61,20 +63,32 @@ def _id(obj): |
61 | 63 | return obj |
62 | 64 |
|
63 | 65 |
|
64 | | -def skipIfNo(name, imported=True): |
| 66 | +def skipIfNo(name: str): |
65 | 67 | """Skip a password manager test if it is disabled.""" |
66 | | - if imported: |
67 | | - if name not in {'bitwarden', 'lastpass', 'onepassword'}: |
68 | | - return _id |
69 | | - manager = name.upper() |
70 | | - enabled = 'T_%s' % manager |
71 | | - password = 'TESTS_%s_PASS' % manager |
72 | | - if not (enabled in os.environ and password in os.environ): |
73 | | - return unittest.skip(f"Skipping: {name} tests disabled.") |
| 68 | + if name not in {'bitwarden', 'lastpass', 'onepassword'}: |
74 | 69 | return _id |
75 | | - else: |
76 | | - return unittest.skip( |
77 | | - f"Skipping: {name} tests disabled. No dependencies") |
| 70 | + manager = name.upper() |
| 71 | + enabled = 'T_%s' % manager |
| 72 | + password = 'TESTS_%s_PASS' % manager |
| 73 | + if not (enabled in os.environ and password in os.environ): |
| 74 | + return unittest.skip(f"Skipping: {name} tests disabled.") |
| 75 | + return _id |
| 76 | + |
| 77 | + |
| 78 | +def skipIfNoInstalled(name: str): |
| 79 | + """Skip a test if a program is not installed.""" |
| 80 | + if shutil.which(name) is None: |
| 81 | + return unittest.skip(f"Skipping: {name} not installed disabled.") |
| 82 | + return _id |
| 83 | + |
| 84 | + |
| 85 | +def skipIfNoModule(name: str): |
| 86 | + """Skip a test if an optional module is not installed.""" |
| 87 | + try: |
| 88 | + __import__(name) |
| 89 | + except ImportError: |
| 90 | + return unittest.skip(f"Skipping: module {name} not installed.") |
| 91 | + return _id |
78 | 92 |
|
79 | 93 |
|
80 | 94 | def mocked(manager, cmd): |
|
0 commit comments