HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //usr/local/wp/vendor/wp-cli/embed-command/features/cache.feature
Feature: Manage oEmbed cache.

  Background:
    Given a WP install

  Scenario: Clear oEmbed cache for an empty post
    When I run `wp post create --post_title="Foo Bar" --porcelain`
    Then STDOUT should be a number
    And save STDOUT as {POST_ID}

    When I try `wp embed cache clear {POST_ID}`
    Then STDERR should be:
      """
      Error: No cache to clear!
      """

  Scenario: Clear oEmbed cache for a post
    When I run `wp post-meta add 1 _oembed_foo 'bar'`
    Then STDOUT should not be empty

    When I run `wp post-meta get 1 _oembed_foo`
    Then STDOUT should be:
      """
      bar
      """

    When I run `wp embed cache clear 1`
    Then STDOUT should be:
      """
      Success: Cleared oEmbed cache.
      """

  Scenario: Trigger and clear oEmbed cache for a post
    When I run `wp post create --post_title=Foo --post_type=post --post_status=publish --post_content="[embed]https://www.youtube.com/watch?v=dQw4w9WgXcQ[/embed]" --porcelain`
    Then STDOUT should be a number
    And save STDOUT as {POST_ID}

    When I run `wp embed cache trigger {POST_ID}`
    Then STDOUT should be:
      """
      Success: Caching triggered!
      """

    When I run `wp embed cache clear {POST_ID}`
    Then STDOUT should be:
      """
      Success: Cleared oEmbed cache.
      """

  Scenario: Trigger oEmbed cache for a non-existent post
    When I try `wp embed cache trigger 123456`
    Then STDERR should contain:
      """
      Post id '123456' not found.
      """
    And the return code should be 0

  Scenario: Trigger oEmbed cache for a hidden post
    When I run `wp post create --post_title="Foo Bar" --post_type=revision --porcelain`
    Then STDOUT should be a number
    And save STDOUT as {POST_ID}

    When I try `wp embed cache trigger {POST_ID}`
    Then STDERR should contain:
      """
      Cannot cache oEmbed results for 'revision' post type
      """
    And the return code should be 0

  @require-wp-4.9
  Scenario: Find oEmbed cache post ID for a non-existent key
    When I try `wp embed cache find foo`
    Then STDERR should be:
      """
      Error: No cache post ID found!
      """
    And the return code should be 1

  @require-wp-4.9
  Scenario: Find oEmbed cache post ID for an existing key
    # Add a non-post embed, default attributes.
    When I run `wp eval 'echo $GLOBALS["wp_embed"]->run_shortcode( "[embed]https://www.youtube.com/watch?v=dQw4w9WgXcQ[/embed]" );'`
    Then STDOUT should contain:
      """
      dQw4w9WgXcQ
      """

    When I run `wp embed cache find 'https://www.youtube.com/watch?v=dQw4w9WgXcQ'`
    Then STDOUT should be a number

    # Add a non-post embed with width attribute.
    When I run `wp eval 'echo $GLOBALS["wp_embed"]->run_shortcode( "[embed width=400]https://www.youtube.com/watch?v=yPYZpwSpKmA[/embed]" );'`
    Then STDOUT should contain:
      """
      yPYZpwSpKmA
      """

    # Fail if width not given.
    When I try `wp embed cache find 'https://www.youtube.com/watch?v=yPYZpwSpKmA'`
    Then STDERR should be:
      """
      Error: No cache post ID found!
      """
    And the return code should be 1

    # Succeed if correct width given.
    When I run `wp embed cache find 'https://www.youtube.com/watch?v=yPYZpwSpKmA' --width=400`
    Then STDOUT should be a number

    # Fail if incorrect width given.
    When I try `wp embed cache find 'https://www.youtube.com/watch?v=yPYZpwSpKmA' --width=500`
    Then STDERR should be:
      """
      Error: No cache post ID found!
      """
    And the return code should be 1

    # Add a non-post embed with discover=1 attribute.
    When I run `wp eval 'echo $GLOBALS["wp_embed"]->run_shortcode( "[embed discover=1]https://www.youtube.com/watch?v=yBwD4iYcWC4[/embed]" );'`
    Then STDOUT should contain:
      """
      yBwD4iYcWC4
      """

    # Succeed if no options given.
    When I run `wp embed cache find 'https://www.youtube.com/watch?v=yBwD4iYcWC4'`
    Then STDOUT should be a number

    # Fail if incorrect discover given.
    When I try `wp embed cache find 'https://www.youtube.com/watch?v=yBwD4iYcWC4' --no-discover`
    Then STDERR should be:
      """
      Error: No cache post ID found!
      """
    And the return code should be 1

    # Succeed if correct discover given.
    When I run `wp embed cache find 'https://www.youtube.com/watch?v=yBwD4iYcWC4' --discover`
    Then STDOUT should be a number

    # Add a non-post embed with width and discover attributes.
    When I run `wp eval 'echo $GLOBALS["wp_embed"]->run_shortcode( "[embed width=450 discover=0]https://www.youtube.com/watch?v=eYuUAGXN0KM[/embed]" );'`
    Then STDOUT should contain:
      """
      eYuUAGXN0KM
      """

    # Fail if no options given.
    When I try `wp embed cache find 'https://www.youtube.com/watch?v=eYuUAGXN0KM'`
    Then STDERR should be:
      """
      Error: No cache post ID found!
      """
    And the return code should be 1

    # Succeed if correct width given.
    When I run `wp embed cache find 'https://www.youtube.com/watch?v=eYuUAGXN0KM' --width=450`
    Then STDOUT should be a number

    # Succeed if correct width and discover given.
    When I run `wp embed cache find 'https://www.youtube.com/watch?v=eYuUAGXN0KM' --width=450 --no-discover`
    Then STDOUT should be a number

    # Fail if correct width and incorrect discover given.
    When I try `wp embed cache find 'https://www.youtube.com/watch?v=eYuUAGXN0KM' --width=450 --discover`
    Then STDERR should be:
      """
      Error: No cache post ID found!
      """
    And the return code should be 1

    # Add using embed fetch. Temporarily disabled as requires embed fetch changes.
    #When I run `wp embed fetch https://example.org/embed?1234`
    #Then STDOUT should be:
      #"""
     #<a href="https://example.org/embed?1234">https://example.org/embed?1234</a>
      #"""

    #When I run `wp embed cache find https://example.org/embed?1234`
    #Then STDOUT should be a number

    # Dummy data with default width/height.
    When I run `wp eval 'echo md5( "foo" . serialize( wp_embed_defaults() ) );'`
    Then STDOUT should not be empty
    And save STDOUT as {CACHE_KEY}

    When I run `wp post create --post_title=Foo --post_name={CACHE_KEY} --post_type=oembed_cache --post_status=publish --porcelain`
    Then STDOUT should be a number
    And save STDOUT as {POST_ID}

    When I run `wp embed cache find foo`
    Then STDOUT should be:
      """
     {POST_ID}
      """

    # Dummy data with given width/height. Specify width/height as strings as that's what shortcode attributes will be passed as.
    When I run `wp eval 'echo md5( "foo" . serialize( array( "width" => "600", "height" => "400" ) ) );'`
    Then STDOUT should not be empty
    And save STDOUT as {CACHE_KEY}

    When I run `wp post create --post_title=Foo --post_name={CACHE_KEY} --post_type=oembed_cache --post_status=publish --porcelain`
    Then STDOUT should be a number
    And save STDOUT as {POST_ID}

    When I run `wp embed cache find foo --width=600 --height=400`
    Then STDOUT should be:
      """
     {POST_ID}
      """