| 1 | Index: tests/phpunit/tests/privacy/wpPrivacyGeneratePersonalDataExportFile.php |
|---|
| 2 | =================================================================== |
|---|
| 3 | --- tests/phpunit/tests/privacy/wpPrivacyGeneratePersonalDataExportFile.php (nonexistent) |
|---|
| 4 | +++ tests/phpunit/tests/privacy/wpPrivacyGeneratePersonalDataExportFile.php (working copy) |
|---|
| 5 | @@ -0,0 +1,118 @@ |
|---|
| 6 | +<?php |
|---|
| 7 | +/** |
|---|
| 8 | + * Define a class to test `wp_privacy_generate_personal_data_export_file()`. |
|---|
| 9 | + * |
|---|
| 10 | + * @package WordPress |
|---|
| 11 | + * @subpackage UnitTests |
|---|
| 12 | + * @since 4.9.6 |
|---|
| 13 | + */ |
|---|
| 14 | + |
|---|
| 15 | +/** |
|---|
| 16 | + * Test cases for `wp_privacy_generate_personal_data_export_file()`. |
|---|
| 17 | + * |
|---|
| 18 | + * @group privacy |
|---|
| 19 | + * @covers wp_privacy_generate_personal_data_export_file |
|---|
| 20 | + * |
|---|
| 21 | + * @since 4.9.6 |
|---|
| 22 | + */ |
|---|
| 23 | +class Tests_Privacy_wpPrivacyGeneratePersonalDataExportFile extends WP_UnitTestCase { |
|---|
| 24 | + /** |
|---|
| 25 | + * An Export Request ID |
|---|
| 26 | + * |
|---|
| 27 | + * @since 4.9.6 |
|---|
| 28 | + * |
|---|
| 29 | + * @var int $export_request_id |
|---|
| 30 | + */ |
|---|
| 31 | + protected static $export_request_id; |
|---|
| 32 | + |
|---|
| 33 | + /** |
|---|
| 34 | + * Create fixtures that are shared by multiple test cases. |
|---|
| 35 | + * |
|---|
| 36 | + * @param WP_UnitTest_Factory $factory The base factory object. |
|---|
| 37 | + */ |
|---|
| 38 | + public static function wpSetUpBeforeClass( $factory ) { |
|---|
| 39 | + self::$export_request_id = wp_create_user_request( 'export-requester@example.com', 'export_personal_data' ); |
|---|
| 40 | + } |
|---|
| 41 | + |
|---|
| 42 | + /** |
|---|
| 43 | + * Set up the test fixture. |
|---|
| 44 | + * Override wp_die(), pretend to be ajax, and suppres E_WARNINGs |
|---|
| 45 | + */ |
|---|
| 46 | + public function setUp() { |
|---|
| 47 | + parent::setUp(); |
|---|
| 48 | + |
|---|
| 49 | + add_filter( 'wp_die_ajax_handler', array( $this, 'getDieHandler' ), 1, 1 ); |
|---|
| 50 | + add_filter( 'wp_doing_ajax', '__return_true' ); |
|---|
| 51 | + |
|---|
| 52 | + // Suppress warnings from "Cannot modify header information - headers already sent by" |
|---|
| 53 | + $this->_error_level = error_reporting(); |
|---|
| 54 | + error_reporting( $this->_error_level & ~E_WARNING ); |
|---|
| 55 | + } |
|---|
| 56 | + |
|---|
| 57 | + /** |
|---|
| 58 | + * Tear down the test fixture. |
|---|
| 59 | + * Remove the wp_die() override, restore error reporting |
|---|
| 60 | + */ |
|---|
| 61 | + public function tearDown() { |
|---|
| 62 | + remove_filter( 'wp_die_ajax_handler', array( $this, 'getDieHandler' ), 1, 1 ); |
|---|
| 63 | + error_reporting( $this->_error_level ); |
|---|
| 64 | + parent::tearDown(); |
|---|
| 65 | + } |
|---|
| 66 | + |
|---|
| 67 | + /** |
|---|
| 68 | + * Return our callback handler |
|---|
| 69 | + * |
|---|
| 70 | + * @return callback |
|---|
| 71 | + */ |
|---|
| 72 | + public function getDieHandler() { |
|---|
| 73 | + return array( $this, 'dieHandler' ); |
|---|
| 74 | + } |
|---|
| 75 | + |
|---|
| 76 | + /** |
|---|
| 77 | + * Handler for wp_die() |
|---|
| 78 | + * Don't die, just continue on. |
|---|
| 79 | + * |
|---|
| 80 | + * @param string $message |
|---|
| 81 | + */ |
|---|
| 82 | + public function dieHandler( $message ) { |
|---|
| 83 | + } |
|---|
| 84 | + |
|---|
| 85 | + // TODO test ziparchive not available |
|---|
| 86 | + |
|---|
| 87 | + public function test_wp_privacy_generate_personal_data_export_file_rejects_remove_requests() { |
|---|
| 88 | + $request_id = wp_create_user_request( 'removal-requester@example.com', 'remove_personal_data' ); |
|---|
| 89 | + |
|---|
| 90 | + ob_start(); |
|---|
| 91 | + wp_privacy_generate_personal_data_export_file( $request_id ); |
|---|
| 92 | + |
|---|
| 93 | + $response = json_decode( ob_get_clean() ); |
|---|
| 94 | + $this->assertFalse( $response->success ); |
|---|
| 95 | + $this->assertEquals( 'Invalid request ID when generating export file.', $response->data ); |
|---|
| 96 | + } |
|---|
| 97 | + |
|---|
| 98 | + public function test_wp_privacy_generate_personal_data_export_file_rejects_requests_with_bad_email_addresses() { |
|---|
| 99 | + $request_id = wp_create_user_request( 'bad-email-requester@example.com', 'export_personal_data' ); |
|---|
| 100 | + wp_update_post( |
|---|
| 101 | + array( |
|---|
| 102 | + 'ID' => $request_id, |
|---|
| 103 | + 'post_title' => 'not-a-valid-email-address' |
|---|
| 104 | + ) |
|---|
| 105 | + ); |
|---|
| 106 | + |
|---|
| 107 | + ob_start(); |
|---|
| 108 | + wp_privacy_generate_personal_data_export_file( $request_id ); |
|---|
| 109 | + |
|---|
| 110 | + $response = json_decode( ob_get_clean() ); |
|---|
| 111 | + $this->assertFalse( $response->success ); |
|---|
| 112 | + $this->assertEquals( 'Invalid email address when generating export file.', $response->data ); |
|---|
| 113 | + } |
|---|
| 114 | + |
|---|
| 115 | + // TODO mkdir_p fails |
|---|
| 116 | + // TODO index.html created in export folder - silence is golden |
|---|
| 117 | + // TODO unable to protect error if can't create index.html file |
|---|
| 118 | + // TODO unable to open export file error if can't write |
|---|
| 119 | + // TODO report file exists, has starts with <html> and ends with </html> |
|---|
| 120 | + // TODO unable to add data error if can't add file to export |
|---|
| 121 | + // TODO error if can't open archive file |
|---|
| 122 | + // TODO report file removed, even if errors |
|---|
| 123 | +} |
|---|