upskill-event-manager/wordpress-dev/tests/integration/test-event-summary-integration.php
bengizmo d6211ee364 feat(testing): Implement HVAC_Test_User_Factory and update .gitignore
- 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.
2025-04-14 17:41:36 -03:00

162 lines
No EOL
6 KiB
PHP

<?php
use Yoast\WPTestUtils\WPIntegration\TestCase;
/**
* Class Test_Event_Summary_Integration
*
* Integration tests for Event Summary functionality, especially involving dependencies like Event Tickets.
*/
class Test_Event_Summary_Integration extends TestCase {
/**
* Set up the test environment.
*/
public function set_up(): void {
parent::set_up();
// Ensure the class under test is available
require_once dirname(__DIR__, 2) . '/wp-content/plugins/hvac-community-events/includes/community/class-event-summary-data.php';
// Activate dependent plugins using WP-CLI for better hook triggering
// Note: This assumes WP-CLI is available in the container's PATH as 'wp'
// And that shell_exec is permitted. Check php.ini disable_functions if it fails.
$tec_slug = 'the-events-calendar';
$et_slug = 'event-tickets';
// Check if plugins are already active to avoid errors/warnings
$tec_active = shell_exec( 'wp plugin is-active ' . escapeshellarg($tec_slug) . ' --allow-root' );
$et_active = shell_exec( 'wp plugin is-active ' . escapeshellarg($et_slug) . ' --allow-root' );
if ( strpos( $tec_active, 'Success' ) === false ) {
shell_exec( 'wp plugin activate ' . escapeshellarg($tec_slug) . ' --allow-root' );
}
if ( strpos( $et_active, 'Success' ) === false ) {
shell_exec( 'wp plugin activate ' . escapeshellarg($et_slug) . ' --allow-root' );
}
// Flush cache after activating plugins
wp_cache_flush();
}
/**
* Tear down the test environment.
*/
public function tear_down(): void {
parent::tear_down();
}
/**
* Test event details retrieval and display.
* @test
*/
public function test_event_details_retrieval() {
// Create a test event
$event_id = $this->factory->post->create([
'post_type' => Tribe__Events__Main::POSTTYPE,
'post_title' => 'Test HVAC Training Event',
'post_status' => 'publish',
'meta_input' => [
'_EventStartDate' => date('Y-m-d H:i:s', strtotime('+1 week')),
'_EventEndDate' => date('Y-m-d H:i:s', strtotime('+1 week +2 hours')),
'_EventVenue' => 'Test Venue',
'_EventCost' => '199.99'
]
]);
// Get event summary data
$summary = new HVAC_Event_Summary_Data($event_id);
$event_data = $summary->get_event_details();
// Verify event details
$this->assertEquals('Test HVAC Training Event', $event_data['title']);
$this->assertEquals('Test Venue', $event_data['venue']);
$this->assertEquals('199.99', $event_data['cost']);
$this->assertArrayHasKey('start_date', $event_data);
$this->assertArrayHasKey('end_date', $event_data);
}
/**
* Test transaction data handling with mocked Event Tickets data.
* @test
*/
public function test_transaction_data_handling() {
// Create test event
$event_id = $this->factory->post->create([
'post_type' => Tribe__Events__Main::POSTTYPE,
'post_title' => 'Transaction Test Event'
]);
// Mock transaction data since we can't rely on Event Tickets in integration tests
add_filter('tribe_tickets_get_attendees', function($attendees, $post_id) use ($event_id) {
if ($post_id === $event_id) {
return [
[
'order_id' => '123',
'purchaser_name' => 'John Doe',
'purchase_time' => date('Y-m-d H:i:s'),
'ticket_name' => 'General Admission',
'price' => 50.00
]
];
}
return $attendees;
}, 10, 2);
// Get transaction summary
$summary = new HVAC_Event_Summary_Data($event_id);
$transactions = $summary->get_transaction_summary();
// Verify transaction data
$this->assertIsArray($transactions);
$this->assertCount(1, $transactions);
$this->assertEquals('John Doe', $transactions[0]['purchaser_name']);
$this->assertEquals(50.00, $transactions[0]['price']);
}
/**
* Test breadcrumb navigation integration.
* @test
*/
public function test_breadcrumb_navigation() {
// Create test event
$event_id = $this->factory->post->create([
'post_type' => Tribe__Events__Main::POSTTYPE,
'post_title' => 'Breadcrumb Test Event'
]);
// Get breadcrumb data
$summary = new HVAC_Event_Summary_Data($event_id);
$breadcrumbs = $summary->get_breadcrumb_data();
// Verify breadcrumb structure
$this->assertIsArray($breadcrumbs);
$this->assertArrayHasKey('home', $breadcrumbs);
$this->assertArrayHasKey('events', $breadcrumbs);
$this->assertArrayHasKey('current', $breadcrumbs);
$this->assertEquals('Breadcrumb Test Event', $breadcrumbs['current']['title']);
}
/**
* Test theme styling integration for event summary.
* @test
*/
public function test_theme_styling_integration() {
// Create test event
$event_id = $this->factory->post->create([
'post_type' => Tribe__Events__Main::POSTTYPE,
'post_title' => 'Styling Test Event'
]);
// Get summary display HTML
$summary = new HVAC_Event_Summary_Data($event_id);
ob_start();
$summary->display_event_summary();
$output = ob_get_clean();
// Verify theme-specific classes and structure
$this->assertStringContainsString('hvac-event-summary', $output);
$this->assertStringContainsString('hvac-theme-compatible', $output);
$this->assertStringContainsString('event-details-section', $output);
$this->assertStringContainsString('transaction-summary-section', $output);
}
}