Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

REST API Refactor: Base classes and Content Helper namespace implementation #2731

Merged
merged 14 commits into from
Sep 5, 2024

Conversation

vaurdan
Copy link
Contributor

@vaurdan vaurdan commented Aug 22, 2024

Description

This PR is part of the effort described in #2426, and kicks-off the refactoring of the internal REST API.

This PR in particular introduces the new base classes for the new internal API, and also the implementation of the content-helper namespaces, which includes all the Content Suggestions functionalities, such as the Excerpt Generator, TItle Suggestions and Smart Linking.

I have been also refactoring the tests, so all these classes have proper integration tests.

In the UI, the endpoints in the providers for the Content Suggestions features have been replaced to use the new endpoints.

Motivation and context

How has this been tested?

I have validated locally that all the Content Helper features as still working as expected, and added new integration tests to test all the new classes functionalities.

Summary by CodeRabbit

  • New Features

    • Introduced new REST API controllers and endpoints for improved content management, including smart linking, excerpt generation, and title suggestions.
    • Updated API endpoints to utilize the latest version, enhancing functionality and performance.
    • Added validation checks to ensure proper handling of hyperlink references and user permissions.
  • Bug Fixes

    • Resolved issues related to API endpoint registration and response handling.
  • Tests

    • Implemented comprehensive integration tests for newly introduced and updated API endpoints to verify functionality and reliability.

@vaurdan vaurdan added this to the Summer 2024 milestone Aug 22, 2024
@vaurdan vaurdan self-assigned this Aug 22, 2024
@vaurdan vaurdan requested a review from a team as a code owner August 22, 2024 13:46
Copy link
Contributor

coderabbitai bot commented Aug 22, 2024

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Base branches to auto review (4)
  • develop
  • add/.*
  • fix/.*
  • update/.*

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Walkthrough

Walkthrough

The changes encompass the introduction of new REST API controllers, modifications to existing endpoint structures, and enhancements to method accessibility within test files. New classes and traits have been implemented for better endpoint registration and access control. Additionally, several tests have been added to validate the functionality of these APIs, ensuring comprehensive integration and error handling.

Changes

File Path Change Summary
src/Models/class-smart-link.php Added a conditional check in the constructor to validate the $href variable before setting it.
src/content-helper/editor-sidebar/smart-linking/provider.ts Updated API endpoint paths from version 1 to version 2 and changed the key for request data structure.
src/content-helper/editor-sidebar/title-suggestions/provider.ts Changed the API endpoint for fetching title suggestions to version 2.
src/content-helper/excerpt-generator/provider.ts Updated the endpoint for fetching content suggestions to version 2.
src/rest-api/class-base-api-controller.php Introduced the Base_API_Controller class as a foundation for API controllers with essential methods.
src/rest-api/class-base-endpoint.php Introduced Base_Endpoint class for REST API endpoints, defining essential functionalities and methods.
src/rest-api/content-helper/class-content-helper-controller.php Introduced Content_Helper_Controller class to manage content helper API endpoints.
src/rest-api/content-helper/class-endpoint-excerpt-generator.php Introduced Endpoint_Excerpt_Generator class for generating content excerpts via a REST API endpoint.
src/rest-api/content-helper/class-endpoint-smart-linking.php Renamed and updated the Smart_Linking_Endpoint class, modified routes and request handling methods.
src/rest-api/content-helper/class-endpoint-title-suggestions.php Introduced Endpoint_Title_Suggestions class for generating title suggestions via a REST API.
src/rest-api/content-helper/trait-content-helper-feature.php Introduced Content_Helper_Feature trait for feature-based access control in content helper endpoints.
tests/.../BaseEndpointTest.php New test suite for Base_Endpoint, validating endpoint functionalities and error handling.
tests/.../EndpointExcerptGeneratorTest.php New tests for Endpoint_Excerpt_Generator, covering successful and error scenarios.
tests/.../EndpointSmartLinkingTest.php New tests for Endpoint_Smart_Linking, validating route registration and response handling.
tests/.../EndpointTitleSuggestionsTest.php New tests for Endpoint_Title_Suggestions, validating the title generation process.

Sequence Diagram(s)

sequenceDiagram
    participant A as User
    participant B as Client
    participant C as REST_API_Controller
    participant D as Endpoint

    A->>B: Send request for data
    B->>C: Route request to REST API Controller
    C->>D: Call appropriate endpoint method
    D-->>C: Return response data
    C-->>B: Send final response
    B-->>A: Deliver response to user
Loading

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

Share
Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai generate interesting stats about this repository and render them as a table.
    • @coderabbitai show all the console.log statements in this repository.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 10

Outside diff range, codebase verification and nitpick comments (11)
src/rest-api/content-helper/class-content-helper-controller.php (1)

1-7: Ensure PHPDoc comments adhere to standards.

The PHPDoc block is well-structured, but ensure all comments end with a period.

 * API Content Helper Controller
 *
 * @package Parsely
 * @since   3.17.0
 */
src/rest-api/class-rest-api-controller.php (1)

1-7: Ensure PHPDoc comments adhere to standards.

The PHPDoc block is well-structured, but ensure all comments end with a period.

 * REST API Controller
 *
 * @package Parsely
 * @since   3.17.0
 */
tests/Integration/RestAPI/RestAPIControllerTest.php (2)

35-45: Consider adding a teardown method.

The setUp method initializes the test environment, but there is no corresponding tearDown method to clean up after tests. Consider adding it to ensure a clean test environment.

/**
 * Tear down the test environment.
 *
 * @since 3.17.0
 */
public function tearDown(): void {
    parent::tearDown();
    // Additional cleanup code if necessary.
}

47-57: Add a version check to the test.

The test verifies the namespace setup but doesn't check the version setup as mentioned in the docblock. Consider adding a version check to ensure comprehensive coverage.

self::assertEquals( 'v2', $this->test_controller->get_version() );
src/content-helper/editor-sidebar/title-suggestions/provider.ts (1)

55-55: Add a @since tag to the JSDoc comment.

The JSDoc comment for the generateTitles method should include a @since tag indicating the version of the endpoint change.

/**
 * @since 3.17.0 Updated the API endpoint to v2.
 */
src/rest-api/class-base-api-controller.php (1)

85-85: Clarify the init method's purpose in documentation.

The comment for the init method could be expanded to specify what kind of endpoints should be registered by child classes.

 * endpoints.
+ * Child classes should define specific endpoints related to their functionality.
tests/Integration/RestAPI/ContentHelper/ContentHelperControllerTest.php (1)

91-98: Test endpoint registration comprehensively.

The test checks the registration of endpoints. Consider adding assertions to verify that each endpoint is initialized correctly.

+ self::assertTrue($this->content_helper_controller->endpoints[0]->is_initialized());
+ self::assertTrue($this->content_helper_controller->endpoints[1]->is_initialized());
+ self::assertTrue($this->content_helper_controller->endpoints[2]->is_initialized());
tests/Integration/RestAPI/ContentHelper/EndpointSmartLinkingTest.php (2)

1-7: Ensure File Header Comments Follow Standards.

The file header comments should be reviewed to ensure they adhere to the project's documentation standards, including any necessary tags or information.


48-62: Consider Adding More Context to Setup Method.

The set_up method initializes the test environment, but additional context or comments could be added to explain the purpose of each initialization step, especially for future maintainers.

src/Models/class-smart-link.php (1)

130-132: Ensure Consistency in Property Initialization.

Ensure that all properties are consistently initialized, either in the constructor or with default values, to prevent potential issues with uninitialized properties.

tests/Integration/RestAPI/BaseEndpointTest.php (1)

103-141: Consider Adding More Context to Setup Method.

The set_up method initializes the test environment, but additional context or comments could be added to explain the purpose of each initialization step, especially for future maintainers.

Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

Commits

Files that changed from the base of the PR and between cf95ef4 and 044b48d.

Files ignored due to path filters (4)
  • build/content-helper/editor-sidebar.asset.php is excluded by !build/**
  • build/content-helper/editor-sidebar.js is excluded by !build/**
  • build/content-helper/excerpt-generator.asset.php is excluded by !build/**
  • build/content-helper/excerpt-generator.js is excluded by !build/**
Files selected for processing (26)
  • src/Models/class-smart-link.php (1 hunks)
  • src/content-helper/editor-sidebar/smart-linking/provider.ts (6 hunks)
  • src/content-helper/editor-sidebar/title-suggestions/provider.ts (1 hunks)
  • src/content-helper/excerpt-generator/provider.ts (1 hunks)
  • src/rest-api/class-base-api-controller.php (1 hunks)
  • src/rest-api/class-base-endpoint.php (1 hunks)
  • src/rest-api/class-rest-api-controller.php (1 hunks)
  • src/rest-api/content-helper/class-content-helper-controller.php (1 hunks)
  • src/rest-api/content-helper/class-endpoint-excerpt-generator.php (1 hunks)
  • src/rest-api/content-helper/class-endpoint-smart-linking.php (9 hunks)
  • src/rest-api/content-helper/class-endpoint-title-suggestions.php (1 hunks)
  • src/rest-api/content-helper/trait-content-helper-feature.php (1 hunks)
  • tests/Integration/ContentHelper/ContentHelperDashboardWidgetTest.php (1 hunks)
  • tests/Integration/ContentHelper/ContentHelperFeatureTest.php (1 hunks)
  • tests/Integration/ContentHelper/ContentHelperPostListStatsTest.php (1 hunks)
  • tests/Integration/RestAPI/BaseAPIControllerTest.php (1 hunks)
  • tests/Integration/RestAPI/BaseEndpointTest.php (1 hunks)
  • tests/Integration/RestAPI/ContentHelper/ContentHelperControllerTest.php (1 hunks)
  • tests/Integration/RestAPI/ContentHelper/ContentHelperFeatureTestTrait.php (1 hunks)
  • tests/Integration/RestAPI/ContentHelper/EndpointExcerptGeneratorTest.php (1 hunks)
  • tests/Integration/RestAPI/ContentHelper/EndpointSmartLinkingTest.php (1 hunks)
  • tests/Integration/RestAPI/ContentHelper/EndpointTitleSuggestionsTest.php (1 hunks)
  • tests/Integration/RestAPI/RestAPIControllerTest.php (1 hunks)
  • tests/Integration/ScriptsTest.php (2 hunks)
  • tests/Integration/TestCase.php (3 hunks)
  • wp-parsely.php (5 hunks)
Additional context used
Path-based instructions (26)
src/rest-api/content-helper/class-content-helper-controller.php (1)

Pattern **/*.{html,php}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the HTML and PHP code to ensure it is well-structured and adheres to best practices.
  • Ensure the code follows WordPress coding standards and is well-documented.
  • Confirm the code is secure and free from vulnerabilities.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Verify code compatibility with the latest version of WordPress, avoiding deprecated functions or features."
src/content-helper/excerpt-generator/provider.ts (1)

Pattern **/*.{js,ts,tsx,jsx}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the code to ensure it is well-structured and adheres to best practices.
  • Verify compliance with WordPress coding standards.
  • Ensure the code is well-documented.
  • Check for security vulnerabilities and confirm the code is secure.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate JSDoc comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Confirm every JSDoc comment includes a @SInCE tag indicating the next version of the plugin to include the code.
  • Guarantee compatibility with the latest version of WordPress, avoiding deprecated functions or features."
src/rest-api/class-rest-api-controller.php (1)

Pattern **/*.{html,php}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the HTML and PHP code to ensure it is well-structured and adheres to best practices.
  • Ensure the code follows WordPress coding standards and is well-documented.
  • Confirm the code is secure and free from vulnerabilities.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Verify code compatibility with the latest version of WordPress, avoiding deprecated functions or features."
tests/Integration/RestAPI/RestAPIControllerTest.php (1)

Pattern **/*.{html,php}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the HTML and PHP code to ensure it is well-structured and adheres to best practices.
  • Ensure the code follows WordPress coding standards and is well-documented.
  • Confirm the code is secure and free from vulnerabilities.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Verify code compatibility with the latest version of WordPress, avoiding deprecated functions or features."
src/content-helper/editor-sidebar/title-suggestions/provider.ts (1)

Pattern **/*.{js,ts,tsx,jsx}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the code to ensure it is well-structured and adheres to best practices.
  • Verify compliance with WordPress coding standards.
  • Ensure the code is well-documented.
  • Check for security vulnerabilities and confirm the code is secure.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate JSDoc comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Confirm every JSDoc comment includes a @SInCE tag indicating the next version of the plugin to include the code.
  • Guarantee compatibility with the latest version of WordPress, avoiding deprecated functions or features."
src/rest-api/content-helper/trait-content-helper-feature.php (1)

Pattern **/*.{html,php}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the HTML and PHP code to ensure it is well-structured and adheres to best practices.
  • Ensure the code follows WordPress coding standards and is well-documented.
  • Confirm the code is secure and free from vulnerabilities.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Verify code compatibility with the latest version of WordPress, avoiding deprecated functions or features."
src/rest-api/class-base-api-controller.php (1)

Pattern **/*.{html,php}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the HTML and PHP code to ensure it is well-structured and adheres to best practices.
  • Ensure the code follows WordPress coding standards and is well-documented.
  • Confirm the code is secure and free from vulnerabilities.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Verify code compatibility with the latest version of WordPress, avoiding deprecated functions or features."
tests/Integration/RestAPI/ContentHelper/ContentHelperControllerTest.php (1)

Pattern **/*.{html,php}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the HTML and PHP code to ensure it is well-structured and adheres to best practices.
  • Ensure the code follows WordPress coding standards and is well-documented.
  • Confirm the code is secure and free from vulnerabilities.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Verify code compatibility with the latest version of WordPress, avoiding deprecated functions or features."
src/rest-api/content-helper/class-endpoint-excerpt-generator.php (1)

Pattern **/*.{html,php}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the HTML and PHP code to ensure it is well-structured and adheres to best practices.
  • Ensure the code follows WordPress coding standards and is well-documented.
  • Confirm the code is secure and free from vulnerabilities.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Verify code compatibility with the latest version of WordPress, avoiding deprecated functions or features."
src/rest-api/content-helper/class-endpoint-title-suggestions.php (1)

Pattern **/*.{html,php}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the HTML and PHP code to ensure it is well-structured and adheres to best practices.
  • Ensure the code follows WordPress coding standards and is well-documented.
  • Confirm the code is secure and free from vulnerabilities.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Verify code compatibility with the latest version of WordPress, avoiding deprecated functions or features."
tests/Integration/ContentHelper/ContentHelperDashboardWidgetTest.php (1)

Pattern **/*.{html,php}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the HTML and PHP code to ensure it is well-structured and adheres to best practices.
  • Ensure the code follows WordPress coding standards and is well-documented.
  • Confirm the code is secure and free from vulnerabilities.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Verify code compatibility with the latest version of WordPress, avoiding deprecated functions or features."
tests/Integration/RestAPI/BaseAPIControllerTest.php (1)

Pattern **/*.{html,php}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the HTML and PHP code to ensure it is well-structured and adheres to best practices.
  • Ensure the code follows WordPress coding standards and is well-documented.
  • Confirm the code is secure and free from vulnerabilities.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Verify code compatibility with the latest version of WordPress, avoiding deprecated functions or features."
src/content-helper/editor-sidebar/smart-linking/provider.ts (1)

Pattern **/*.{js,ts,tsx,jsx}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the code to ensure it is well-structured and adheres to best practices.
  • Verify compliance with WordPress coding standards.
  • Ensure the code is well-documented.
  • Check for security vulnerabilities and confirm the code is secure.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate JSDoc comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Confirm every JSDoc comment includes a @SInCE tag indicating the next version of the plugin to include the code.
  • Guarantee compatibility with the latest version of WordPress, avoiding deprecated functions or features."
tests/Integration/RestAPI/ContentHelper/EndpointExcerptGeneratorTest.php (1)

Pattern **/*.{html,php}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the HTML and PHP code to ensure it is well-structured and adheres to best practices.
  • Ensure the code follows WordPress coding standards and is well-documented.
  • Confirm the code is secure and free from vulnerabilities.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Verify code compatibility with the latest version of WordPress, avoiding deprecated functions or features."
tests/Integration/RestAPI/ContentHelper/EndpointTitleSuggestionsTest.php (1)

Pattern **/*.{html,php}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the HTML and PHP code to ensure it is well-structured and adheres to best practices.
  • Ensure the code follows WordPress coding standards and is well-documented.
  • Confirm the code is secure and free from vulnerabilities.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Verify code compatibility with the latest version of WordPress, avoiding deprecated functions or features."
wp-parsely.php (1)

Pattern **/*.{html,php}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the HTML and PHP code to ensure it is well-structured and adheres to best practices.
  • Ensure the code follows WordPress coding standards and is well-documented.
  • Confirm the code is secure and free from vulnerabilities.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Verify code compatibility with the latest version of WordPress, avoiding deprecated functions or features."
src/rest-api/class-base-endpoint.php (1)

Pattern **/*.{html,php}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the HTML and PHP code to ensure it is well-structured and adheres to best practices.
  • Ensure the code follows WordPress coding standards and is well-documented.
  • Confirm the code is secure and free from vulnerabilities.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Verify code compatibility with the latest version of WordPress, avoiding deprecated functions or features."
tests/Integration/RestAPI/ContentHelper/ContentHelperFeatureTestTrait.php (1)

Pattern **/*.{html,php}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the HTML and PHP code to ensure it is well-structured and adheres to best practices.
  • Ensure the code follows WordPress coding standards and is well-documented.
  • Confirm the code is secure and free from vulnerabilities.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Verify code compatibility with the latest version of WordPress, avoiding deprecated functions or features."
tests/Integration/RestAPI/ContentHelper/EndpointSmartLinkingTest.php (1)

Pattern **/*.{html,php}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the HTML and PHP code to ensure it is well-structured and adheres to best practices.
  • Ensure the code follows WordPress coding standards and is well-documented.
  • Confirm the code is secure and free from vulnerabilities.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Verify code compatibility with the latest version of WordPress, avoiding deprecated functions or features."
src/Models/class-smart-link.php (1)

Pattern **/*.{html,php}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the HTML and PHP code to ensure it is well-structured and adheres to best practices.
  • Ensure the code follows WordPress coding standards and is well-documented.
  • Confirm the code is secure and free from vulnerabilities.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Verify code compatibility with the latest version of WordPress, avoiding deprecated functions or features."
tests/Integration/RestAPI/BaseEndpointTest.php (1)

Pattern **/*.{html,php}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the HTML and PHP code to ensure it is well-structured and adheres to best practices.
  • Ensure the code follows WordPress coding standards and is well-documented.
  • Confirm the code is secure and free from vulnerabilities.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Verify code compatibility with the latest version of WordPress, avoiding deprecated functions or features."
tests/Integration/ScriptsTest.php (1)

Pattern **/*.{html,php}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the HTML and PHP code to ensure it is well-structured and adheres to best practices.
  • Ensure the code follows WordPress coding standards and is well-documented.
  • Confirm the code is secure and free from vulnerabilities.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Verify code compatibility with the latest version of WordPress, avoiding deprecated functions or features."
src/rest-api/content-helper/class-endpoint-smart-linking.php (1)

Pattern **/*.{html,php}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the HTML and PHP code to ensure it is well-structured and adheres to best practices.
  • Ensure the code follows WordPress coding standards and is well-documented.
  • Confirm the code is secure and free from vulnerabilities.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Verify code compatibility with the latest version of WordPress, avoiding deprecated functions or features."
tests/Integration/TestCase.php (1)

Pattern **/*.{html,php}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the HTML and PHP code to ensure it is well-structured and adheres to best practices.
  • Ensure the code follows WordPress coding standards and is well-documented.
  • Confirm the code is secure and free from vulnerabilities.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Verify code compatibility with the latest version of WordPress, avoiding deprecated functions or features."
tests/Integration/ContentHelper/ContentHelperFeatureTest.php (1)

Pattern **/*.{html,php}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the HTML and PHP code to ensure it is well-structured and adheres to best practices.
  • Ensure the code follows WordPress coding standards and is well-documented.
  • Confirm the code is secure and free from vulnerabilities.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Verify code compatibility with the latest version of WordPress, avoiding deprecated functions or features."
tests/Integration/ContentHelper/ContentHelperPostListStatsTest.php (1)

Pattern **/*.{html,php}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the HTML and PHP code to ensure it is well-structured and adheres to best practices.
  • Ensure the code follows WordPress coding standards and is well-documented.
  • Confirm the code is secure and free from vulnerabilities.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Verify code compatibility with the latest version of WordPress, avoiding deprecated functions or features."
Additional comments not posted (73)
src/rest-api/content-helper/class-content-helper-controller.php (4)

9-9: Verify compatibility with strict types.

The declare(strict_types=1); directive ensures strict type checking. Verify that all function calls and type declarations in this file and related files are compatible with strict types.


22-22: Ensure adherence to WordPress coding standards.

The class name Content_Helper_Controller is clear and descriptive. Ensure it follows the naming conventions and standards for WordPress.


31-31: Use of class constants for configuration.

The use of a class constant for ROUTE_PREFIX is a good practice for maintainability and readability.


38-46: Ensure endpoints are registered securely.

The init method registers endpoints. Ensure that the endpoints are registered with proper authentication and authorization checks.

src/content-helper/excerpt-generator/provider.ts (2)

Line range hint 1-3: Ensure WordPress dependencies are up-to-date.

The import of addQueryArgs from @wordpress/url should be verified for compatibility with the latest WordPress version.


54-54: Update endpoint path for API versioning.

The endpoint path has been updated to /wp-parsely/v2/content-helper/excerpt-generator/generate. Ensure that this change is reflected in all related documentation and that the old endpoint is deprecated properly.

src/rest-api/class-rest-api-controller.php (4)

9-9: Verify compatibility with strict types.

The declare(strict_types=1); directive ensures strict type checking. Verify that all function calls and type declarations in this file and related files are compatible with strict types.


22-22: Ensure adherence to WordPress coding standards.

The class name REST_API_Controller is clear and descriptive. Ensure it follows the naming conventions and standards for WordPress.


30-30: Use of class constants for configuration.

The use of class constants for NAMESPACE and VERSION is a good practice for maintainability and readability.


55-67: Ensure controllers are initialized securely.

The init method initializes controllers. Ensure that each controller is initialized with proper authentication and authorization checks.

src/rest-api/content-helper/trait-content-helper-feature.php (3)

33-33: Abstract method definition is appropriate.

The abstract method get_pch_feature_name is correctly defined, ensuring implementing classes provide the feature name.


42-47: User permission check is correctly implemented.

The method is_pch_feature_enabled_for_user correctly checks user permissions using the Permissions class.


60-68: Endpoint availability check is correctly implemented.

The method is_available_to_current_user correctly overrides the parent method and checks user permissions, returning an error if access is denied.

src/rest-api/class-base-api-controller.php (2)

9-9: Use of declare(strict_types=1).

The use of declare(strict_types=1); is a good practice as it enforces strict type checking, reducing potential type-related errors.


23-75: Ensure proper exception handling.

The constructor throws an UnexpectedValueException if the namespace is not defined. Ensure that this exception is properly handled in the classes extending this base class.

tests/Integration/RestAPI/ContentHelper/ContentHelperControllerTest.php (3)

44-49: Ensure mock setup is comprehensive.

The setUp method creates a mock for Parsely. Ensure that the mock is configured to simulate any necessary behavior for the tests.


59-61: Test namespace and version setup.

The test correctly verifies the namespace and version setup. Ensure that any changes to the namespace or version are reflected in this test.


70-72: Test route prefix setup.

The test correctly verifies the route prefix setup. Ensure that any changes to the route prefix are reflected in this test.

src/rest-api/content-helper/class-endpoint-excerpt-generator.php (3)

10-10: Use of declare(strict_types=1).

The use of declare(strict_types=1); is a good practice as it enforces strict type checking, reducing potential type-related errors.


55-58: Ensure Suggest_Brief_API initialization is correct.

The constructor initializes Suggest_Brief_API. Ensure that this API is correctly configured and handles all necessary dependencies.


79-113: Ensure route registration follows WordPress standards.

The route registration method follows WordPress standards. Ensure that all registered routes are tested and documented.

src/rest-api/content-helper/class-endpoint-title-suggestions.php (5)

27-27: Ensure the use of traits is justified.

The class uses the Content_Helper_Feature trait. Ensure that the trait is necessary and provides functionality that is relevant to this class.


48-51: Verify the initialization of $suggest_headline_api.

Ensure that the Suggest_Headline_API class is correctly initialized and that $this->parsely is a valid dependency.


60-62: LGTM!

The method correctly returns the feature name.


72-106: Verify route registration and parameter definitions.

Ensure that the route /title-suggestions/generate is correctly registered and that the parameters are properly defined with appropriate descriptions and types.


119-159: Verify error handling and response structure.

Ensure that the error handling is robust and that the response structure adheres to WordPress standards.

tests/Integration/ContentHelper/ContentHelperDashboardWidgetTest.php (3)

48-48: Verify static method call to set_current_user_to.

Ensure that the method set_current_user_to is intended to be used statically and that this change does not affect the test logic.


Line range hint 88-88: LGTM!

The test correctly verifies that assets are not enqueued for users without sufficient capabilities.


Line range hint 116-116: LGTM!

The test correctly verifies that assets are not enqueued when the active page is not the WordPress Dashboard.

tests/Integration/RestAPI/BaseAPIControllerTest.php (6)

41-74: LGTM!

The setup method correctly initializes the test environment.


83-98: LGTM!

The test correctly verifies that the constructor throws an exception if the NAMESPACE is not defined.


108-110: LGTM!

The test correctly verifies the get_namespace method.


120-136: LGTM!

The test correctly verifies the prefix_route method.


148-157: LGTM!

The test correctly verifies the registration of a single endpoint.


169-180: LGTM!

The test correctly verifies the registration of multiple endpoints.

src/content-helper/editor-sidebar/smart-linking/provider.ts (6)

143-148: Verify JSDoc accuracy and approve changes.

The JSDoc comment accurately describes the method parameters and return type. The changes to the API path and data structure key are correct.


168-168: Verify JSDoc accuracy and approve changes.

The JSDoc comment accurately describes the method parameters and return type. The change to the API path is correct.


198-198: Verify JSDoc accuracy and approve changes.

The JSDoc comment accurately describes the method parameters and return type. The change to the API path and error handling are correct.


233-233: Verify JSDoc accuracy and approve changes.

The JSDoc comment accurately describes the method parameters and return type. The change to the API path and filtering logic are correct.


252-252: Verify JSDoc accuracy and approve changes.

The JSDoc comment accurately describes the method parameters and return type. The change to the API path is correct.


268-268: Verify JSDoc accuracy and approve changes.

The JSDoc comment accurately describes the method parameters and return type. The change to the API path is correct.

tests/Integration/RestAPI/ContentHelper/EndpointExcerptGeneratorTest.php (3)

96-108: Verify comment accuracy and approve changes.

The comments accurately describe the purpose of the test and the methods it covers. The test implementation is correct.


124-154: Verify comment accuracy and approve changes.

The comments accurately describe the purpose of the test and the methods it covers. The test implementation is correct.


170-192: Verify comment accuracy and approve changes.

The comments accurately describe the purpose of the test and the methods it covers. The test implementation is correct.

tests/Integration/RestAPI/ContentHelper/EndpointTitleSuggestionsTest.php (3)

95-105: Verify comment accuracy and approve changes.

The comments accurately describe the purpose of the test and the methods it covers. The test implementation is correct.


123-153: Verify comment accuracy and approve changes.

The comments accurately describe the purpose of the test and the methods it covers. The test implementation is correct.


171-193: Verify comment accuracy and approve changes.

The comments accurately describe the purpose of the test and the methods it covers. The test implementation is correct.

wp-parsely.php (2)

124-124: Verify the impact of removed endpoints.

Ensure that the removal of content suggestion endpoints does not negatively impact the functionality.

Run the following script to verify the impact of the removed endpoints:


122-124: Verify the REST API Controller initialization.

Ensure that the REST_API_Controller is correctly initialized and integrated with the existing system.

Run the following script to verify the initialization and usage of the REST_API_Controller class:

Verification successful

REST API Controller Initialization Verified

The REST_API_Controller class is properly defined and used across the codebase, including in wp-parsely.php. Its integration appears correct and follows best practices.

  • Defined in: src/rest-api/class-rest-api-controller.php
  • Used in: wp-parsely.php, src/rest-api/content-helper/class-content-helper-controller.php, and various test files.
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the initialization and usage of the `REST_API_Controller` class.

# Test: Search for the class definition and its usage. Expect: Proper initialization and usage.
ast-grep --lang php --pattern $'class REST_API_Controller {
  $$$
}'

Length of output: 69


Script:

#!/bin/bash
# Search for any occurrences of REST_API_Controller in the codebase to verify its presence.
rg 'REST_API_Controller'

Length of output: 1435

src/rest-api/class-base-endpoint.php (6)

27-35: Ensure the ENDPOINT constant is defined in child classes.

The ENDPOINT constant must be defined in child classes to avoid runtime exceptions.

Ensure that all child classes define the ENDPOINT constant.


73-83: Verify constructor implementation.

Ensure that the constructor correctly initializes the api_controller and parsely properties.

Check if the Base_API_Controller passed to the constructor is properly instantiated.


85-114: Verify init method implementation.

Ensure that the init method correctly registers routes and checks if the endpoint is enabled.

Check if the wp_parsely_api_{endpoint}_endpoint_enabled filter is correctly applied.


126-161: Verify register_rest_route method implementation.

Ensure that the register_rest_route method correctly registers a REST route with the specified parameters.

Check if the route registration follows WordPress REST API standards.


206-231: Verify is_available_to_current_user method implementation.

Ensure that the is_available_to_current_user method correctly checks user permissions and API key validation.

Check if the method correctly handles user capabilities and API key validation.


278-304: Verify validate_apikey_and_secret method implementation.

Ensure that the validate_apikey_and_secret method correctly validates the API key and secret.

Check if the method handles both the site ID and API secret validation properly.

tests/Integration/RestAPI/ContentHelper/ContentHelperFeatureTestTrait.php (4)

55-97: Verify test methods for endpoint availability.

Ensure that the test methods correctly check endpoint availability based on user roles and feature settings.

Check if the test methods cover all scenarios for user roles and feature settings.


228-248: Verify set_feature_options method implementation.

Ensure that the set_feature_options method correctly sets feature options for testing.

Check if the method correctly applies the options to the feature being tested.


250-278: Verify disable_feature and enable_feature methods implementation.

Ensure that the disable_feature and enable_feature methods correctly toggle feature settings for testing.

Check if the methods correctly modify the feature settings as intended.


280-292: Verify abstract methods for setting current user roles.

Ensure that the abstract methods are correctly defined and intended for use in test classes.

Check if the abstract methods are implemented in the test classes that use this trait.

tests/Integration/RestAPI/ContentHelper/EndpointSmartLinkingTest.php (1)

185-206: Verify Error Handling Logic in Failure Test.

The test_generate_smart_links_returns_error_on_failure method simulates an API failure. Ensure that the error handling logic is comprehensive and covers all potential failure scenarios.

src/Models/class-smart-link.php (1)

130-132: Conditional Check for Empty Hyperlink Reference.

The addition of the conditional check for the $href parameter in the constructor is a good practice to prevent setting an empty hyperlink reference.

tests/Integration/RestAPI/BaseEndpointTest.php (2)

84-96: Ensure Constructor Initialization is Necessary.

The constructor initializes Parsely and API_Controller instances. Ensure that this initialization is necessary and not duplicated elsewhere in the test setup.


182-199: Verify Exception Handling Logic in Init Test.

The test_init_throws_exception_without_endpoint method checks for exceptions. Ensure that the exception handling logic is comprehensive and covers all potential scenarios.

tests/Integration/ScriptsTest.php (2)

350-350: LGTM: Static method usage is appropriate.

The change to use self::create_test_user aligns with the static method declaration in TestCase.


393-394: LGTM: Static method usage is appropriate.

The change to use self::create_test_user aligns with the static method declaration in TestCase.

src/rest-api/content-helper/class-endpoint-smart-linking.php (4)

29-60: LGTM: Class renaming and namespace update enhance clarity.

The renaming of the class and the update of its namespace improve the organization and clarity of the code. The introduction of the $suggest_linked_reference_api property enhances dependency management.


Line range hint 74-211: LGTM: Method renaming and route updates improve functionality.

The renaming of the method to register_routes aligns with RESTful practices. The addition and update of routes enhance the API's functionality.


224-265: LGTM: Method repurposing enhances functionality.

The repurposing of the method to generate_smart_links enhances its functionality. The response structure is appropriate for the new functionality.


Line range hint 561-607: LGTM: Validation method updates enhance clarity and functionality.

The renaming of validation methods enhances clarity. The new validation method for URL exclusion lists ensures only valid URLs are processed.

tests/Integration/TestCase.php (2)

103-103: LGTM: Static method conversion enhances modularity.

The change to make create_test_user a static method enhances its modularity, allowing it to be called without an instance of the TestCase class.


430-430: LGTM: Static method conversion enhances modularity.

The change to make set_current_user_to a static method enhances its modularity, allowing it to be called without an instance of the TestCase class.

tests/Integration/ContentHelper/ContentHelperFeatureTest.php (1)

64-64: Verify the static method call.

The change from $this->set_current_user_to to self::set_current_user_to suggests that set_current_user_to is now a static method. Ensure that this change aligns with the method's definition and intended usage, and verify that it does not rely on instance-specific data.

Run the following script to confirm the method's definition:

Verification successful

Static Method Call Verified

The change from $this->set_current_user_to to self::set_current_user_to is consistent with the method's definition as a static method. This change is appropriate and does not rely on instance-specific data.

  • set_current_user_to is defined as a static method in tests/Integration/TestCase.php.
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that `set_current_user_to` is defined as a static method.

# Test: Search for the method definition. Expect: Method is defined as static.
rg --type php --pcre2 --context 5 $'function set_current_user_to'

Length of output: 3135

tests/Integration/ContentHelper/ContentHelperPostListStatsTest.php (1)

88-88: Verify the static method call.

The change from $this->set_current_user_to to self::set_current_user_to suggests that set_current_user_to is now a static method. Ensure that this change aligns with the method's definition and intended usage, and verify that it does not rely on instance-specific data.

Run the following script to confirm the method's definition:

Verification successful

The static method call is correct.

The method set_current_user_to is defined as a static method in tests/Integration/TestCase.php. The change from $this->set_current_user_to to self::set_current_user_to aligns with the method's definition and intended usage. No instance-specific data is involved.

  • Location: tests/Integration/TestCase.php line with public static function set_current_user_to
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that `set_current_user_to` is defined as a static method.

# Test: Search for the method definition. Expect: Method is defined as static.
rg --type php --pcre2 --context 5 $'function set_current_user_to'

Length of output: 3135

src/rest-api/class-base-api-controller.php Outdated Show resolved Hide resolved
src/rest-api/class-base-api-controller.php Outdated Show resolved Hide resolved
Comment on lines +107 to +119
public function test_route_is_registered(): void {
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound
do_action( 'plugins_loaded' );
$routes = rest_get_server()->get_routes();

// Check that the smart-linking/generate route is registered.
$expected_route = $this->get_endpoint()->get_full_endpoint( 'generate' );
self::assertArrayHasKey( $expected_route, $routes );

// Check that the route is associated with the POST method.
$route_data = $routes[ $expected_route ];
self::assertArrayHasKey( 'POST', $route_data[0]['methods'] );
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ensure Route Registration Test Covers All Scenarios.

The test_route_is_registered method checks for route registration. Consider adding tests for edge cases, such as when routes are not registered due to missing prerequisites.

Comment on lines +252 to +302
public function test_add_smart_link_returns_valid_response(): void {
// Create mocked post.
$post = WP_UnitTestCase_Base::factory()->post->create_and_get();
self::assertNotWPError( $post );
$post_id = $post->ID; // @phpstan-ignore-line

// Create a mock request.
$request = new WP_REST_Request( 'POST', $this->get_endpoint()->get_full_endpoint( $post_id . '/add' ) );

$smart_link_data = array(
'uid' => md5( 'link1' ),
'href' => 'http://example.com/1',
'title' => 'Example 1',
'text' => 'Example 1',
'offset' => 0,
);
$request->set_param( 'link', $smart_link_data );

// Dispatch the request.
$response = rest_get_server()->dispatch( $request );

// Assert that the response is a WP_REST_Response and contains the correct data.
self::assertInstanceOf( WP_REST_Response::class, $response );

/**
* The response data.
*
* @var array<mixed,array<mixed>> $data The response data.
*/
$data = $response->get_data();

self::assertNotTrue( $response->is_error() );

self::assertArrayHasKey( 'data', $data );
self::assertIsObject( $data['data'] );

$smart_link_attributes = array(
'smart_link_id',
'uid',
'href',
'text',
'offset',
'applied',
'source',
'destination',
);

foreach ( $smart_link_attributes as $attribute ) {
self::assertObjectHasProperty( $attribute, $data['data'] );
}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider Adding More Assertions for Smart Link Attributes.

In the test_add_smart_link_returns_valid_response method, consider adding more assertions to check the values of smart link attributes, ensuring they match expected results.

Comment on lines +349 to +419
public function test_add_multiple_smart_links_returns_valid_response(): void {
// Create mocked post.
$post = WP_UnitTestCase_Base::factory()->post->create_and_get();
self::assertNotWPError( $post );
$post_id = $post->ID; // @phpstan-ignore-line

// Create a mock request.
$request = new WP_REST_Request( 'POST', $this->get_endpoint()->get_full_endpoint( $post_id . '/add-multiple' ) );

$smart_links_data = array(
array(
'uid' => md5( 'link1' ),
'href' => 'http://example.com/1',
'title' => 'Example 1',
'text' => 'Example 1',
'offset' => 0,
),
array(
'uid' => md5( 'link2' ),
'href' => 'http://example.com/2',
'title' => 'Example 2',
'text' => 'Example 2',
'offset' => 0,
),
array(
'uid' => md5( 'link3' ),
'href' => 'http://example.com/3',
'title' => 'Example 3',
'text' => 'Example 3',
'offset' => 0,
),
);
$request->set_param( 'links', $smart_links_data );

// Dispatch the request.
$response = rest_get_server()->dispatch( $request );

// Assert that the response is a WP_REST_Response and contains the correct data.
self::assertInstanceOf( WP_REST_Response::class, $response );

/**
* The response data.
*
* @var array<mixed,array<mixed>> $data The response data.
*/
$data = $response->get_data();

self::assertNotTrue( $response->is_error() );

self::assertArrayHasKey( 'data', $data );
self::assertArrayHasKey( 'added', $data['data'] );
self::assertIsArray( $data['data']['added'] );
self::assertCount( 3, $data['data']['added'] );

$smart_link_attributes = array(
'smart_link_id',
'uid',
'href',
'text',
'offset',
'applied',
'source',
'destination',
);

foreach ( $data['data']['added'] as $smart_link ) {
foreach ( $smart_link_attributes as $attribute ) {
self::assertArrayHasKey( $attribute, $smart_link );
}
}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Enhance Test Coverage for Multiple Smart Links.

The test_add_multiple_smart_links_returns_valid_response method tests adding multiple smart links. Consider adding edge cases, such as handling duplicate links or invalid data.

src/Models/class-smart-link.php Show resolved Hide resolved
tests/Integration/RestAPI/BaseEndpointTest.php Outdated Show resolved Hide resolved
tests/Integration/RestAPI/BaseEndpointTest.php Outdated Show resolved Hide resolved
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 044b48d and 1b45964.

Files selected for processing (2)
  • tests/Integration/RestAPI/BaseAPIControllerTest.php (1 hunks)
  • tests/Integration/RestAPI/BaseEndpointTest.php (1 hunks)
Files skipped from review as they are similar to previous changes (2)
  • tests/Integration/RestAPI/BaseAPIControllerTest.php
  • tests/Integration/RestAPI/BaseEndpointTest.php

Copy link
Collaborator

@acicovic acicovic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

First of all, my initial impression from looking at certain parts and skimming others is that this is great work, so congrats!

As a first step, I've reviewed some simple/short code changes, as well as the *-controller.php files, and left comments for adjustments and conversations as needed.

src/rest-api/class-base-api-controller.php Show resolved Hide resolved
src/rest-api/class-base-api-controller.php Outdated Show resolved Hide resolved
src/rest-api/class-base-api-controller.php Outdated Show resolved Hide resolved
src/rest-api/class-base-api-controller.php Outdated Show resolved Hide resolved
src/rest-api/class-base-api-controller.php Outdated Show resolved Hide resolved
src/rest-api/class-base-endpoint.php Outdated Show resolved Hide resolved
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Outside diff range, codebase verification and nitpick comments (3)
src/rest-api/class-base-endpoint.php (3)

26-34: Ensure Proper Documentation for Properties.

The properties are documented, but ensure the descriptions are clear and provide enough context for other developers.


92-102: Abstract Method Documentation.

The get_endpoint_name method is abstract and should be implemented by child classes. Ensure that child classes provide meaningful endpoint names.


118-126: Abstract Method for Route Registration.

The register_routes method is abstract and should be implemented by child classes. Ensure that child classes correctly register necessary routes.

Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 1b45964 and 90c9808.

Files selected for processing (15)
  • src/rest-api/class-base-api-controller.php (1 hunks)
  • src/rest-api/class-base-endpoint.php (1 hunks)
  • src/rest-api/class-rest-api-controller.php (1 hunks)
  • src/rest-api/content-helper/class-content-helper-controller.php (1 hunks)
  • src/rest-api/content-helper/class-endpoint-excerpt-generator.php (1 hunks)
  • src/rest-api/content-helper/class-endpoint-smart-linking.php (9 hunks)
  • src/rest-api/content-helper/class-endpoint-title-suggestions.php (1 hunks)
  • src/rest-api/content-helper/trait-content-helper-feature.php (1 hunks)
  • tests/Integration/RestAPI/BaseAPIControllerTest.php (1 hunks)
  • tests/Integration/RestAPI/BaseEndpointTest.php (1 hunks)
  • tests/Integration/RestAPI/ContentHelper/ContentHelperControllerTest.php (1 hunks)
  • tests/Integration/RestAPI/ContentHelper/EndpointExcerptGeneratorTest.php (1 hunks)
  • tests/Integration/RestAPI/ContentHelper/EndpointSmartLinkingTest.php (1 hunks)
  • tests/Integration/RestAPI/ContentHelper/EndpointTitleSuggestionsTest.php (1 hunks)
  • tests/Integration/RestAPI/RestAPIControllerTest.php (1 hunks)
Files skipped from review as they are similar to previous changes (13)
  • src/rest-api/class-base-api-controller.php
  • src/rest-api/class-rest-api-controller.php
  • src/rest-api/content-helper/class-content-helper-controller.php
  • src/rest-api/content-helper/class-endpoint-excerpt-generator.php
  • src/rest-api/content-helper/class-endpoint-title-suggestions.php
  • src/rest-api/content-helper/trait-content-helper-feature.php
  • tests/Integration/RestAPI/BaseAPIControllerTest.php
  • tests/Integration/RestAPI/BaseEndpointTest.php
  • tests/Integration/RestAPI/ContentHelper/ContentHelperControllerTest.php
  • tests/Integration/RestAPI/ContentHelper/EndpointExcerptGeneratorTest.php
  • tests/Integration/RestAPI/ContentHelper/EndpointSmartLinkingTest.php
  • tests/Integration/RestAPI/ContentHelper/EndpointTitleSuggestionsTest.php
  • tests/Integration/RestAPI/RestAPIControllerTest.php
Additional context used
Path-based instructions (2)
src/rest-api/class-base-endpoint.php (1)

Pattern **/*.{html,php}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the HTML and PHP code to ensure it is well-structured and adheres to best practices.
  • Ensure the code follows WordPress coding standards and is well-documented.
  • Confirm the code is secure and free from vulnerabilities.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Verify code compatibility with the latest version of WordPress, avoiding deprecated functions or features."
src/rest-api/content-helper/class-endpoint-smart-linking.php (1)

Pattern **/*.{html,php}: "Perform a detailed review of the provided code with following key aspects in mind:

  • Review the HTML and PHP code to ensure it is well-structured and adheres to best practices.
  • Ensure the code follows WordPress coding standards and is well-documented.
  • Confirm the code is secure and free from vulnerabilities.
  • Optimize the code for performance, removing any unnecessary elements.
  • Validate comments for accuracy, currency, and adherence to WordPress coding standards.
  • Ensure each line comment concludes with a period.
  • Verify code compatibility with the latest version of WordPress, avoiding deprecated functions or features."
Additional comments not posted (26)
src/rest-api/class-base-endpoint.php (9)

13-17: Consider Import Optimization.

The imports are well-organized, but ensure they are necessary and used within the file.


54-64: Constructor Documentation and Initialization.

The constructor is well-documented and initializes necessary properties. Ensure that the Base_API_Controller provides the expected methods.


104-116: Default Access Capability.

The method get_default_access_capability returns a default capability. Ensure that this aligns with the intended access control for the endpoints.


165-180: Endpoint Path Construction.

The get_full_endpoint method constructs the full endpoint path. Ensure that the path construction aligns with the expected API structure.


182-191: Registered Routes Retrieval.

The get_registered_routes method returns the registered routes. Ensure that the routes are correctly stored and retrieved.


193-218: User Availability Check Logic.

The is_available_to_current_user method checks user availability for the endpoint. Ensure that the capability filters are correctly applied.


220-257: Capability Filtering Logic.

The apply_capability_filters method applies filters to user capabilities. Ensure that the filters are correctly defined and applied.


259-286: API Key and Secret Validation Logic.

The validate_apikey_and_secret method validates the API key and secret. Ensure that the validation logic aligns with security best practices.


66-89: Verify Endpoint Initialization Logic.

The init method uses a filter to enable or disable the endpoint. Ensure that the filter name is unique and correctly applied.

Run the following script to verify the uniqueness of the filter name:

Verification successful

Filter Name Uniqueness Verified

The filter name used in the init method is unique within the codebase, ensuring that it is correctly applied without conflicts.

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the uniqueness of the filter name used in the `init` method.

# Test: Search for the filter name usage. Expect: Only occurrences of the unique filter name.
rg --type php 'wp_parsely_api_.*_endpoint_enabled'

Length of output: 146

src/rest-api/content-helper/class-endpoint-smart-linking.php (17)

12-17: Namespace and Import Organization.

The namespace and imports are well-organized. Ensure that all imported classes and functions are necessary and used within the file.


29-39: Property Documentation and Initialization.

The $suggest_linked_reference_api property is documented and initialized correctly. Ensure that the Suggest_Linked_Reference_API class provides the expected methods.


42-51: Constructor and Dependency Injection.

The constructor uses dependency injection for the Content_Helper_Controller. Ensure that the controller provides the necessary methods and properties.


54-62: Endpoint Name Definition.

The get_endpoint_name method returns the endpoint name. Ensure that the name aligns with the intended API structure.


64-72: Feature Name Definition.

The get_pch_feature_name method returns the feature name. Ensure that the name aligns with the intended feature structure.


Line range hint 76-213: Route Registration Logic.

The register_routes method registers multiple routes for smart linking. Ensure that all routes are correctly defined and registered.


217-267: Smart Link Generation Logic.

The generate_smart_links method processes requests to generate smart links. Ensure that the logic aligns with the intended functionality and handles errors appropriately.


Line range hint 271-307: Smart Link Retrieval Logic.

The get_smart_links method retrieves smart links for a post. Ensure that the retrieval logic aligns with the intended functionality and handles errors appropriately.


Line range hint 311-355: Smart Link Addition Logic.

The add_smart_link method adds a smart link to a post. Ensure that the addition logic aligns with the intended functionality and handles errors appropriately.


Line range hint 359-419: Multiple Smart Link Addition Logic.

The add_multiple_smart_links method adds multiple smart links to a post. Ensure that the addition logic aligns with the intended functionality and handles errors appropriately.


Line range hint 423-485: Smart Link Update Logic.

The set_smart_links method updates smart links for a post. Ensure that the update logic aligns with the intended functionality and handles errors appropriately.


497-549: URL to Post Type Conversion Logic.

The url_to_post_type method converts a URL to a post type. Ensure that the conversion logic aligns with the intended functionality and handles errors appropriately.


Line range hint 563-581: Post ID Validation Logic.

The validate_post_id method validates the post ID parameter. Ensure that the validation logic aligns with the intended functionality and handles errors appropriately.


583-609: URL Exclusion List Validation Logic.

The validate_url_exclusion_list method validates the URL exclusion list parameter. Ensure that the validation logic aligns with the intended functionality and handles errors appropriately.


Line range hint 623-677: Smart Link Parameter Validation Logic.

The validate_smart_link_params method validates smart link parameters. Ensure that the validation logic aligns with the intended functionality and handles errors appropriately.


Line range hint 682-696: Multiple Smart Link Parameter Validation Logic.

The validate_multiple_smart_links method validates multiple smart link parameters. Ensure that the validation logic aligns with the intended functionality and handles errors appropriately.


Line range hint 700-710: Smart Link Serialization Logic.

The serialize_smart_links method serializes an array of smart links. Ensure that the serialization logic aligns with the intended functionality and handles errors appropriately.

src/rest-api/class-base-endpoint.php Outdated Show resolved Hide resolved
Copy link
Collaborator

@acicovic acicovic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Flagging a couple of suggestions that didn't make it in the latest commits.

src/rest-api/class-base-endpoint.php Outdated Show resolved Hide resolved
src/rest-api/class-base-api-controller.php Outdated Show resolved Hide resolved
Copy link
Collaborator

@acicovic acicovic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've done my first review of functionality code (all code barring tests) and left some comments.

src/rest-api/class-base-endpoint.php Outdated Show resolved Hide resolved
src/rest-api/class-base-endpoint.php Outdated Show resolved Hide resolved
src/rest-api/class-base-endpoint.php Outdated Show resolved Hide resolved
src/rest-api/class-base-endpoint.php Outdated Show resolved Hide resolved
src/rest-api/class-base-endpoint.php Outdated Show resolved Hide resolved
@vaurdan vaurdan requested a review from acicovic August 26, 2024 10:45
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 90c9808 and 78395a7.

Files ignored due to path filters (4)
  • build/content-helper/editor-sidebar.asset.php is excluded by !build/**
  • build/content-helper/editor-sidebar.js is excluded by !build/**
  • build/content-helper/excerpt-generator.asset.php is excluded by !build/**
  • build/content-helper/excerpt-generator.js is excluded by !build/**
Files selected for processing (13)
  • src/content-helper/editor-sidebar/smart-linking/provider.ts (6 hunks)
  • src/content-helper/editor-sidebar/title-suggestions/provider.ts (1 hunks)
  • src/content-helper/excerpt-generator/provider.ts (1 hunks)
  • src/rest-api/class-base-api-controller.php (1 hunks)
  • src/rest-api/class-base-endpoint.php (1 hunks)
  • src/rest-api/content-helper/class-endpoint-excerpt-generator.php (1 hunks)
  • src/rest-api/content-helper/class-endpoint-smart-linking.php (9 hunks)
  • src/rest-api/content-helper/class-endpoint-title-suggestions.php (1 hunks)
  • src/rest-api/content-helper/trait-content-helper-feature.php (1 hunks)
  • tests/Integration/RestAPI/BaseEndpointTest.php (1 hunks)
  • tests/Integration/RestAPI/ContentHelper/EndpointExcerptGeneratorTest.php (1 hunks)
  • tests/Integration/RestAPI/ContentHelper/EndpointSmartLinkingTest.php (1 hunks)
  • tests/Integration/RestAPI/ContentHelper/EndpointTitleSuggestionsTest.php (1 hunks)
Files skipped from review as they are similar to previous changes (13)
  • src/content-helper/editor-sidebar/smart-linking/provider.ts
  • src/content-helper/editor-sidebar/title-suggestions/provider.ts
  • src/content-helper/excerpt-generator/provider.ts
  • src/rest-api/class-base-api-controller.php
  • src/rest-api/class-base-endpoint.php
  • src/rest-api/content-helper/class-endpoint-excerpt-generator.php
  • src/rest-api/content-helper/class-endpoint-smart-linking.php
  • src/rest-api/content-helper/class-endpoint-title-suggestions.php
  • src/rest-api/content-helper/trait-content-helper-feature.php
  • tests/Integration/RestAPI/BaseEndpointTest.php
  • tests/Integration/RestAPI/ContentHelper/EndpointExcerptGeneratorTest.php
  • tests/Integration/RestAPI/ContentHelper/EndpointSmartLinkingTest.php
  • tests/Integration/RestAPI/ContentHelper/EndpointTitleSuggestionsTest.php

Copy link
Collaborator

@acicovic acicovic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for all this work, and thank you for taking the time to add integration tests.

I'm concluding my full code review, leaving minor comments.

@acicovic
Copy link
Collaborator

Another note: I think we should create a temporary branch for this series of PRs, and merge all of the work there before it finds its way to develop.

@vaurdan vaurdan changed the base branch from develop to refactor/internal-api August 29, 2024 12:15
@vaurdan vaurdan requested a review from acicovic August 29, 2024 13:05
Copy link
Collaborator

@acicovic acicovic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vaurdan, there seem to be some open comments to discuss or look into, but this looks good to me to merge for now. We can address any possible work stemming from the remaining comments as a separate PR.

@acicovic acicovic merged commit 313851e into refactor/internal-api Sep 5, 2024
33 checks passed
@acicovic acicovic deleted the refactor/internal-api-content-helper branch September 5, 2024 13:08
@acicovic acicovic modified the milestones: Summer 2024, 3.17.0 Sep 5, 2024
@vaurdan
Copy link
Contributor Author

vaurdan commented Sep 27, 2024

I think I have addressed all the pending items on this PR.

@acicovic if you have any further suggestions, feel free to add, otherwise let's consider this closed.

vaurdan added a commit that referenced this pull request Sep 27, 2024
vaurdan added a commit that referenced this pull request Oct 2, 2024
* Apply suggestions from #2731

* Apply suggestions from #2735

* Add dynamic settings endpoint calls
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants