27
27
import tests .helper
28
28
29
29
class RulesTest (unittest .TestCase ):
30
-
31
- def test_normal (self ):
30
+
31
+ def test_sync (self ):
32
32
primary_umapi_name = user_sync .rules .PRIMARY_UMAPI_NAME
33
33
secondary_1_umapi_name = "secondary1"
34
- directory_group_1 = 'acrobat1'
35
- directory_group_2 = 'acrobat2'
34
+ directory_group_1 = 'acrobat1'
35
+ directory_group_2 = 'acrobat2'
36
36
primary_group_11 = 'acrobat11'
37
- primary_group_12 = 'acrobat12'
37
+ secondary_group_12 = 'acrobat12'
38
38
primary_group_21 = 'acrobat21'
39
39
directory_groups = {
40
- directory_group_1 : [user_sync .rules .AdobeGroup (primary_group_11 , primary_umapi_name ), user_sync .rules .AdobeGroup ('acrobat12' , secondary_1_umapi_name )],
40
+ directory_group_1 : [user_sync .rules .AdobeGroup (primary_group_11 , primary_umapi_name ),
41
+ user_sync .rules .AdobeGroup (secondary_group_12 , secondary_1_umapi_name )],
41
42
directory_group_2 : [user_sync .rules .AdobeGroup (primary_group_21 , primary_umapi_name )]
42
43
}
43
44
everybody = [tests .helper .create_test_user ([directory_group_1 ]),
44
45
tests .helper .create_test_user ([directory_group_2 ]),
45
46
tests .helper .create_test_user ([])]
46
-
47
+
47
48
for user in everybody :
48
49
user ['username' ] = user ['email' ]
49
50
user ['domain' ] = None
50
-
51
+
51
52
primary_users = []
52
53
primary_user_1 = everybody [1 ].copy ()
53
54
primary_user_1 ['groups' ] = [primary_group_11 ]
54
55
primary_users .append (primary_user_1 )
55
-
56
+
56
57
def mock_load_users_and_groups (groups = None , extended_attributes = None , all_users = True ):
57
58
return list (everybody )
58
59
mock_directory_connector = mock .mock .create_autospec (user_sync .connector .directory .DirectoryConnector )
59
60
mock_directory_connector .load_users_and_groups = mock_load_users_and_groups
60
-
61
+
61
62
primary_commands_list = []
62
63
mock_primary_umapi_connector = self .create_mock_umapi_connector (primary_users , primary_commands_list )
63
64
64
65
secondary_commands_list = []
65
66
mock_secondary_umapi_connector = self .create_mock_umapi_connector ([], secondary_commands_list )
66
-
67
+
67
68
umapi_connectors = user_sync .rules .UmapiConnectors (mock_primary_umapi_connector , {
68
69
secondary_1_umapi_name : mock_secondary_umapi_connector
69
70
})
70
-
71
+
71
72
rule_processor = user_sync .rules .RuleProcessor ({'manage_groups' : True })
72
73
rule_processor .run (directory_groups , mock_directory_connector , umapi_connectors )
73
74
74
75
rule_options = rule_processor .options
75
76
76
77
expected_primary_commands_list = []
77
-
78
+ # when syncing, the existing Adobe user is processsed first
78
79
user = everybody [1 ]
79
80
commands = tests .helper .create_umapi_commands (user )
80
81
commands .add_groups (set ([primary_group_21 ]))
81
82
commands .remove_groups (set ([primary_group_11 ]))
82
83
expected_primary_commands_list .append (commands )
83
-
84
84
user = everybody [0 ]
85
85
commands = tests .helper .create_umapi_commands (user )
86
86
commands .add_user (self .create_user_attributes_for_commands (user , rule_options ['update_user_info' ]))
87
87
commands .add_groups (set ([primary_group_11 ]))
88
88
expected_primary_commands_list .append (commands )
89
-
90
89
user = everybody [2 ]
91
90
commands = tests .helper .create_umapi_commands (user )
92
91
commands .add_user (self .create_user_attributes_for_commands (user , rule_options ['update_user_info' ]))
93
92
expected_primary_commands_list .append (commands )
94
-
93
+
94
+ expected_secondary_commands_list = []
95
+ user = everybody [0 ]
96
+ commands = tests .helper .create_umapi_commands (user )
97
+ commands .add_groups (set ([secondary_group_12 ]))
98
+ expected_secondary_commands_list .append (commands )
99
+
100
+ tests .helper .assert_equal_umapi_commands_list (self , expected_primary_commands_list , primary_commands_list )
101
+ tests .helper .assert_equal_umapi_commands_list (self , expected_secondary_commands_list , secondary_commands_list )
102
+
103
+ def test_push (self ):
104
+ primary_umapi_name = user_sync .rules .PRIMARY_UMAPI_NAME
105
+ secondary_1_umapi_name = "secondary1"
106
+ directory_group_1 = 'acrobat1'
107
+ directory_group_2 = 'acrobat2'
108
+ primary_group_11 = 'acrobat11'
109
+ secondary_group_12 = 'acrobat12'
110
+ primary_group_21 = 'acrobat21'
111
+ directory_groups = {
112
+ directory_group_1 : [user_sync .rules .AdobeGroup (primary_group_11 , primary_umapi_name ),
113
+ user_sync .rules .AdobeGroup (secondary_group_12 , secondary_1_umapi_name )],
114
+ directory_group_2 : [user_sync .rules .AdobeGroup (primary_group_21 , primary_umapi_name )]
115
+ }
116
+ everybody = [tests .helper .create_test_user ([directory_group_1 ]),
117
+ tests .helper .create_test_user ([directory_group_2 ]),
118
+ tests .helper .create_test_user ([])]
119
+
120
+ for user in everybody :
121
+ user ['username' ] = user ['email' ]
122
+ user ['domain' ] = None
123
+
124
+ primary_users = []
125
+ primary_user_1 = everybody [1 ].copy ()
126
+ primary_user_1 ['groups' ] = [primary_group_11 ]
127
+ primary_users .append (primary_user_1 )
128
+
129
+ def mock_load_users_and_groups (groups = None , extended_attributes = None , all_users = True ):
130
+ return list (everybody )
131
+
132
+ mock_directory_connector = mock .mock .create_autospec (user_sync .connector .directory .DirectoryConnector )
133
+ mock_directory_connector .load_users_and_groups = mock_load_users_and_groups
134
+
135
+ primary_commands_list = []
136
+ mock_primary_umapi_connector = self .create_mock_umapi_connector (primary_users , primary_commands_list )
137
+
138
+ secondary_commands_list = []
139
+ mock_secondary_umapi_connector = self .create_mock_umapi_connector ([], secondary_commands_list )
140
+
141
+ umapi_connectors = user_sync .rules .UmapiConnectors (mock_primary_umapi_connector , {
142
+ secondary_1_umapi_name : mock_secondary_umapi_connector
143
+ })
144
+
145
+ rule_processor = user_sync .rules .RuleProcessor ({'manage_groups' : True ,
146
+ 'strategy' : 'push' ,
147
+ 'update_user_info' : True ,
148
+ })
149
+ rule_processor .run (directory_groups , mock_directory_connector , umapi_connectors )
150
+
151
+ rule_options = rule_processor .options
152
+
153
+ expected_primary_commands_list = []
154
+ # when pushing, they are in directory order
155
+ user = everybody [0 ]
156
+ commands = tests .helper .create_umapi_commands (user )
157
+ commands .add_user (self .create_user_attributes_for_commands (user , rule_options ['update_user_info' ]))
158
+ commands .add_groups (set ([primary_group_11 ]))
159
+ commands .remove_groups (set ([primary_group_21 ]))
160
+ expected_primary_commands_list .append (commands )
161
+
162
+ user = everybody [1 ]
163
+ commands = tests .helper .create_umapi_commands (user )
164
+ commands .add_user (self .create_user_attributes_for_commands (user , rule_options ['update_user_info' ]))
165
+ commands .add_groups (set ([primary_group_21 ]))
166
+ commands .remove_groups (set ([primary_group_11 ]))
167
+ expected_primary_commands_list .append (commands )
168
+
169
+ user = everybody [2 ]
170
+ commands = tests .helper .create_umapi_commands (user )
171
+ commands .add_user (self .create_user_attributes_for_commands (user , rule_options ['update_user_info' ]))
172
+ commands .remove_groups (set ([primary_group_11 , primary_group_21 ]))
173
+ expected_primary_commands_list .append (commands )
174
+
95
175
expected_secondary_commands_list = []
96
176
user = everybody [0 ]
97
177
commands = tests .helper .create_umapi_commands (user )
98
- commands .add_groups (set ([primary_group_12 ]))
178
+ commands .add_user (self .create_user_attributes_for_commands (user , False ))
179
+ commands .add_groups (set ([secondary_group_12 ]))
99
180
expected_secondary_commands_list .append (commands )
100
181
101
182
tests .helper .assert_equal_umapi_commands_list (self , expected_primary_commands_list , primary_commands_list )
@@ -105,7 +186,7 @@ def mock_load_users_and_groups(groups=None, extended_attributes=None, all_users=
105
186
@mock .patch ('logging.getLogger' )
106
187
def _do_country_code_test (self , mock_umapi_commands , mock_connectors , identity_type , default_country_code , user_country_code , expected_country_code , mock_logger ):
107
188
user_key = identity_type + ',[email protected] ,'
108
- expected_result = {
'lastname' :
'User1' ,
'email' :
'[email protected] ' ,
'firstname' :
'!Openldap CCE' ,
'option' :
'updateIfAlreadyExists ' }
189
+ expected_result = {
'lastname' :
'User1' ,
'email' :
'[email protected] ' ,
'firstname' :
'!Openldap CCE' ,
'option' :
'ignoreIfAlreadyExists ' }
109
190
if (expected_country_code ):
110
191
expected_result ['country' ] = expected_country_code
111
192
@@ -124,7 +205,7 @@ def _do_country_code_test(self, mock_umapi_commands, mock_connectors, identity_t
124
205
mock_rules .add_umapi_user (user_key , set (), mock_connectors )
125
206
126
207
if (identity_type == 'federatedID' and default_country_code == None and user_country_code == None ):
127
- mock_rules .logger .error .assert_called_with ('User %s cannot be added as it has a blank country code and no default has been specified. ' , user_key )
208
+ mock_rules .logger .error .assert_called_with ('Federated user cannot be added without a specified country code: %s ' , user_key )
128
209
else :
129
210
mock_umapi_commands .return_value .add_user .assert_called_with (expected_result )
130
211
0 commit comments