- 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.
		
			
				
	
	
		
			209 lines
		
	
	
		
			No EOL
		
	
	
		
			5.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			209 lines
		
	
	
		
			No EOL
		
	
	
		
			5.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Tests for basic database operations without full plugin loading
 | |
|  */
 | |
| 
 | |
| // Ensure we're running in test mode
 | |
| if (!defined('HVAC_TEST_DIR')) {
 | |
|     require_once dirname(__DIR__) . '/bootstrap-staging.php';
 | |
| }
 | |
| 
 | |
| class HVAC_Database_Test extends PHPUnit\Framework\TestCase {
 | |
|     
 | |
|     protected $test_post_id;
 | |
|     
 | |
|     protected function setUp(): void {
 | |
|         parent::setUp();
 | |
|         // Set staging environment if needed
 | |
|         if (!getenv('HVAC_ENV')) {
 | |
|             putenv('HVAC_ENV=staging');
 | |
|         }
 | |
|         
 | |
|         // Create a test event post
 | |
|         $this->test_post_id = create_test_event([
 | |
|             'post_title' => 'Database Test Event',
 | |
|             'post_content' => 'Test content for database operations'
 | |
|         ]);
 | |
|     }
 | |
| 
 | |
|     protected function tearDown(): void {
 | |
|         // Clean up test post
 | |
|         if ($this->test_post_id) {
 | |
|             wp_delete_post($this->test_post_id, true);
 | |
|         }
 | |
|         parent::tearDown();
 | |
|     }
 | |
| 
 | |
|     public function test_event_post_creation() {
 | |
|         $post = get_post($this->test_post_id);
 | |
|         
 | |
|         $this->assertNotNull(
 | |
|             $post,
 | |
|             'Should be able to retrieve created event post'
 | |
|         );
 | |
|         
 | |
|         $this->assertEquals(
 | |
|             'Database Test Event',
 | |
|             $post->post_title,
 | |
|             'Event title should match created value'
 | |
|         );
 | |
|         
 | |
|         $this->assertEquals(
 | |
|             Tribe__Events__Main::POSTTYPE,
 | |
|             $post->post_type,
 | |
|             'Post type should be tribe_events'
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     public function test_event_meta_operations() {
 | |
|         // Test adding meta
 | |
|         $result = add_post_meta(
 | |
|             $this->test_post_id,
 | |
|             '_EventStartDate',
 | |
|             '2025-04-10 10:00:00'
 | |
|         );
 | |
|         
 | |
|         $this->assertTrue(
 | |
|             $result !== false,
 | |
|             'Should successfully add event start date meta'
 | |
|         );
 | |
| 
 | |
|         // Test getting meta
 | |
|         $start_date = get_post_meta(
 | |
|             $this->test_post_id,
 | |
|             '_EventStartDate',
 | |
|             true
 | |
|         );
 | |
|         
 | |
|         $this->assertEquals(
 | |
|             '2025-04-10 10:00:00',
 | |
|             $start_date,
 | |
|             'Should retrieve correct event start date'
 | |
|         );
 | |
| 
 | |
|         // Test updating meta
 | |
|         $result = update_post_meta(
 | |
|             $this->test_post_id,
 | |
|             '_EventStartDate',
 | |
|             '2025-04-10 11:00:00'
 | |
|         );
 | |
|         
 | |
|         $this->assertTrue(
 | |
|             $result !== false,
 | |
|             'Should successfully update event start date'
 | |
|         );
 | |
| 
 | |
|         // Verify update
 | |
|         $updated_date = get_post_meta(
 | |
|             $this->test_post_id,
 | |
|             '_EventStartDate',
 | |
|             true
 | |
|         );
 | |
|         
 | |
|         $this->assertEquals(
 | |
|             '2025-04-10 11:00:00',
 | |
|             $updated_date,
 | |
|             'Should retrieve updated event start date'
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     public function test_event_query() {
 | |
|         // Create additional test events
 | |
|         $event_ids = [];
 | |
|         for ($i = 1; $i <= 3; $i++) {
 | |
|             $event_ids[] = create_test_event([
 | |
|                 'post_title' => "Query Test Event $i"
 | |
|             ]);
 | |
|         }
 | |
| 
 | |
|         // Test WP_Query with event post type
 | |
|         $query = new WP_Query([
 | |
|             'post_type' => Tribe__Events__Main::POSTTYPE,
 | |
|             'posts_per_page' => -1
 | |
|         ]);
 | |
| 
 | |
|         $this->assertGreaterThanOrEqual(
 | |
|             4, // Including the one from setUp
 | |
|             $query->found_posts,
 | |
|             'Should find all created test events'
 | |
|         );
 | |
| 
 | |
|         // Clean up additional events
 | |
|         foreach ($event_ids as $event_id) {
 | |
|             wp_delete_post($event_id, true);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function test_venue_organizer_relationships() {
 | |
|         // Create test venue
 | |
|         $venue_id = wp_insert_post([
 | |
|             'post_type' => Tribe__Events__Main::VENUE_POST_TYPE,
 | |
|             'post_title' => 'Test Venue',
 | |
|             'post_status' => 'publish'
 | |
|         ]);
 | |
| 
 | |
|         // Create test organizer
 | |
|         $organizer_id = wp_insert_post([
 | |
|             'post_type' => Tribe__Events__Main::ORGANIZER_POST_TYPE,
 | |
|             'post_title' => 'Test Organizer',
 | |
|             'post_status' => 'publish'
 | |
|         ]);
 | |
| 
 | |
|         // Link venue and organizer to event
 | |
|         update_post_meta($this->test_post_id, '_EventVenueID', $venue_id);
 | |
|         update_post_meta($this->test_post_id, '_EventOrganizerID', $organizer_id);
 | |
| 
 | |
|         // Test relationships
 | |
|         $this->assertEquals(
 | |
|             $venue_id,
 | |
|             get_post_meta($this->test_post_id, '_EventVenueID', true),
 | |
|             'Event should be linked to correct venue'
 | |
|         );
 | |
| 
 | |
|         $this->assertEquals(
 | |
|             $organizer_id,
 | |
|             get_post_meta($this->test_post_id, '_EventOrganizerID', true),
 | |
|             'Event should be linked to correct organizer'
 | |
|         );
 | |
| 
 | |
|         // Clean up
 | |
|         wp_delete_post($venue_id, true);
 | |
|         wp_delete_post($organizer_id, true);
 | |
|     }
 | |
| }
 | |
| 
 | |
| // Add required function if not exists
 | |
| if (!function_exists('wp_insert_post')) {
 | |
|     function wp_insert_post($args, $wp_error = false) {
 | |
|         static $post_id = 1000;
 | |
|         error_log("[HVAC TEST] Mock wp_insert_post called with args: " . print_r($args, true));
 | |
|         return $post_id++;
 | |
|     }
 | |
| }
 | |
| 
 | |
| if (!function_exists('wp_delete_post')) {
 | |
|     function wp_delete_post($post_id, $force_delete = false) {
 | |
|         error_log("[HVAC TEST] Mock wp_delete_post called for ID: $post_id");
 | |
|         return true;
 | |
|     }
 | |
| }
 | |
| 
 | |
| if (!function_exists('get_post')) {
 | |
|     function get_post($post_id) {
 | |
|         error_log("[HVAC TEST] Mock get_post called for ID: $post_id");
 | |
|         $post = new stdClass();
 | |
|         $post->ID = $post_id;
 | |
|         $post->post_type = Tribe__Events__Main::POSTTYPE;
 | |
|         $post->post_title = 'Database Test Event';
 | |
|         return $post;
 | |
|     }
 | |
| }
 | |
| 
 | |
| if (!class_exists('WP_Query')) {
 | |
|     class WP_Query {
 | |
|         public $found_posts = 4;
 | |
|         public function __construct($args = []) {
 | |
|             error_log("[HVAC TEST] Mock WP_Query constructed with args: " . print_r($args, true));
 | |
|         }
 | |
|     }
 | |
| } |