123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428 |
- /* global wp, JSON */
- ( function( QUnit ) {
- QUnit.module( 'wpapi' );
- QUnit.test( 'API Loaded correctly', function( assert ) {
- var done = assert.async();
- assert.expect( 2 );
- assert.ok( wp.api.loadPromise );
- wp.api.loadPromise.done( function() {
- assert.ok( wp.api.models );
- done();
- } );
- } );
- // The list of collections we should check.
- var collectionClassNames = [
- 'Categories',
- 'Comments',
- 'Media',
- 'Pages',
- 'Posts',
- 'Statuses',
- 'Tags',
- 'Taxonomies',
- 'Types',
- 'Users'
- ];
- // Collections that should get helpers tested.
- var collectionHelperTests = [
- {
- 'collectionType': 'Posts',
- 'returnsModelType': 'post',
- 'supportsMethods': {
- 'getDate': 'getDate',
- 'getRevisions': 'getRevisions',
- 'getTags': 'getTags',
- 'getCategories': 'getCategories',
- 'getAuthorUser': 'getAuthorUser',
- 'getFeaturedMedia': 'getFeaturedMedia'
- /*'getMeta': 'getMeta', currently not supported */
- }
- },
- {
- 'collectionType': 'Pages',
- 'returnsModelType': 'page',
- 'supportsMethods': {
- 'getDate': 'getDate',
- 'getRevisions': 'getRevisions',
- 'getAuthorUser': 'getAuthorUser',
- 'getFeaturedMedia': 'getFeaturedMedia'
- }
- }
- ];
- _.each( collectionClassNames, function( className ) {
- QUnit.test( 'Testing ' + className + ' collection.', function( assert ) {
- var done = assert.async();
- wp.api.loadPromise.done( function() {
- var theCollection = new wp.api.collections[ className ]();
- assert.ok(
- theCollection,
- 'We can instantiate wp.api.collections.' + className
- );
- theCollection.fetch().done( function() {
- assert.equal(
- 1,
- theCollection.state.currentPage,
- 'We should be on page 1 of the collection in ' + className
- );
- // Should this collection have helper methods?
- var collectionHelperTest = _.findWhere( collectionHelperTests, { 'collectionType': className } );
- // If we found a match, run the tests against it.
- if ( ! _.isUndefined( collectionHelperTest ) ) {
- // Test the first returned model.
- var firstModel = theCollection.at( 0 );
- // Is the model the right type?
- assert.equal(
- collectionHelperTest.returnsModelType,
- firstModel.get( 'type' ),
- 'The wp.api.collections.' + className + ' is of type ' + collectionHelperTest.returnsModelType
- );
- // Does the model have all of the expected supported methods?
- _.each( collectionHelperTest.supportsMethods, function( method ) {
- assert.equal(
- 'function',
- typeof firstModel[ method ],
- className + '.' + method + ' is a function.'
- );
- } );
- }
- // Trigger Qunit async completion.
- done();
- } );
- } );
- } );
- } );
- // The list of models we should check.
- var modelsWithIdsClassNames = [
- 'Category',
- 'Media',
- 'Page',
- 'Post',
- 'Tag',
- 'User',
- 'UsersMe',
- 'Settings'
- ];
- _.each( modelsWithIdsClassNames, function( className ) {
- QUnit.test( 'Checking ' + className + ' model.', function( assert ) {
- var done = assert.async();
- assert.expect( 2 );
- wp.api.loadPromise.done( function() {
- var theModel = new wp.api.models[ className ]();
- assert.ok( theModel, 'We can instantiate wp.api.models.' + className );
- theModel.fetch().done( function( ) {
- var theModel2 = new wp.api.models[ className ]();
- theModel2.set( 'id', theModel.attributes.id );
- theModel2.fetch().done( function() {
- // We were able to retrieve the model.
- assert.equal(
- theModel.attributes.id,
- theModel2.get( 'id' ) ,
- 'We should be able to get a ' + className
- );
- // Trigger Qunit async completion.
- done();
- } );
- } );
- } );
- } );
- } );
- var modelsWithIndexes = [
- 'Taxonomy',
- 'Status',
- 'Type'
- ];
- _.each( modelsWithIndexes, function( className ) {
- QUnit.test( 'Testing ' + className + ' model.', function( assert ) {
- var done = assert.async();
- assert.expect( 2 );
- wp.api.loadPromise.done( function( ) {
- var theModel = new wp.api.models[ className ]();
- assert.ok( theModel, 'We can instantiate wp.api.models.' + className );
- theModel.fetch().done( function( ) {
- var theModel2 = new wp.api.models[ className ]();
- if ( ! _.isUndefined( theModel.attributes[0] ) ) {
- theModel2.set( 'id', theModel.attributes[0].id );
- }
- theModel2.fetch().done( function() {
- // We were able to retrieve the model.
- assert.notEqual(
- 0,
- _.keys( theModel2.attributes ).length ,
- 'We should be able to get a ' + className
- );
- // Trigger Qunit async completion.
- done();
- } );
- } );
- } );
- } );
- } );
- // Find models by route.
- var modelsToFetchByRoute = [
- 'Category',
- 'Comment',
- 'Media',
- 'Page',
- 'PageRevision',
- 'Post',
- 'PostRevision',
- 'Status',
- 'Tag',
- 'Taxonomy',
- 'Type',
- 'User'
- ];
- _.each( modelsToFetchByRoute, function( model ) {
- QUnit.test( 'Test fetching ' + model + ' by route.', function( assert ) {
- var done = assert.async();
- assert.expect( 1 );
- wp.api.loadPromise.done( function() {
- var theModel = wp.api.models[ model ];
- var route = theModel.prototype.route.index;
- assert.equal(
- wp.api.getModelByRoute( route ),
- theModel,
- 'wp.api.models.' + model + ' found at route ' + route
- );
- // Trigger Qunit async completion.
- done();
- } );
- } );
- } );
- // Find collections by route.
- var collectionsToFetchByRoute = [
- 'Categories',
- 'Comments',
- 'Media',
- 'PageRevisions',
- 'Pages',
- 'PostRevisions',
- 'Posts',
- 'Statuses',
- 'Tags',
- 'Taxonomies',
- 'Types',
- 'Users'
- ];
- _.each( collectionsToFetchByRoute, function( collection ) {
- QUnit.test( 'Test fetching ' + collection + ' by route.', function( assert ) {
- var done = assert.async();
- assert.expect( 1 );
- wp.api.loadPromise.done( function() {
- var theCollection = wp.api.collections[ collection ];
- var route = theCollection.prototype.route.index;
- assert.equal(
- wp.api.getCollectionByRoute( route ),
- theCollection,
- 'wp.api.collections.' + collection + ' found at ' + route
- );
- // Trigger Qunit async completion.
- done();
- } );
- } );
- } );
- // Test the jswidget custom namespace and endpoints.
- wp.api.init( {
- 'versionString': 'js-widgets/v1/'
- } ).done( function() {
- var customClasses = [
- 'WidgetsArchives',
- 'WidgetsCalendar',
- 'WidgetsCategories',
- 'WidgetsMeta',
- 'WidgetsNav_menu',
- 'WidgetsPages',
- 'WidgetsPostCollection',
- 'WidgetsRecentComments',
- 'WidgetsRecentPosts',
- 'WidgetsRss',
- 'WidgetsSearch',
- 'WidgetsTag_cloud',
- 'WidgetsText'
- ];
- // Check that we have and can get each model type.
- _.each( customClasses, function( className ) {
- QUnit.test( 'Checking ' + className + ' class name.', function( assert ) {
- var done = assert.async();
- assert.expect( 2 );
- wp.api.loadPromise.done( function() {
- var theModel = new wp.api.models[ className ]();
- assert.ok( theModel, 'We can instantiate wp.api.models.' + className );
- var theCollection = new wp.api.collections[ className ]();
- assert.ok( theCollection, 'We can instantiate wp.api.collections.' + className );
- // Trigger Qunit async completion.
- done();
- } );
- } );
- } );
- } );
- // Check connecting to a second URL.
- wp.api.loadPromise.done( function() {
- QUnit.test( 'Checking connecting to a remote url.', function( assert ) {
- var done = assert.async();
- wp.api.init({
- 'apiRoot': 'http://remotehost/wp-json/'
- } ).done( function(){
- var lastEndpoint = wp.api.endpoints.last(),
- models = lastEndpoint.get( 'models' ),
- post = new models.Post();
- assert.equal( 'http://remotehost/wp-json/wp/v2/posts', post.url(), 'The remote API objects should have their own URLs' );
- wp.api.init({
- 'apiRoot': 'http://localhost/wp-json/'
- } ).done( function(){
- var lastEndpoint = wp.api.endpoints.first(),
- models = lastEndpoint.get( 'models' ),
- post = new models.Post();
- assert.equal( 'http://localhost/wp-json/wp/v2/posts', post.url(), 'The local API objects should have their own URLs' );
- done();
- } );
- } );
- } );
- });
- // Test that models have the correct requireForceForDelete setting.
- var modelsThatNeedrequireForceForDelete = [
- { name: 'Category', expect: true },
- { name: 'Comment', expect: undefined },
- { name: 'Media', expect: undefined },
- { name: 'Page', expect: undefined },
- { name: 'PageRevision', expect: true },
- { name: 'Post', expect: undefined },
- { name: 'PostRevision', expect: true },
- { name: 'Status', expect: undefined },
- { name: 'Tag', expect: true },
- { name: 'Taxonomy', expect: undefined },
- { name: 'Type', expect: undefined },
- { name: 'User', expect: true }
- ];
- _.each( modelsThatNeedrequireForceForDelete, function( model ) {
- QUnit.test( 'Test requireForceForDelete is correct for ' + model.name, function( assert ) {
- var done = assert.async();
- assert.expect( 1 );
- wp.api.loadPromise.done( function() {
- // Instantiate the model.
- var theModel = new wp.api.models[ model.name ]();
- // Verify the model's requireForceForDelete is set as expected.
- assert.equal(
- theModel.requireForceForDelete,
- model.expect,
- 'wp.api.models.' + model.name + '.requireForceForDelete should be ' + model.expect + '.'
- );
- // Trigger Qunit async completion.
- done();
- } );
- } );
- } );
- var theModelTypesWithMeta = [
- 'Posts',
- 'Comments',
- 'Tags',
- 'Users'
- ];
- _.each( theModelTypesWithMeta, function( modelType ) {
- // Test post meta.
- wp.api.loadPromise.done( function() {
- QUnit.test( 'Check meta support for ' + modelType + '.', function( assert ) {
- var theModels = new wp.api.collections[ modelType ]();
- theModels.fetch().done( function() {
- // Get the main endpoint.
- var endpoint = theModels.at(0);
- var expectedMetas = '{"meta_key":"meta_value"}';
- if ( 'Tags' === modelType ) {
- expectedMetas = '{"test_single":"","test_multi":[],"meta_key":"meta_value","test_tag_meta":""}';
- }
- // Verify the meta object returned correctly from `getMetas()`.
- assert.equal( JSON.stringify( endpoint.getMetas() ), expectedMetas, 'Full meta key/values object should be readable.' );
- // Verify single meta returned correctly from `getMeta()`
- assert.equal( endpoint.getMeta( 'meta_key' ), 'meta_value', 'Single meta should be readable by key.' );
- // Verify setting meta values with `setMetas()`.
- endpoint.setMetas( { 'test_key':'test_value' } );
- assert.equal( endpoint.getMeta( 'test_key' ), 'test_value', 'Multiple meta should be writable via setMetas.' );
- // Verify setting a single meta value with `setMeta()`.
- endpoint.setMeta( 'test_key2', 'test_value2' );
- assert.equal( endpoint.getMeta( 'test_key2' ), 'test_value2', 'Single meta should be writable via setMeta.' );
- } );
- } );
- } );
- } );
- } )( window.QUnit );
|