upskill-event-manager/tests/unit/test-announcements-permissions.php
Ben 7c9ca65cf2
Some checks are pending
HVAC Plugin CI/CD Pipeline / Security Analysis (push) Waiting to run
HVAC Plugin CI/CD Pipeline / Code Quality & Standards (push) Waiting to run
HVAC Plugin CI/CD Pipeline / Unit Tests (push) Waiting to run
HVAC Plugin CI/CD Pipeline / Integration Tests (push) Waiting to run
HVAC Plugin CI/CD Pipeline / Deploy to Staging (push) Blocked by required conditions
HVAC Plugin CI/CD Pipeline / Deploy to Production (push) Blocked by required conditions
HVAC Plugin CI/CD Pipeline / Notification (push) Blocked by required conditions
Security Monitoring & Compliance / Dependency Vulnerability Scan (push) Waiting to run
Security Monitoring & Compliance / Secrets & Credential Scan (push) Waiting to run
Security Monitoring & Compliance / WordPress Security Analysis (push) Waiting to run
Security Monitoring & Compliance / Static Code Security Analysis (push) Waiting to run
Security Monitoring & Compliance / Security Compliance Validation (push) Waiting to run
Security Monitoring & Compliance / Security Summary Report (push) Blocked by required conditions
Security Monitoring & Compliance / Security Team Notification (push) Blocked by required conditions
feat: add comprehensive test framework and test files
- Add 90+ test files including E2E, unit, and integration tests
- Implement Page Object Model (POM) architecture
- Add Docker testing environment with comprehensive services
- Include modernized test framework with error recovery
- Add specialized test suites for master trainer and trainer workflows
- Update .gitignore to properly track test infrastructure

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-29 23:23:26 -03:00

229 lines
No EOL
8.3 KiB
PHP

<?php
/**
* Unit Tests for HVAC Announcements Permissions
*
* @package HVAC_Community_Events
* @subpackage Tests
*/
class Test_HVAC_Announcements_Permissions extends WP_UnitTestCase {
/**
* Test users
*/
private $admin_user;
private $master_trainer_user;
private $trainer_user;
private $subscriber_user;
/**
* Setup before each test
*/
public function setUp() {
parent::setUp();
// Create test users with different roles
$this->admin_user = $this->factory->user->create( array(
'role' => 'administrator',
'user_login' => 'test_admin',
'user_email' => 'admin@example.com',
) );
$this->master_trainer_user = $this->factory->user->create( array(
'role' => 'hvac_master_trainer',
'user_login' => 'test_master',
'user_email' => 'master@example.com',
) );
$this->trainer_user = $this->factory->user->create( array(
'role' => 'hvac_trainer',
'user_login' => 'test_trainer',
'user_email' => 'trainer@example.com',
) );
$this->subscriber_user = $this->factory->user->create( array(
'role' => 'subscriber',
'user_login' => 'test_subscriber',
'user_email' => 'subscriber@example.com',
) );
// Add capabilities
HVAC_Announcements_Permissions::add_capabilities();
}
/**
* Teardown after each test
*/
public function tearDown() {
parent::tearDown();
// Clean up test users
wp_delete_user( $this->admin_user );
wp_delete_user( $this->master_trainer_user );
wp_delete_user( $this->trainer_user );
wp_delete_user( $this->subscriber_user );
// Remove capabilities
HVAC_Announcements_Permissions::remove_capabilities();
}
/**
* Test is_master_trainer method
*/
public function test_is_master_trainer() {
// Test admin is considered master trainer
$this->assertTrue( HVAC_Announcements_Permissions::is_master_trainer( $this->admin_user ) );
// Test master trainer is master trainer
$this->assertTrue( HVAC_Announcements_Permissions::is_master_trainer( $this->master_trainer_user ) );
// Test regular trainer is not master trainer
$this->assertFalse( HVAC_Announcements_Permissions::is_master_trainer( $this->trainer_user ) );
// Test subscriber is not master trainer
$this->assertFalse( HVAC_Announcements_Permissions::is_master_trainer( $this->subscriber_user ) );
}
/**
* Test is_trainer method
*/
public function test_is_trainer() {
// Test admin is considered trainer
$this->assertTrue( HVAC_Announcements_Permissions::is_trainer( $this->admin_user ) );
// Test master trainer is trainer
$this->assertTrue( HVAC_Announcements_Permissions::is_trainer( $this->master_trainer_user ) );
// Test regular trainer is trainer
$this->assertTrue( HVAC_Announcements_Permissions::is_trainer( $this->trainer_user ) );
// Test subscriber is not trainer
$this->assertFalse( HVAC_Announcements_Permissions::is_trainer( $this->subscriber_user ) );
}
/**
* Test current_user_can_create method
*/
public function test_current_user_can_create() {
// Test as admin
wp_set_current_user( $this->admin_user );
$this->assertTrue( HVAC_Announcements_Permissions::current_user_can_create() );
// Test as master trainer
wp_set_current_user( $this->master_trainer_user );
$this->assertTrue( HVAC_Announcements_Permissions::current_user_can_create() );
// Test as regular trainer
wp_set_current_user( $this->trainer_user );
$this->assertFalse( HVAC_Announcements_Permissions::current_user_can_create() );
// Test as subscriber
wp_set_current_user( $this->subscriber_user );
$this->assertFalse( HVAC_Announcements_Permissions::current_user_can_create() );
}
/**
* Test current_user_can_read method
*/
public function test_current_user_can_read() {
// Test as admin
wp_set_current_user( $this->admin_user );
$this->assertTrue( HVAC_Announcements_Permissions::current_user_can_read() );
// Test as master trainer
wp_set_current_user( $this->master_trainer_user );
$this->assertTrue( HVAC_Announcements_Permissions::current_user_can_read() );
// Test as regular trainer
wp_set_current_user( $this->trainer_user );
$this->assertTrue( HVAC_Announcements_Permissions::current_user_can_read() );
// Test as subscriber
wp_set_current_user( $this->subscriber_user );
$this->assertFalse( HVAC_Announcements_Permissions::current_user_can_read() );
}
/**
* Test get_active_trainers method
*/
public function test_get_active_trainers() {
// Get active trainers
$active_trainers = HVAC_Announcements_Permissions::get_active_trainers();
// Should include master trainer and regular trainer (not admin by default)
$trainer_ids = wp_list_pluck( $active_trainers, 'ID' );
$this->assertContains( $this->master_trainer_user, $trainer_ids );
$this->assertContains( $this->trainer_user, $trainer_ids );
// Test caching
$cached_trainers = HVAC_Announcements_Permissions::get_active_trainers();
$this->assertEquals( $active_trainers, $cached_trainers );
}
/**
* Test user_should_receive_emails method
*/
public function test_user_should_receive_emails() {
// Test valid trainer with email
$this->assertTrue( HVAC_Announcements_Permissions::user_should_receive_emails( $this->trainer_user ) );
// Test subscriber should not receive emails
$this->assertFalse( HVAC_Announcements_Permissions::user_should_receive_emails( $this->subscriber_user ) );
// Test disabled user
update_user_meta( $this->trainer_user, 'account_status', 'disabled' );
$this->assertFalse( HVAC_Announcements_Permissions::user_should_receive_emails( $this->trainer_user ) );
delete_user_meta( $this->trainer_user, 'account_status' );
// Test opted-out user
update_user_meta( $this->trainer_user, 'hvac_announcement_emails_opt_out', 'yes' );
$this->assertFalse( HVAC_Announcements_Permissions::user_should_receive_emails( $this->trainer_user ) );
delete_user_meta( $this->trainer_user, 'hvac_announcement_emails_opt_out' );
}
/**
* Test cache invalidation
*/
public function test_cache_invalidation() {
// Get initial trainers
$trainers_before = HVAC_Announcements_Permissions::get_active_trainers();
// Create new trainer
$new_trainer = $this->factory->user->create( array(
'role' => 'hvac_trainer',
'user_login' => 'new_trainer',
'user_email' => 'new@example.com',
) );
// Clear cache manually (normally done by hooks)
$permissions = HVAC_Announcements_Permissions::get_instance();
$permissions->clear_trainers_cache();
// Get trainers again
$trainers_after = HVAC_Announcements_Permissions::get_active_trainers();
// Should have one more trainer
$this->assertEquals( count($trainers_before) + 1, count($trainers_after) );
// Clean up
wp_delete_user( $new_trainer );
}
/**
* Test email validation in user_should_receive_emails
*/
public function test_email_validation() {
// Create user with invalid email
$invalid_email_user = $this->factory->user->create( array(
'role' => 'hvac_trainer',
'user_login' => 'invalid_email_user',
'user_email' => 'not-an-email',
) );
// Should return false for invalid email
$this->assertFalse( HVAC_Announcements_Permissions::user_should_receive_emails( $invalid_email_user ) );
// Clean up
wp_delete_user( $invalid_email_user );
}
}