diff --git a/phpBB/config/default/container/services_posting.yml b/phpBB/config/default/container/services_posting.yml index f6ad5ba80f..aa1a3e1959 100644 --- a/phpBB/config/default/container/services_posting.yml +++ b/phpBB/config/default/container/services_posting.yml @@ -1,5 +1,5 @@ services: post.helper: - class: phpbb\post\post_helper + class: phpbb\posting\post_helper arguments: - '@dbal.conn' diff --git a/phpBB/phpbb/console/command/searchindex/create.php b/phpBB/phpbb/console/command/searchindex/create.php index 9615bb4621..6652e38159 100644 --- a/phpBB/phpbb/console/command/searchindex/create.php +++ b/phpBB/phpbb/console/command/searchindex/create.php @@ -17,7 +17,7 @@ use phpbb\config\config; use phpbb\console\command\command; use phpbb\language\language; use phpbb\log\log; -use phpbb\post\post_helper; +use phpbb\posting\post_helper; use phpbb\search\exception\no_search_backend_found_exception; use phpbb\search\search_backend_factory; use phpbb\search\state_helper; diff --git a/phpBB/phpbb/console/command/searchindex/delete.php b/phpBB/phpbb/console/command/searchindex/delete.php index 56506c44b4..618bdce03d 100644 --- a/phpBB/phpbb/console/command/searchindex/delete.php +++ b/phpBB/phpbb/console/command/searchindex/delete.php @@ -17,7 +17,7 @@ use phpbb\config\config; use phpbb\console\command\command; use phpbb\language\language; use phpbb\log\log; -use phpbb\post\post_helper; +use phpbb\posting\post_helper; use phpbb\search\exception\no_search_backend_found_exception; use phpbb\search\search_backend_factory; use phpbb\search\state_helper; diff --git a/phpBB/phpbb/post/post_helper.php b/phpBB/phpbb/posting/post_helper.php similarity index 96% rename from phpBB/phpbb/post/post_helper.php rename to phpBB/phpbb/posting/post_helper.php index a70d38fb1c..2fbba9688b 100644 --- a/phpBB/phpbb/post/post_helper.php +++ b/phpBB/phpbb/posting/post_helper.php @@ -11,7 +11,7 @@ * */ -namespace phpbb\post; +namespace phpbb\posting; use phpbb\db\driver\driver_interface; diff --git a/tests/console/searchindex/base.php b/tests/console/searchindex/base.php new file mode 100644 index 0000000000..15372a5582 --- /dev/null +++ b/tests/console/searchindex/base.php @@ -0,0 +1,74 @@ +config = new \phpbb\config\config([ + 'search_indexing_state' => [], + 'search_type' => 'search_backend_mock' + ]); + + $lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx); + $this->language = new \phpbb\language\language($lang_loader); + + $this->log = $this->createMock('\phpbb\log\log'); + + $this->post_helper = $this->createMock('\phpbb\posting\post_helper'); + $this->post_helper + ->method('get_max_post_id') + ->willReturn(1000); + + $this->user = $this->createMock('\phpbb\user'); + + $phpbb_container = new phpbb_mock_container_builder(); + $search_backend_mock = new search_backend_mock(); + $this->search_backend_collection = new \phpbb\di\service_collection($phpbb_container); + $this->search_backend_collection->add('search_backend_mock'); + $this->search_backend_collection->add_service_class('search_backend_mock', 'search_backend_mock'); + $phpbb_container->set('search_backend_mock', $search_backend_mock); + + $this->search_backend_factory = new search_backend_factory($this->config, $this->search_backend_collection); + + $this->state_helper = new state_helper($this->config, $this->search_backend_factory); + + parent::setUp(); + } +} diff --git a/tests/console/searchindex/create_test.php b/tests/console/searchindex/create_test.php new file mode 100644 index 0000000000..43178e8408 --- /dev/null +++ b/tests/console/searchindex/create_test.php @@ -0,0 +1,70 @@ +add(new create( + $this->config, + $this->language, + $this->log, + $this->post_helper, + $this->search_backend_factory, + $this->state_helper, + $this->user + )); + + $command = $application->find('searchindex:create'); + + return new CommandTester($command); + } + + public function test_create() + { + $command_tester = $this->get_command_tester(); + + $command_tester->execute([ + 'search-backend' => 'search_backend_mock', + ]); + + $this->assertEquals(Command::SUCCESS, $command_tester->getStatusCode()); + $this->assertStringContainsString('CLI_SEARCHINDEX_CREATE_SUCCESS', $command_tester->getDisplay()); + } + + public function test_create_when_search_backend_dont_exist() + { + $command_tester = $this->get_command_tester(); + + $command_tester->execute([ + 'search-backend' => 'missing', + ]); + + $this->assertEquals(Command::FAILURE, $command_tester->getStatusCode()); + $this->assertStringContainsString('CLI_SEARCHINDEX_BACKEND_NOT_FOUND', $command_tester->getDisplay()); + } + + public function test_create_when_action_in_progress() + { + $this->config['search_indexing_state'] = ['not', 'empty']; + + $command_tester = $this->get_command_tester(); + + $command_tester->execute([ + 'search-backend' => 'search_backend_mock', + ]); + + $this->assertEquals(Command::FAILURE, $command_tester->getStatusCode()); + $this->assertStringContainsString('CLI_SEARCHINDEX_ACTION_IN_PROGRESS', $command_tester->getDisplay()); + + $this->config['search_indexing_state'] = []; + } +} diff --git a/tests/console/searchindex/delete_test.php b/tests/console/searchindex/delete_test.php new file mode 100644 index 0000000000..2e17a99e48 --- /dev/null +++ b/tests/console/searchindex/delete_test.php @@ -0,0 +1,70 @@ +add(new delete( + $this->config, + $this->language, + $this->log, + $this->post_helper, + $this->search_backend_factory, + $this->state_helper, + $this->user + )); + + $command = $application->find('searchindex:delete'); + + return new CommandTester($command); + } + + public function test_delete() + { + $command_tester = $this->get_command_tester(); + + $command_tester->execute([ + 'search-backend' => 'search_backend_mock', + ]); + + $this->assertEquals(Command::SUCCESS, $command_tester->getStatusCode()); + $this->assertStringContainsString('CLI_SEARCHINDEX_DELETE_SUCCESS', $command_tester->getDisplay()); + } + + public function test_delete_when_search_backend_dont_exist() + { + $command_tester = $this->get_command_tester(); + + $command_tester->execute([ + 'search-backend' => 'missing', + ]); + + $this->assertEquals(Command::FAILURE, $command_tester->getStatusCode()); + $this->assertStringContainsString('CLI_SEARCHINDEX_BACKEND_NOT_FOUND', $command_tester->getDisplay()); + } + + public function test_delete_when_action_in_progress() + { + $this->config['search_indexing_state'] = ['not', 'empty']; + + $command_tester = $this->get_command_tester(); + + $command_tester->execute([ + 'search-backend' => 'search_backend_mock', + ]); + + $this->assertEquals(Command::FAILURE, $command_tester->getStatusCode()); + $this->assertStringContainsString('CLI_SEARCHINDEX_ACTION_IN_PROGRESS', $command_tester->getDisplay()); + + $this->config['search_indexing_state'] = []; + } +} diff --git a/tests/console/searchindex/list_all_test.php b/tests/console/searchindex/list_all_test.php new file mode 100644 index 0000000000..b2308b3806 --- /dev/null +++ b/tests/console/searchindex/list_all_test.php @@ -0,0 +1,38 @@ +add(new list_all( + $this->config, + $this->language, + $this->search_backend_collection, + $this->user + )); + + $command = $application->find('searchindex:list'); + + return new CommandTester($command); + } + + public function test_list() + { + $command_tester = $this->get_command_tester(); + + $command_tester->execute([]); + + $this->assertEquals(Command::SUCCESS, $command_tester->getStatusCode()); + $this->assertStringContainsString('Mock search backend', $command_tester->getDisplay()); + $this->assertStringContainsString('ACTIVE', $command_tester->getDisplay()); + } +} diff --git a/tests/console/searchindex/mock/search_backend_mock.php b/tests/console/searchindex/mock/search_backend_mock.php new file mode 100644 index 0000000000..0f2db43eaf --- /dev/null +++ b/tests/console/searchindex/mock/search_backend_mock.php @@ -0,0 +1,105 @@ +index_created = true; + return null; + } + + public function delete_index(int &$post_counter = 0): ?array + { + $this->index_created = true; + return null; + } + + public function index_created(): bool + { + return $this->index_created; + } + + public function index_stats() + { + return []; + } + + public function get_acp_options(): array + { + return []; + } + + public function get_type(): string + { + return static::class; + } +}