first import
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Tests for FeedsJSONPathParser.inc.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Test single feeds.
|
||||
*/
|
||||
class FeedsJSONPathParserTestCase extends FeedsWebTestCase {
|
||||
|
||||
/**
|
||||
* Describe this test.
|
||||
*/
|
||||
public static function getInfo() {
|
||||
return array(
|
||||
'name' => t('JSONPath Parser'),
|
||||
'description' => t('Regression tests for Feeds JSONPath parser.'),
|
||||
'group' => t('Feeds JSONPath Parser'),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set up test.
|
||||
*/
|
||||
public function setUp() {
|
||||
parent::setUp(array('feeds_jsonpath_parser'));
|
||||
// Detect if Feeds menu structure has changed. This will take a while to be
|
||||
// released, but since I run dev it needs to work.
|
||||
$feeds_menu = feeds_ui_menu();
|
||||
if (isset($feeds_menu['admin/structure/feeds/list'])) {
|
||||
$this->feeds_base = 'admin/structure/feeds/edit';
|
||||
}
|
||||
else {
|
||||
$this->feeds_base = 'admin/structure/feeds';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Run tests.
|
||||
*/
|
||||
public function test() {
|
||||
$this->createImporterConfiguration('JSONPath', 'jsonpath');
|
||||
|
||||
$this->setPlugin('jsonpath', 'FeedsJSONPathParser');
|
||||
$this->addMappings('jsonpath',
|
||||
array(
|
||||
array(
|
||||
'source' => 'jsonpath_parser:0',
|
||||
'target' => 'title',
|
||||
'unique' => FALSE,
|
||||
),
|
||||
array(
|
||||
'source' => 'jsonpath_parser:1',
|
||||
'target' => 'url',
|
||||
'unique' => TRUE,
|
||||
),
|
||||
)
|
||||
);
|
||||
// Set importer default settings.
|
||||
$edit = array(
|
||||
'jsonpath[context]' => '$.store.book[*]',
|
||||
'jsonpath[sources][jsonpath_parser:0]' => 'author',
|
||||
'jsonpath[sources][jsonpath_parser:1]' => 'price',
|
||||
'jsonpath[allow_override]' => TRUE,
|
||||
);
|
||||
$edit_url = $this->feeds_base . '/jsonpath/settings/FeedsJSONPathParser';
|
||||
$node_save_text = 'Basic page Testing JSONPath Parser has been updated.';
|
||||
|
||||
$this->postAndCheck($edit_url, $edit, 'Save', 'Your changes have been saved.');
|
||||
|
||||
// Test import.
|
||||
$path = $GLOBALS['base_url'] . '/' . drupal_get_path('module', 'feeds_jsonpath_parser') . '/tests/feeds_jsonpath_parser/';
|
||||
$nid = $this->createFeedNode('jsonpath', $path . 'test.json', 'Testing JSONPath Parser');
|
||||
$this->assertText('Created 4 nodes');
|
||||
|
||||
// Import again, this verifies url field was mapped correctly.
|
||||
$this->drupalPost('node/' . $nid . '/import', array(), 'Import');
|
||||
$this->assertText('There are no new nodes');
|
||||
|
||||
// Assert accuracy of aggregated content. I find humor in using our own
|
||||
// issue queue to run tests against.
|
||||
$this->drupalGet('node');
|
||||
$this->assertText('Nigel Rees');
|
||||
$this->assertText('Evelyn Waugh');
|
||||
$this->assertText('Herman Melville');
|
||||
$this->assertText('J. R. R. Tolkien');
|
||||
|
||||
// Test that overriding default settings works.
|
||||
$edit = array(
|
||||
'feeds[FeedsJSONPathParser][jsonpath][context]' => '/foo',
|
||||
'feeds[FeedsJSONPathParser][jsonpath][sources][jsonpath_parser:0]' => 'bar',
|
||||
'feeds[FeedsJSONPathParser][jsonpath][sources][jsonpath_parser:1]' => 'baz',
|
||||
);
|
||||
$this->postAndCheck('node/' . $nid . '/edit', $edit, 'Save', $node_save_text);
|
||||
|
||||
// Assert the we don't create an empty node when JSONPath values don't return anything.
|
||||
// That happened at one point.
|
||||
$this->drupalPost('node/' . $nid . '/import', array(), 'Import');
|
||||
$this->assertText('There are no new nodes');
|
||||
|
||||
// Put the values back so we can test inheritance if the form was changed
|
||||
// and then changed back.
|
||||
$edit = array(
|
||||
'feeds[FeedsJSONPathParser][jsonpath][context]' => '$.store.book[*]',
|
||||
'feeds[FeedsJSONPathParser][jsonpath][sources][jsonpath_parser:0]' => 'author',
|
||||
'feeds[FeedsJSONPathParser][jsonpath][sources][jsonpath_parser:1]' => 'price',
|
||||
);
|
||||
$this->postAndCheck('node/' . $nid . '/edit', $edit, 'Save', $node_save_text);
|
||||
|
||||
// Change importer defaults.
|
||||
$edit = array(
|
||||
'jsonpath[context]' => '//tr',
|
||||
'jsonpath[sources][jsonpath_parser:0]' => 'booya',
|
||||
'jsonpath[sources][jsonpath_parser:1]' => 'boyz',
|
||||
);
|
||||
$this->drupalPost($edit_url, $edit, 'Save');
|
||||
$this->postAndCheck($edit_url, $edit, 'Save', 'Your changes have been saved.');
|
||||
|
||||
// Make sure the changes propigated.
|
||||
$this->drupalGet('node/' . $nid . '/edit');
|
||||
$this->assertFieldByName('feeds[FeedsJSONPathParser][jsonpath][context]', '//tr');
|
||||
$this->assertFieldByName('feeds[FeedsJSONPathParser][jsonpath][sources][jsonpath_parser:0]', 'booya');
|
||||
$this->assertFieldByName('feeds[FeedsJSONPathParser][jsonpath][sources][jsonpath_parser:1]', 'boyz');
|
||||
|
||||
// Turn off allow_override.
|
||||
$edit = array(
|
||||
'jsonpath[allow_override]' => FALSE,
|
||||
);
|
||||
$this->postAndCheck($edit_url, $edit, 'Save', 'Your changes have been saved.');
|
||||
$this->drupalGet('node/' . $nid . '/edit');
|
||||
$this->assertNoText('JSONPath Parser Settings');
|
||||
}
|
||||
|
||||
function postAndCheck($url, $edit, $button, $saved_text) {
|
||||
$this->drupalPost($url, $edit, $button);
|
||||
$this->assertText($saved_text);
|
||||
$this->drupalGet($url);
|
||||
foreach ($edit as $key => $value) {
|
||||
$this->assertFieldByName($key, $value);
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,31 @@
|
||||
{ "store": {
|
||||
"book": [
|
||||
{ "category": "reference",
|
||||
"author": "Nigel Rees",
|
||||
"title": "Sayings of the Century",
|
||||
"price": 8.95
|
||||
},
|
||||
{ "category": "fiction",
|
||||
"author": "Evelyn Waugh",
|
||||
"title": "Sword of Honour",
|
||||
"price": 12.99
|
||||
},
|
||||
{ "category": "fiction",
|
||||
"author": "Herman Melville",
|
||||
"title": "Moby Dick",
|
||||
"isbn": "0-553-21311-3",
|
||||
"price": 8.99
|
||||
},
|
||||
{ "category": "fiction",
|
||||
"author": "J. R. R. Tolkien",
|
||||
"title": "The Lord of the Rings",
|
||||
"isbn": "0-395-19395-8",
|
||||
"price": 22.99
|
||||
}
|
||||
],
|
||||
"bicycle": {
|
||||
"color": "red",
|
||||
"price": 19.95
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user