Feature: WordPress code scaffolding @theme Scenario: Scaffold a child theme Given a WP install Given I run `wp theme path` And save STDOUT as {THEME_DIR} When I run `wp scaffold child-theme zombieland --parent_theme=umbrella --theme_name=Zombieland --author=Tallahassee --author_uri=https://wp-cli.org --theme_uri=http://www.zombieland.com` Then the {THEME_DIR}/zombieland/style.css file should exist And the {THEME_DIR}/zombieland/functions.php file should exist And STDOUT should be: """ Success: Created '{THEME_DIR}/zombieland'. """ And the {THEME_DIR}/zombieland/.editorconfig file should exist Scenario: Scaffold a child theme with only --parent_theme parameter Given a WP install Given I run `wp theme path` And save STDOUT as {THEME_DIR} When I run `wp scaffold child-theme hello-world --parent_theme=simple-life` Then STDOUT should not be empty And the {THEME_DIR}/hello-world/style.css file should exist And the {THEME_DIR}/hello-world/style.css file should contain: """ Theme Name: Hello-world """ Scenario: Scaffold a child theme with non existing parent theme and also activate parameter Given a WP install When I try `wp scaffold child-theme hello-world --parent_theme=just-test --activate --quiet` Then STDERR should contain: """ Error: The parent theme is missing. Please install the "just-test" parent theme. """ And the return code should be 1 Scenario: Scaffold a child theme with non existing parent theme and also network activate parameter Given a WP install When I try `wp scaffold child-theme hello-world --parent_theme=just-test --enable-network --quiet` Then STDERR should contain: """ Error: This is not a multisite install """ And the return code should be 1 @require-wp-4.6 Scenario: Scaffold a child theme and network enable it Given a WP multisite install When I run `wp scaffold child-theme zombieland --parent_theme=umbrella --theme_name=Zombieland --author=Tallahassee --author_uri=https://wp-cli.org --theme_uri=http://www.zombieland.com --enable-network` Then STDOUT should contain: """ Success: Network enabled the 'Zombieland' theme. """ Scenario: Scaffold a child theme with invalid slug Given a WP install When I try `wp scaffold child-theme . --parent_theme=simple-life` Then STDERR should contain: """ Error: Invalid theme slug specified. """ And the return code should be 1 When I try `wp scaffold child-theme ../ --parent_theme=simple-life` Then STDERR should contain: """ Error: Invalid theme slug specified. """ And the return code should be 1 @tax @cpt Scenario: Scaffold a Custom Taxonomy and Custom Post Type and write it to active theme Given a WP install Given I run `wp eval 'echo STYLESHEETPATH;'` And save STDOUT as {STYLESHEETPATH} When I run `wp scaffold taxonomy zombie-speed --theme` Then the {STYLESHEETPATH}/taxonomies/zombie-speed.php file should exist When I run `wp scaffold post-type zombie --theme` Then the {STYLESHEETPATH}/post-types/zombie.php file should exist And STDOUT should be: """ Success: Created '{STYLESHEETPATH}/post-types/zombie.php'. """ When I run `wp scaffold post-type zombie` Then STDOUT should contain: """ 'rest_base' => 'zombie' """ And STDOUT should contain: """ add_filter( 'post_updated_messages' """ When I run `wp scaffold post-type zombie --raw` Then STDOUT should not contain: """ add_filter( 'post_updated_messages' """ # Test for all flags but --label, --theme, --plugin and --raw @tax Scenario: Scaffold a Custom Taxonomy and attach it to CPTs including one that is prefixed and has a text domain Given a WP install When I run `wp scaffold taxonomy zombie-speed --post_types="prefix-zombie,wraith" --textdomain=zombieland` Then STDOUT should contain: """ __( 'Zombie speeds' """ And STDOUT should contain: """ [ 'prefix-zombie', 'wraith' ] """ And STDOUT should contain: """ __( 'Zombie speeds', 'zombieland' """ @tax Scenario: Scaffold a Custom Taxonomy with label "Speed" Given a WP install When I run `wp scaffold taxonomy zombie-speed --label="Speed"` Then STDOUT should contain: """ __( 'Speeds' """ And STDOUT should contain: """ _x( 'Speed', 'taxonomy general name', """ # Test for all flags but --label, --theme, --plugin and --raw @cpt Scenario: Scaffold a Custom Post Type Given a WP install When I run `wp scaffold post-type zombie --textdomain=zombieland` Then STDOUT should contain: """ __( 'Zombies' """ And STDOUT should contain: """ __( 'Zombies', 'zombieland' """ And STDOUT should contain: """ 'menu_icon' => 'dashicons-admin-post', """ Scenario: CPT slug is too long Given a WP install When I try `wp scaffold post-type slugiswaytoolonginfact` Then STDERR should be: """ Error: Post type slugs cannot exceed 20 characters in length. """ And the return code should be 1 @cpt Scenario: Scaffold a Custom Post Type with label Given a WP install When I run `wp scaffold post-type zombie --label="Brain eater"` Then STDOUT should contain: """ __( 'Brain eaters' """ Scenario: Scaffold a Custom Post Type with dashicon Given a WP install When I run `wp scaffold post-type zombie --dashicon="art"` Then STDOUT should contain: """ 'menu_icon' => 'dashicons-art', """ Scenario: Scaffold a Custom Post Type with dashicon in the case of passing "dashicon-info" Given a WP install When I run `wp scaffold post-type zombie --dashicon="dashicon-info"` Then STDOUT should contain: """ 'menu_icon' => 'dashicons-info', """ Scenario: Scaffold a Custom Post Type with dashicon in the case of passing "dashicons-info" Given a WP install When I run `wp scaffold post-type zombie --dashicon="dashicons-info"` Then STDOUT should contain: """ 'menu_icon' => 'dashicons-info', """ Scenario: Scaffold a plugin Given a WP install Given I run `wp plugin path` And save STDOUT as {PLUGIN_DIR} Given I run `wp core version` And save STDOUT as {WP_VERSION} When I run `wp scaffold plugin hello-world --plugin_author="Hello World Author"` Then STDOUT should not be empty And the {PLUGIN_DIR}/hello-world/.gitignore file should exist And the {PLUGIN_DIR}/hello-world/.editorconfig file should exist And the {PLUGIN_DIR}/hello-world/hello-world.php file should exist And the {PLUGIN_DIR}/hello-world/readme.txt file should exist And the {PLUGIN_DIR}/hello-world/package.json file should exist And the {PLUGIN_DIR}/hello-world/Gruntfile.js file should exist And the {PLUGIN_DIR}/hello-world/.gitignore file should contain: """ .DS_Store phpcs.xml phpunit.xml Thumbs.db wp-cli.local.yml node_modules/ """ And the {PLUGIN_DIR}/hello-world/.distignore file should contain: """ .git .gitignore """ And the {PLUGIN_DIR}/hello-world/.phpcs.xml.dist file should contain: """ """ And the {PLUGIN_DIR}/hello-world/.phpcs.xml.dist file should contain: """ """ And the {PLUGIN_DIR}/hello-world/hello-world.php file should contain: """ * Plugin Name: Hello World """ And the {PLUGIN_DIR}/hello-world/hello-world.php file should contain: """ * Version: 0.1.0 """ And the {PLUGIN_DIR}/hello-world/hello-world.php file should contain: """ * @package Hello_World """ And the {PLUGIN_DIR}/hello-world/readme.txt file should contain: """ Stable tag: 0.1.0 """ And the {PLUGIN_DIR}/hello-world/readme.txt file should contain: """ Tested up to: {WP_VERSION} """ When I run `cat {PLUGIN_DIR}/hello-world/package.json` Then STDOUT should be JSON containing: """ {"author":"Hello World Author"} """ And STDOUT should be JSON containing: """ {"version":"0.1.0"} """ Scenario: Scaffold a plugin by prompting Given a WP install And a session file: """ hello-world Hello World An awesome introductory plugin for WordPress WP-CLI https://wp-cli.org https://wp-cli.org n circle Y n n """ When I run `wp scaffold plugin --prompt < session` Then STDOUT should not be empty And the wp-content/plugins/hello-world/hello-world.php file should exist And the wp-content/plugins/hello-world/readme.txt file should exist And the wp-content/plugins/hello-world/tests directory should exist When I run `wp plugin status hello-world` Then STDOUT should contain: """ Status: Active """ And STDOUT should contain: """ Name: Hello World """ And STDOUT should contain: """ Description: An awesome introductory plugin for WordPress """ Scenario: Scaffold a plugin and activate it Given a WP install When I run `wp scaffold plugin hello-world --activate` Then STDOUT should contain: """ Plugin 'hello-world' activated. """ @require-wp-4.6 Scenario: Scaffold a plugin and network activate it Given a WP multisite install When I run `wp scaffold plugin hello-world --activate-network` Then STDOUT should contain: """ Plugin 'hello-world' network activated. """ Scenario: Scaffold a plugin with invalid slug Given a WP install When I try `wp scaffold plugin .` Then STDERR should contain: """ Error: Invalid plugin slug specified. """ And the return code should be 1 When I try `wp scaffold plugin ../` Then STDERR should contain: """ Error: Invalid plugin slug specified. """ And the return code should be 1 @require-php-5.6 @require-wp-4.6 Scenario: Scaffold starter code for a theme Given a WP install Given I run `wp theme path` And save STDOUT as {THEME_DIR} # Allow for warnings to be generated due to https://github.com/wp-cli/scaffold-command/issues/181 When I try `wp scaffold _s starter-theme` Then STDOUT should contain: """ Success: Created theme 'Starter-theme'. """ And the {THEME_DIR}/starter-theme/style.css file should exist And the {THEME_DIR}/starter-theme/.editorconfig file should exist @require-php-5.6 @require-wp-4.6 Scenario: Scaffold starter code for a theme with sass Given a WP install Given I run `wp theme path` And save STDOUT as {THEME_DIR} # Allow for warnings to be generated due to https://github.com/wp-cli/scaffold-command/issues/181 When I try `wp scaffold _s starter-theme --sassify` Then STDOUT should contain: """ Success: Created theme 'Starter-theme'. """ And the {THEME_DIR}/starter-theme/sass directory should exist @require-php-5.6 @require-wp-4.6 Scenario: Scaffold starter code for a WooCommerce theme Given a WP install Given I run `wp theme path` And save STDOUT as {THEME_DIR} # Allow for warnings to be generated due to https://github.com/wp-cli/scaffold-command/issues/181 When I try `wp scaffold _s starter-theme --woocommerce` Then STDOUT should contain: """ Success: Created theme 'Starter-theme'. """ And the {THEME_DIR}/starter-theme/woocommerce.css file should exist And the {THEME_DIR}/starter-theme/inc/woocommerce.php file should exist @require-php-5.6 @require-wp-4.6 @require-mysql Scenario: Scaffold starter code for a theme and activate it Given a WP install # Allow for warnings to be generated due to https://github.com/wp-cli/scaffold-command/issues/181 When I try `wp scaffold _s starter-theme --activate` Then STDOUT should contain: """ Success: Switched to 'Starter-theme' theme. """ Scenario: Scaffold starter code for a theme with invalid slug Given a WP install When I try `wp scaffold _s .` Then STDERR should contain: """ Error: Invalid theme slug specified. """ And the return code should be 1 When I try `wp scaffold _s ../` Then STDERR should contain: """ Error: Invalid theme slug specified. """ And the return code should be 1 When I try `wp scaffold _s 1themestartingwithnumber` Then STDERR should contain: """ Error: Invalid theme slug specified. Theme slugs can only contain letters, numbers, underscores and hyphens, and can only start with a letter or underscore. """ And the return code should be 1 Scenario: Scaffold plugin and tests for non-standard plugin directory Given a WP install When I run `wp scaffold plugin custom-plugin --dir=wp-content/mu-plugins --skip-tests` Then STDOUT should not be empty And the wp-content/mu-plugins/custom-plugin/custom-plugin.php file should exist And the wp-content/mu-plugins/custom-plugin/tests directory should not exist When I try `wp scaffold plugin-tests --dir=wp-content/mu-plugins/incorrect-custom-plugin` Then STDERR should contain: """ Error: Invalid plugin directory specified. """ And the return code should be 1 When I run `wp scaffold plugin-tests --dir=wp-content/mu-plugins/custom-plugin` Then STDOUT should contain: """ Success: Created test files. """ And the wp-content/mu-plugins/custom-plugin/tests directory should exist And the wp-content/mu-plugins/custom-plugin/tests/bootstrap.php file should exist And the wp-content/mu-plugins/custom-plugin/tests/bootstrap.php file should contain: """ require dirname( dirname( __FILE__ ) ) . '/custom-plugin.php'; """ Scenario: Scaffold tests for a plugin with a different slug than plugin directory Given a WP install And a wp-content/mu-plugins/custom-plugin2/custom-plugin-slug.php file: """