- 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.
		
			
				
	
	
		
			126 lines
		
	
	
		
			No EOL
		
	
	
		
			4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			No EOL
		
	
	
		
			4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Test doubles for The Events Calendar classes and functions
 | |
|  */
 | |
| 
 | |
| if (!class_exists('Tribe__Events__Main')) {
 | |
|     class Tribe__Events__Main {
 | |
|         const POSTTYPE = 'tribe_events';
 | |
|         const VENUE_POST_TYPE = 'tribe_venue';
 | |
|         const ORGANIZER_POST_TYPE = 'tribe_organizer';
 | |
| 
 | |
|         public static function registerPostType() {
 | |
|             register_post_type(self::POSTTYPE, [
 | |
|                 'public' => true,
 | |
|                 'label' => 'Events'
 | |
|             ]);
 | |
|             register_post_type(self::VENUE_POST_TYPE, [
 | |
|                 'public' => true,
 | |
|                 'label' => 'Venues'
 | |
|             ]);
 | |
|             register_post_type(self::ORGANIZER_POST_TYPE, [
 | |
|                 'public' => true,
 | |
|                 'label' => 'Organizers'
 | |
|             ]);
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| // Register post types when file is loaded
 | |
| if (function_exists('register_post_type')) {
 | |
|     Tribe__Events__Main::registerPostType();
 | |
| }
 | |
| 
 | |
| // Mock TEC functions if they don't exist
 | |
| if (!function_exists('tribe_get_start_date')) {
 | |
|     function tribe_get_start_date($event_id) {
 | |
|         return get_post_meta($event_id, '_EventStartDate', true);
 | |
|     }
 | |
| }
 | |
| 
 | |
| if (!function_exists('tribe_get_end_date')) {
 | |
|     function tribe_get_end_date($event_id) {
 | |
|         return get_post_meta($event_id, '_EventEndDate', true);
 | |
|     }
 | |
| }
 | |
| 
 | |
| if (!function_exists('tribe_get_cost')) {
 | |
|     function tribe_get_cost($event_id, $with_currency_symbol = false) {
 | |
|         $cost = get_post_meta($event_id, '_EventCost', true);
 | |
|         if ($with_currency_symbol) {
 | |
|             $symbol = get_post_meta($event_id, '_EventCurrencySymbol', true) ?: '$';
 | |
|             return $symbol . $cost;
 | |
|         }
 | |
|         return $cost;
 | |
|     }
 | |
| }
 | |
| 
 | |
| if (!function_exists('tribe_event_is_all_day')) {
 | |
|     function tribe_event_is_all_day($event_id) {
 | |
|         return get_post_meta($event_id, '_EventAllDay', true) === 'yes';
 | |
|     }
 | |
| }
 | |
| 
 | |
| if (!function_exists('tribe_is_recurring_event')) {
 | |
|     function tribe_is_recurring_event($event_id) {
 | |
|         return false;
 | |
|     }
 | |
| }
 | |
| 
 | |
| if (!function_exists('tribe_get_timezone')) {
 | |
|     function tribe_get_timezone($event_id = null) {
 | |
|         return get_option('timezone_string') ?: 'UTC';
 | |
|     }
 | |
| }
 | |
| 
 | |
| if (!function_exists('tribe_get_venue_website_link')) {
 | |
|     function tribe_get_venue_website_link($venue_id) {
 | |
|         $url = get_post_meta($venue_id, '_VenueURL', true);
 | |
|         return $url ? sprintf('<a href="%s">%s</a>', esc_url($url), esc_url($url)) : '';
 | |
|     }
 | |
| }
 | |
| 
 | |
| if (!function_exists('tribe_get_organizer_website_link')) {
 | |
|     function tribe_get_organizer_website_link($organizer_id) {
 | |
|         $url = get_post_meta($organizer_id, '_OrganizerWebsite', true);
 | |
|         return $url ? sprintf('<a href="%s">%s</a>', esc_url($url), esc_url($url)) : '';
 | |
|     }
 | |
| }
 | |
| 
 | |
| if (!function_exists('tribe_get_venue')) {
 | |
|     function tribe_get_venue($venue_id) {
 | |
|         return get_post($venue_id);
 | |
|     }
 | |
| }
 | |
| 
 | |
| if (!function_exists('tribe_get_venue_details')) {
 | |
|     function tribe_get_venue_details($venue_id) {
 | |
|         return [
 | |
|             'name' => get_the_title($venue_id),
 | |
|             'address' => get_post_meta($venue_id, '_VenueAddress', true),
 | |
|             'city' => get_post_meta($venue_id, '_VenueCity', true),
 | |
|             'state' => get_post_meta($venue_id, '_VenueState', true),
 | |
|             'zip' => get_post_meta($venue_id, '_VenueZip', true),
 | |
|             'country' => get_post_meta($venue_id, '_VenueCountry', true),
 | |
|             'phone' => get_post_meta($venue_id, '_VenuePhone', true),
 | |
|             'website' => get_post_meta($venue_id, '_VenueURL', true)
 | |
|         ];
 | |
|     }
 | |
| }
 | |
| 
 | |
| if (!function_exists('tribe_get_organizer')) {
 | |
|     function tribe_get_organizer($organizer_id) {
 | |
|         return get_post($organizer_id);
 | |
|     }
 | |
| }
 | |
| 
 | |
| if (!function_exists('tribe_get_organizer_details')) {
 | |
|     function tribe_get_organizer_details($organizer_id) {
 | |
|         return [
 | |
|             'name' => get_the_title($organizer_id),
 | |
|             'phone' => get_post_meta($organizer_id, '_OrganizerPhone', true),
 | |
|             'email' => get_post_meta($organizer_id, '_OrganizerEmail', true),
 | |
|             'website' => get_post_meta($organizer_id, '_OrganizerWebsite', true)
 | |
|         ];
 | |
|     }
 | |
| } |