Compare commits

..

No commits in common. "master" and "dsl" have entirely different histories.
master ... dsl

7 changed files with 14 additions and 193 deletions

View File

@ -9,11 +9,6 @@ This allows you to create post, category, and options configurations to test spe
Clone the repository into your `wp-content/plugins` directory. Activate it like a normal plugin. Clone the repository into your `wp-content/plugins` directory. Activate it like a normal plugin.
### From WordPress Plugins
Download the plugin from the WordPress plugins repository: http://wordpress.org/extend/plugins/post-fixtures/. Activate it like any other plugin.
**Post Fixtures** requires PHP 5 or above.
## Using ## Using
**Post Fixtures** places a new menu item under *Tools* called *Post Fixtures*. **Post Fixtures** places a new menu item under *Tools* called *Post Fixtures*.

View File

@ -1,139 +0,0 @@
=== Post Fixtures ===
Contributors: johncoswell
Donate link: http://www.coswellproductions.com/wordpress/wordpress-plugins
Tags: admin, developer, database
Requires at least: 2.8
Tested up to: 2.9.1
Stable tag: 0.2.3
Post Fixtures let you quickly tear down and set up test environments within your development WordPress environment.
== Description ==
Post Fixtures let you quickly tear down and set up test environments within your development WordPress environment.
This allows you to create post, category, and options configurations to test specific issues and features of your themes and plugins.
**Post Fixtures** places a new menu item under *Tools* called *Post Fixtures*.
When you visit the page, you'll see a large textarea in which to copy and paste your JSON fixture data.
Submitting the form with valid JSON data will cause your posts and categories to be deleted & overwritten,
and any options provided to be overwritten or deleted.
As of the current release on GitHub, the following WordPress features are supported:
* Posts
* Most post data found in the `posts` table
* Post metadata with serialization
* Categories
* Tags
* Blog options with serialization and deletion
== Installation ==
Activate it like any other plugin. **Post Fixtures** requires PHP 5 or above.
== Frequently Asked Questions ==
= What are the data formats accepted? =
**JSON**
<pre>
{
"posts": [
{
"post_date": "2010-01-01 9:00am",
"post_title": "This is a sample post",
"post_content": "This is the post's content",
"categories": [ "Top Level 1/Sub Category 1", "Top Level 2/Sub Category 2" ],
"metadata": {
"field-1": "value 1",
"field-2": {
"a_complex": "field",
"with": [
"lots", "of", "nested", "datatypes"
]
}
},
"tags": "tag 1,tag 2"
},
{
"post_date": "2010-01-01 10:00am",
"post_title": "This is the second sample post",
"post_content": "This is the second post's content",
"categories": [ "Top Level 1/Sub Category 2", "Top Level 2/Sub Category 2" ]
}
],
"options": {
"an-option-to-set": "simple-string",
"an-option-to-serialize": {
"this": "is a hash"
},
"an-option-to-delete": false
}
}
</pre>
**PHP**
<pre>
// build an object immediately, and get the new post's ID
$post_id = $builder->post('This is a sample post')
->date('2010-01-01 9:00am')
->content("This is the post's content")
->categories("Top Level 1/Sub Category 1,Top Level 2/Sub Category 2")
->metadata('field-1', 'value-1')
->metadata('field-2', array(
'a_complex' => 'field',
'with' => array(
'lots', 'of', 'nested', 'datatypes'
)
))
->tags('tag 1,tag 2')->build();
// build and object at the end, if order doesn't matter
$builder->post('This is the second sample post')
->date('2010-01-01 10:00am')
->content("This is the second post's content")
->categories("Top Level 1/Sub Category 2,Top Level 2/Sub Category 2")->defer();
// convenience wrapper around options setting
$builder->option('an-option-to-set', 'simple-string')
->option('an-option-to-serialize', array('this' => 'is a hash'))
->option('an-option-to-delete', false);
</pre>
== Changelog ==
= 0.2.3 =
* Clear cache after running fixtures. Needed for persistent caches.
= 0.2.2 =
* Bugfix for immediate build generation and sub-category addition when adding posts.
= 0.2.1 =
* Bugfix for multiple generated nested categories.
= 0.2 =
* Initial release on WordPress Plugins site.
== Upgrade Notice ==
= 0.2.3 =
* Clear cache after running fixtures. Needed for persistent caches.
= 0.2.2 =
* Bugfix for immediate build generation and sub-category addition when adding posts.
= 0.2.1 =
* Bugfix for multiple generated nested categories.
= 0.2 =
* Initial release.

View File

@ -84,9 +84,7 @@ class FixtureBuilder {
function build() { function build() {
if (!empty($this->current_object)) { if (!empty($this->current_object)) {
$this->ensure_type($this->current_object['type']); $this->ensure_type($this->current_object['type']);
$result = $this->{"build_{$this->current_object['type']}"}($this->current_object); return $this->{"build_{$this->current_object['type']}"}($this->current_object);
unset($this->current_object);
return $result;
} }
} }
@ -131,12 +129,10 @@ class FixtureBuilder {
$category_ids = array(); $category_ids = array();
if (isset($obj['post']['categories'])) { if (isset($obj['post']['categories'])) {
$category_ids_by_slug = array(); $category_ids_by_slug = array();
$category_ids = array();
foreach ($obj['post']['categories'] as $category) { foreach ($obj['post']['categories'] as $category) {
$created_categories = PostFixtures::create_category($category); $category_ids_by_slug = array_merge($category_ids_by_slug, PostFixtures::create_category($category));
$category_ids[] = array_pop(array_values($created_categories));
$category_ids_by_slug = array_merge($category_ids_by_slug, $created_categories);
} }
$category_ids = array_values($category_ids_by_slug);
PostFixtures::set_post_categories($post_id, $category_ids); PostFixtures::set_post_categories($post_id, $category_ids);
} }

View File

@ -5,7 +5,6 @@
*/ */
class PostFixtures { class PostFixtures {
var $messages; var $messages;
var $created_categories = array();
/** /**
* Initialize the plugin. * Initialize the plugin.
@ -55,7 +54,6 @@ class PostFixtures {
} else { } else {
$this->handle_json($info['data']); $this->handle_json($info['data']);
} }
wp_cache_flush();
} }
} }
@ -264,15 +262,7 @@ class PostFixtures {
$joined_nodes = array(); $joined_nodes = array();
foreach ($nodes as $node) { foreach ($nodes as $node) {
$joined_nodes[] = $node; $joined_nodes[] = $node;
$key = implode('/', $joined_nodes); $parent = $category_ids_by_slug[implode('/', $joined_nodes)] = wp_insert_category(array('cat_name' => $node, 'category_nicename' => $node, 'category_parent' => $parent));
if (isset($this->created_categories[$key])) {
$parent = $this->created_categories[$key];
} else {
$parent = wp_insert_category(array('cat_name' => $node, 'category_nicename' => $node, 'category_parent' => $parent));
$this->created_categories[$key] = $parent;
}
$category_ids_by_slug[$key] = $parent;
} }
return $category_ids_by_slug; return $category_ids_by_slug;
} }

View File

@ -3,11 +3,11 @@
Plugin Name: Post Fixtures Plugin Name: Post Fixtures
Plugin URI: http://www.coswellproductions.com/wordpress/wordpress-plugins/ Plugin URI: http://www.coswellproductions.com/wordpress/wordpress-plugins/
Description: Tear down and build up well crafted posts, categories, meta data, and other WordPress data in a test environment. Description: Tear down and build up well crafted posts, categories, meta data, and other WordPress data in a test environment.
Version: 0.2.2 Version: 0.1
Author: John Bintz Author: John Bintz
Author URI: http://www.coswellproductions.com/wordpress/ Author URI: http://www.coswellproductions.com/wordpress/
Copyright 2009-2010 John Bintz (email : john@coswellproductions.com) Copyright 2009 John Bintz (email : john@coswellproductions.com)
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by

View File

@ -45,7 +45,7 @@ class FixtureBuilderTest extends PHPUnit_Framework_TestCase {
array( array(
array('post', array('Post title')), array('post', array('Post title')),
array('date', array('2010-01-01')), array('date', array('2010-01-01')),
array('categories', array('test,test2/test3')), array('categories', array('test,test2')),
array('metadata', array('key', array('metadata' => 'value'))), array('metadata', array('key', array('metadata' => 'value'))),
array('post', array('Post title 2')), array('post', array('Post title 2')),
array('date', array('2010-01-02')), array('date', array('2010-01-02')),
@ -56,7 +56,7 @@ class FixtureBuilderTest extends PHPUnit_Framework_TestCase {
'post_title' => 'Post title', 'post_title' => 'Post title',
'post_type' => 'post', 'post_type' => 'post',
'post_date' => '2010-01-01', 'post_date' => '2010-01-01',
'categories' => array('test', 'test2/test3'), 'categories' => array('test', 'test2'),
'metadata' => array('key' => array('metadata' => 'value')) 'metadata' => array('key' => array('metadata' => 'value'))
), ),
array( array(
@ -132,7 +132,7 @@ class FixtureBuilderTest extends PHPUnit_Framework_TestCase {
), ),
array( array(
'categories', 'categories',
array('test/test2') array('test')
), ),
array( array(
'metadata', 'metadata',
@ -163,8 +163,7 @@ class FixtureBuilderTest extends PHPUnit_Framework_TestCase {
) )
), ),
'categories' => array( 'categories' => array(
1 => 'test', 1 => 'test'
2 => 'test2'
), ),
'tags' => array( 'tags' => array(
1 => array('tag1', 'tag2') 1 => array('tag1', 'tag2')
@ -173,9 +172,6 @@ class FixtureBuilderTest extends PHPUnit_Framework_TestCase {
1 => array( 1 => array(
'test' => 'test2' 'test' => 'test2'
) )
),
'post_categories' => array(
1 => array(2)
) )
) )
), ),
@ -212,15 +208,8 @@ class FixtureBuilderTest extends PHPUnit_Framework_TestCase {
} }
} }
break; break;
case 'post_categories':
foreach ($info as $post_id => $expected_categories) {
$this->assertEquals($expected_categories, wp_get_post_categories($post_id));
}
break;
} }
} }
$this->assertTrue(!isset($builder->current_object));
} }
function testBuildEmpty() { function testBuildEmpty() {
@ -246,20 +235,10 @@ class FixtureBuilderTest extends PHPUnit_Framework_TestCase {
$fb->finalize(); $fb->finalize();
} }
function providerTestOption() { function testOption() {
return array(
array('test', 'value', 'value'),
array('test2', false, false)
);
}
/**
* @dataProvider providerTestOption
*/
function testOption($key, $value, $expected_value) {
$fb = new FixtureBuilder(); $fb = new FixtureBuilder();
$fb->option($key, $value); $fb->option('test', 'value');
$this->assertEquals($expected_value, get_option($key)); $this->assertEquals('value', get_option('test'));
} }
} }

View File

@ -138,7 +138,7 @@ class PostFixturesTest extends PHPUnit_Framework_TestCase {
array(false, array()), array(false, array()),
array(array(), array()), array(array(), array()),
array(array('test'), array('test' => 1)), array(array('test'), array('test' => 1)),
array(array('test/test2', 'test/test3'), array('test' => 1, 'test/test2' => 2, 'test/test3' => 3)), array(array('test/test2'), array('test' => 1, 'test/test2' => 2)),
); );
} }