- Add HVAC_Test_User_Factory class with: * User creation with specific roles * Multiple role support * Persona management system * Account cleanup integration - Create comprehensive test suite in HVAC_Test_User_Factory_Test.php - Update testing improvement plan documentation - Add implementation decisions to project memory bank - Restructure .gitignore with: * Whitelist approach for better file management * Explicit backup exclusions * Specific bin directory inclusions Part of the Account Management component from the testing framework improvement plan.
		
			
				
	
	
		
			80 lines
		
	
	
		
			No EOL
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			No EOL
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| class HVAC_Test_User_Factory {
 | |
|     private static $personas = [];
 | |
| 
 | |
|     public static function define_persona($name, $config) {
 | |
|         self::$personas[$name] = $config;
 | |
|     }
 | |
| 
 | |
|     public static function create_user($config) {
 | |
|         $defaults = [
 | |
|             'username' => 'testuser_' . uniqid(),
 | |
|             'email' => null,
 | |
|             'password' => 'password',
 | |
|             'roles' => [],
 | |
|             'meta' => [],
 | |
|             'persona' => null
 | |
|         ];
 | |
| 
 | |
|         $config = wp_parse_args($config, $defaults);
 | |
| 
 | |
|         // Apply persona if specified
 | |
|         if ($config['persona'] && isset(self::$personas[$config['persona']])) {
 | |
|             $persona = self::$personas[$config['persona']];
 | |
|             $config['roles'] = array_merge($config['roles'], $persona['roles'] ?? []);
 | |
|             $config['meta'] = array_merge($config['meta'], $persona['meta'] ?? []);
 | |
|         }
 | |
| 
 | |
|         // Create user
 | |
|         $user_id = wp_insert_user([
 | |
|             'user_login' => $config['username'],
 | |
|             'user_pass' => $config['password'],
 | |
|             'user_email' => $config['email'] ?? ($config['username'] . '@example.com')
 | |
|         ]);
 | |
| 
 | |
|         if (is_wp_error($user_id)) {
 | |
|             return $user_id;
 | |
|         }
 | |
| 
 | |
|         $user = new WP_User($user_id);
 | |
| 
 | |
|         // Assign roles
 | |
|         foreach ($config['roles'] as $role) {
 | |
|             if (!HVAC_Role_Manager::role_exists($role)) {
 | |
|                 HVAC_Role_Manager::create_role($role);
 | |
|             }
 | |
|             $user->add_role($role);
 | |
|         }
 | |
| 
 | |
|         // Add meta
 | |
|         foreach ($config['meta'] as $key => $value) {
 | |
|             update_user_meta($user_id, $key, $value);
 | |
|         }
 | |
| 
 | |
|         return $user;
 | |
|     }
 | |
| 
 | |
|     public static function cleanup_user($user_id) {
 | |
|         $user = get_user_by('id', $user_id);
 | |
|         if (!$user) {
 | |
|             return;
 | |
|         }
 | |
| 
 | |
|         // Clean up roles if they're no longer used
 | |
|         foreach ($user->roles as $role) {
 | |
|             $users_with_role = get_users([
 | |
|                 'role' => $role,
 | |
|                 'fields' => 'ids',
 | |
|                 'exclude' => [$user_id]
 | |
|             ]);
 | |
| 
 | |
|             if (empty($users_with_role)) {
 | |
|                 HVAC_Role_Manager::delete_role($role);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         // Delete the user
 | |
|         wp_delete_user($user_id);
 | |
|     }
 | |
| } |