3535 }
3636 ]
3737}
38+ TEST_MATTER_RESPONSE = {
39+ "legalHolds" : [
40+ {"legalHoldUid" : "123456789" , "name" : "Legal Hold #1" , "active" : True },
41+ {"legalHoldUid" : "987654321" , "name" : "Legal Hold #2" , "active" : True },
42+ ]
43+ }
44+ TEST_CUSTODIANS_RESPONSE = {
45+ "legalHoldMemberships" : [
46+ {
47+ "legalHoldMembershipUid" : "99999" ,
48+ "active" : True ,
49+ "creationDate" : "2020-07-16T08:50:23.405Z" ,
50+ "legalHold" : {"legalHoldUid" : "123456789" , "name" : "Legal Hold #1" },
51+ "user" : {
52+ "userUid" : "911162111513111325" ,
53+ 54+ 55+ "userExtRef" : None ,
56+ },
57+ },
58+ {
59+ "legalHoldMembershipUid" : "11111" ,
60+ "active" : True ,
61+ "creationDate" : "2020-07-16T08:50:23.405Z" ,
62+ "legalHold" : {"legalHoldUid" : "987654321" , "name" : "Legal Hold #2" },
63+ "user" : {
64+ "userUid" : "911162111513111325" ,
65+ 66+ 67+ "userExtRef" : None ,
68+ },
69+ },
70+ ]
71+ }
72+ TEST_EMPTY_CUSTODIANS_RESPONSE = {"legalHoldMemberships" : []}
73+ TEST_EMPTY_MATTERS_RESPONSE = {"legalHolds" : []}
3874TEST_EMPTY_USERS_RESPONSE = {"users" : []}
3975TEST_USERNAME = TEST_USERS_RESPONSE ["users" ][0 ]["username" ]
4076TEST_USER_ID = TEST_USERS_RESPONSE ["users" ][0 ]["userId" ]
69105}
70106
71107
72- def get_all_users_generator ():
73- yield TEST_USERS_RESPONSE
74-
75-
76108@pytest .fixture
77109def update_user_response (mocker ):
78110 return create_mock_response (mocker )
@@ -104,7 +136,10 @@ def get_org_success(cli_state, get_org_response):
104136
105137
106138@pytest .fixture
107- def get_all_users_success (cli_state ):
139+ def get_all_users_success (mocker , cli_state ):
140+ def get_all_users_generator ():
141+ yield create_mock_response (mocker , data = TEST_USERS_RESPONSE )
142+
108143 cli_state .sdk .users .get_all .return_value = get_all_users_generator ()
109144
110145
@@ -121,6 +156,42 @@ def get_user_id_failure(mocker, cli_state):
121156 )
122157
123158
159+ @pytest .fixture
160+ def get_custodian_failure (mocker , cli_state ):
161+ def empty_custodian_list_generator ():
162+ yield create_mock_response (mocker , data = TEST_EMPTY_CUSTODIANS_RESPONSE )
163+
164+ cli_state .sdk .legalhold .get_all_matter_custodians .return_value = (
165+ empty_custodian_list_generator ()
166+ )
167+
168+
169+ @pytest .fixture
170+ def get_matter_failure (mocker , cli_state ):
171+ def empty_matter_list_generator ():
172+ yield create_mock_response (mocker , data = TEST_EMPTY_MATTERS_RESPONSE )
173+
174+ cli_state .sdk .legalhold .get_all_matters .return_value = empty_matter_list_generator ()
175+
176+
177+ @pytest .fixture
178+ def get_all_matter_success (mocker , cli_state ):
179+ def matter_list_generator ():
180+ yield create_mock_response (mocker , data = TEST_MATTER_RESPONSE )
181+
182+ cli_state .sdk .legalhold .get_all_matters .return_value = matter_list_generator ()
183+
184+
185+ @pytest .fixture
186+ def get_all_custodian_success (mocker , cli_state ):
187+ def custodian_list_generator ():
188+ yield create_mock_response (mocker , data = TEST_CUSTODIANS_RESPONSE )
189+
190+ cli_state .sdk .legalhold .get_all_matter_custodians .return_value = (
191+ custodian_list_generator ()
192+ )
193+
194+
124195@pytest .fixture
125196def get_available_roles_success (cli_state , get_available_roles_response ):
126197 cli_state .sdk .users .get_available_roles .return_value = get_available_roles_response
@@ -259,6 +330,66 @@ def test_list_users_when_given_excluding_active_and_inactive_uses_active_equals_
259330 )
260331
261332
333+ def test_list_legal_hold_flag_reports_none_for_users_not_on_legal_hold (
334+ runner ,
335+ cli_state ,
336+ get_all_users_success ,
337+ get_custodian_failure ,
338+ get_all_matter_success ,
339+ ):
340+ result = runner .invoke (
341+ cli ,
342+ ["users" , "list" , "--include-legal-hold-membership" , "-f" , "CSV" ],
343+ obj = cli_state ,
344+ )
345+
346+ assert "Legal Hold #1,Legal Hold #2" not in result .output
347+ assert "123456789,987654321" not in result .output
348+ assert "legalHoldUid" not in result .output
349+ assert "[email protected] " in result .
output 350+
351+
352+ def test_list_legal_hold_flag_reports_none_if_no_matters_exist (
353+ runner , cli_state , get_all_users_success , get_custodian_failure , get_matter_failure
354+ ):
355+ result = runner .invoke (
356+ cli , ["users" , "list" , "--include-legal-hold-membership" ], obj = cli_state
357+ )
358+
359+ assert "Legal Hold #1,Legal Hold #2" not in result .output
360+ assert "123456789,987654321" not in result .output
361+ assert "legalHoldUid" not in result .output
362+ assert "[email protected] " in result .
output 363+
364+
365+ def test_list_legal_hold_values_not_included_for_legal_hold_user_if_legal_hold_flag_not_passed (
366+ runner ,
367+ cli_state ,
368+ get_all_users_success ,
369+ get_all_custodian_success ,
370+ get_all_matter_success ,
371+ ):
372+ result = runner .invoke (cli , ["users" , "list" ], obj = cli_state )
373+ assert "Legal Hold #1,Legal Hold #2" not in result .output
374+ assert "123456789,987654321" not in result .output
375+ assert "[email protected] " in result .
output 376+
377+
378+ def test_list_include_legal_hold_membership_merges_in_and_concats_legal_hold_info (
379+ runner ,
380+ cli_state ,
381+ get_all_users_success ,
382+ get_all_custodian_success ,
383+ get_all_matter_success ,
384+ ):
385+ result = runner .invoke (
386+ cli , ["users" , "list" , "--include-legal-hold-membership" ], obj = cli_state
387+ )
388+
389+ assert "Legal Hold #1,Legal Hold #2" in result .output
390+ assert "123456789,987654321" in result .output
391+
392+
262393def test_add_user_role_adds (
263394 runner , cli_state , get_user_id_success , get_available_roles_success
264395):
0 commit comments