No tests found
In /testbed
  6083 files checked.
  testMatch: /testbed/client/**/test/*.js?(x) - 1313 matches
  testPathIgnorePatterns: /node_modules/ - 6083 matches
Pattern: client/lib/posts/test/actions.js - 0 matches
No tests found
In /testbed
  6083 files checked.
  testMatch: /testbed/client/**/test/*.js?(x) - 1313 matches
  testPathIgnorePatterns: /node_modules/ - 6083 matches
Pattern: client/lib/posts/test/mocks/lib/wp.js - 0 matches
No tests found
In /testbed
  6083 files checked.
  testMatch: /testbed/client/**/test/*.js?(x) - 1313 matches
  testPathIgnorePatterns: /node_modules/ - 6083 matches
Pattern: client/lib/posts/test/post-edit-store.js - 0 matches
No tests found
In /testbed
  6083 files checked.
  testMatch: /testbed/client/**/test/*.js?(x) - 1313 matches
  testPathIgnorePatterns: /node_modules/ - 6083 matches
Pattern: client/post-editor/test/post-editor.jsx - 0 matches
+ cd /testbed
+ git config --global --add safe.directory /testbed
+ cd /testbed
+ git checkout bcc8e2ee4ec5a0d30fabc995d9ebeedfed0a8fe0 client/lib/media/test/actions.js client/lib/posts/test/actions.js client/lib/posts/test/mocks/lib/wp.js client/lib/posts/test/post-edit-store.js client/lib/posts/test/utils.js client/post-editor/editor-word-count/test/index.jsx client/post-editor/test/post-editor.jsx client/state/posts/test/reducer.js client/state/posts/test/selectors.js client/state/posts/test/utils.js client/state/selectors/test/edited-post-has-content.js client/state/ui/editor/test/actions.js client/state/ui/editor/test/reducer.js
Updated 0 paths from 1dd465e318
+ git apply --verbose --reject -
Checking patch client/lib/media/test/actions.js...
Checking patch client/lib/posts/test/actions.js...
Checking patch client/lib/posts/test/mocks/lib/wp.js...
Checking patch client/lib/posts/test/post-edit-store.js...
Checking patch client/lib/posts/test/utils.js...
Checking patch client/post-editor/editor-word-count/test/index.jsx...
Checking patch client/post-editor/test/post-editor.jsx...
Checking patch client/state/posts/test/reducer.js...
Checking patch client/state/posts/test/selectors.js...
Checking patch client/state/posts/test/utils.js...
Checking patch client/state/selectors/test/edited-post-has-content.js...
Checking patch client/state/ui/editor/test/actions.js...
Checking patch client/state/ui/editor/test/reducer.js...
Applied patch client/lib/media/test/actions.js cleanly.
Applied patch client/lib/posts/test/actions.js cleanly.
Applied patch client/lib/posts/test/mocks/lib/wp.js cleanly.
Applied patch client/lib/posts/test/post-edit-store.js cleanly.
Applied patch client/lib/posts/test/utils.js cleanly.
Applied patch client/post-editor/editor-word-count/test/index.jsx cleanly.
Applied patch client/post-editor/test/post-editor.jsx cleanly.
Applied patch client/state/posts/test/reducer.js cleanly.
Applied patch client/state/posts/test/selectors.js cleanly.
Applied patch client/state/posts/test/utils.js cleanly.
Applied patch client/state/selectors/test/edited-post-has-content.js cleanly.
Applied patch client/state/ui/editor/test/actions.js cleanly.
Applied patch client/state/ui/editor/test/reducer.js cleanly.
+ : '>>>>> Start Test Output'
+ ./node_modules/.bin/jest --verbose -c=test/client/jest.config.json client/lib/media/test/actions.js
FAIL client/lib/media/test/actions.js
  MediaActions
    #setQuery()
      ✓ should dispatch the SET_MEDIA_QUERY action (36ms)
    #fetch()
      ✓ should call to the WordPress.com REST API (7ms)
      ✓ should not allow simultaneous request for the same item (3ms)
      ✓ should allow simultaneous request for different items (11ms)
    #fetchNextPage()
      ✓ should call to the internal WordPress.com REST API (5ms)
      ✓ should call to the external WordPress.com REST API (3ms)
    #add()
      ✓ should accept a single upload (11ms)
      ✓ should accept an array of uploads (5ms)
      ✓ should accept a file URL (4ms)
      ✓ should accept a FileList of uploads (5ms)
      ✓ should accept a Blob object wrapper and pass it as "file" parameter (4ms)
      ✓ should call to the WordPress.com REST API (4ms)
      ✓ should immediately receive a transient object (4ms)
      ✕ should attach file upload to a post if one is being edited (5ms)
      ✕ should attach URL upload to a post if one is being edited (13ms)
      ✓ should upload in series (6ms)
    #addExternal()
      ✓ should accept an upload (4ms)
    #edit()
      ✓ should immediately edit the existing item (3ms)
    #update()
      ✓ should accept a single item (2ms)
      ✓ should accept an array of items (3ms)
      ✓ should immediately update the existing item (3ms)
      ✓ should call to the WordPress.com REST API (5ms)
    #delete()
      ✓ should accept a single item (3ms)
      ✓ should accept an array of items (3ms)
      ✓ should call to the WordPress.com REST API (4ms)
      ✓ should immediately remove the item (3ms)
    #clearValidationErrors()
      ✓ should dispatch the `CLEAR_MEDIA_VALIDATION_ERRORS` action with the specified siteId (11ms)
      ✓ should dispatch the `CLEAR_MEDIA_VALIDATION_ERRORS` action with the specified siteId and itemId (3ms)
    #sourceChanged()
      ✓ should dispatch the `CHANGE_MEDIA_SOURCE` action with the specified siteId (3ms)

  ● MediaActions › #add() › should attach file upload to a post if one is being edited

    AssertionError: expected mediaAdd to have been called with arguments matching {  }, {
      file: {
        guid: "test",
        lastModified: "2015-06-19T09:36:09-04:00",
        lastModifiedDate: "2015-06-19T09:36:09-04:00",
        name: "my-file.jpg",
        size: 21165,
        type: "image/jpeg"
      },
      parent_id: 200
    }
        mediaAdd({  }, {
      guid: "test",
      lastModified: "2015-06-19T09:36:09-04:00",
      lastModifiedDate: "2015-06-19T09:36:09-04:00",
      name: "my-file.jpg",
      size: 21165,
      type: "image/jpeg"
    }) => [Promise] {  } at uploader (/testbed/client/lib/media/actions.js:138:30)

      258 | 
      259 | 			return MediaActions.add( site, DUMMY_UPLOAD ).then( () => {
    > 260 | 				expect( stubs.mediaAdd ).to.have.been.calledWithMatch(
      261 | 					{},
      262 | 					{
      263 | 						file: DUMMY_UPLOAD,
      
      at client/lib/media/test/actions.js:260:43

  ● MediaActions › #add() › should attach URL upload to a post if one is being edited

    AssertionError: expected mediaAddUrls to have been called with arguments matching {  }, { parent_id: 200, url: "https://wordpress.com/i/stats-icon.gif" }
        mediaAddUrls({  }, https://wordpress.com/i/stats-icon.gif) => [Promise] {  } at uploader (/testbed/client/lib/media/actions.js:135:31)

      272 | 
      273 | 			return MediaActions.add( site, DUMMY_URL ).then( () => {
    > 274 | 				expect( stubs.mediaAddUrls ).to.have.been.calledWithMatch(
      275 | 					{},
      276 | 					{
      277 | 						url: DUMMY_URL,
      
      at client/lib/media/test/actions.js:274:47

Test Suites: 1 failed, 1 total
Tests:       2 failed, 27 passed, 29 total
Snapshots:   0 total
Time:        5.301s
Ran all test suites matching /client\/lib\/media\/test\/actions.js/i.
+ ./node_modules/.bin/jest --verbose -c=test/client/jest.config.json client/lib/posts/test/actions.js
+ ./node_modules/.bin/jest --verbose -c=test/client/jest.config.json client/lib/posts/test/mocks/lib/wp.js
+ ./node_modules/.bin/jest --verbose -c=test/client/jest.config.json client/lib/posts/test/post-edit-store.js
+ ./node_modules/.bin/jest --verbose -c=test/client/jest.config.json client/lib/posts/test/utils.js
FAIL client/lib/posts/test/utils.js
  utils
    #getEditURL
      ✓ should return correct path type=post is supplied (3ms)
      ✓ should return correct path type=page is supplied
      ✓ should return correct path when custom post type is supplied (1ms)
      ✓ should default to type=post if no post type is supplied
    #getVisibility
      ✓ should return null when no post is supplied
      ✓ should return public when password and private are not set (1ms)
      ✓ should return private when post#status is private
      ✓ should return password when post#password is set
    #isPrivate
      ✕ should return false when no post is supplied (13ms)
      ✓ should return true when post.status is private
      ✓ should return false when post.status is not private
    #isPublished
      ✕ should return false when no post is supplied (1ms)
      ✓ should return true when post.status is private
      ✓ should return true when post.status is publish
      ✓ should return false when post.status is not publish or private
    #isPending
      ✕ should return false when no post is supplied
      ✓ should return true when post.status is pending (1ms)
      ✓ should return false when post.status is not pending
    #isBackDatedPublished
      ✓ should return false when no post is supplied
      ✓ should return false when status !== future
      ✓ should return false when status === future and date is in future (1ms)
      ✓ should return true when status === future and date is in the past (1ms)
    #removeSlug
      ✓ should return undefined when no path is supplied
      ✓ should strip slug on post URL
      ✓ should strip slug on page URL
    #getPermalinkBasePath
      ✓ should return undefined when no post is supplied (1ms)
      ✓ should return post.URL when post is published
      ✓ should use permalink_URL when not published and present
    #getPagePath
      ✓ should return undefined when no post is supplied
      ✓ should return post.URL without slug when page is published (1ms)
      ✓ should use permalink_URL when not published and present
    #getFeaturedImageId()
      ✓ should return undefined when no post is specified
      ✓ should return a non-URL featured_image property
      ✓ should return a `null` featured_image property
      ✓ should return empty string if that is the featured_image value (7ms)
      ✓ should fall back to post thumbnail object ID if exists, if featured_image is URL
      ✓ should return undefined if featured_image is URL and post thumbnail object doesn't exist

  ● utils › #isPrivate › should return false when no post is supplied

    expect(received).toBe(expected) // Object.is equality
    
    Expected value to be:
      false
    Received:
      undefined
    
    Difference:
    
      Comparing two different types of values. Expected boolean but received undefined.

      61 | 	describe( '#isPrivate', () => {
      62 | 		test( 'should return false when no post is supplied', () => {
    > 63 | 			expect( postUtils.isPrivate() ).toBe( false );
      64 | 		} );
      65 | 
      66 | 		test( 'should return true when post.status is private', () => {
      
      at Object.<anonymous> (client/lib/posts/test/utils.js:63:36)

  ● utils › #isPublished › should return false when no post is supplied

    expect(received).toBe(expected) // Object.is equality
    
    Expected value to be:
      false
    Received:
      undefined
    
    Difference:
    
      Comparing two different types of values. Expected boolean but received undefined.

      75 | 	describe( '#isPublished', () => {
      76 | 		test( 'should return false when no post is supplied', () => {
    > 77 | 			expect( postUtils.isPublished() ).toBe( false );
      78 | 		} );
      79 | 
      80 | 		test( 'should return true when post.status is private', () => {
      
      at Object.<anonymous> (client/lib/posts/test/utils.js:77:38)

  ● utils › #isPending › should return false when no post is supplied

    expect(received).toBe(expected) // Object.is equality
    
    Expected value to be:
      false
    Received:
      undefined
    
    Difference:
    
      Comparing two different types of values. Expected boolean but received undefined.

      93 | 	describe( '#isPending', () => {
      94 | 		test( 'should return false when no post is supplied', () => {
    > 95 | 			expect( postUtils.isPending() ).toBe( false );
      96 | 		} );
      97 | 
      98 | 		test( 'should return true when post.status is pending', () => {
      
      at Object.<anonymous> (client/lib/posts/test/utils.js:95:36)

Test Suites: 1 failed, 1 total
Tests:       3 failed, 34 passed, 37 total
Snapshots:   0 total
Time:        2.624s
Ran all test suites matching /client\/lib\/posts\/test\/utils.js/i.
+ ./node_modules/.bin/jest --verbose -c=test/client/jest.config.json client/post-editor/editor-word-count/test/index.jsx
FAIL client/post-editor/editor-word-count/test/index.jsx
  ● Test suite failed to run

    /testbed/node_modules/cheerio/dist/commonjs/api/attributes.js:300
            catch {
                  ^
    
    SyntaxError: Unexpected token {
      
      at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/script_transformer.js:316:17)
      at Object.<anonymous> (node_modules/cheerio/dist/commonjs/cheerio.js:27:33)
      at Object.<anonymous> (node_modules/cheerio/dist/commonjs/load.js:29:22)

Test Suites: 1 failed, 1 total
Tests:       0 total
Snapshots:   0 total
Time:        1.726s
Ran all test suites matching /client\/post-editor\/editor-word-count\/test\/index.jsx/i.
+ ./node_modules/.bin/jest --verbose -c=test/client/jest.config.json client/post-editor/test/post-editor.jsx
+ ./node_modules/.bin/jest --verbose -c=test/client/jest.config.json client/state/posts/test/reducer.js
FAIL client/state/posts/test/reducer.js
  reducer
    ✓ should include expected keys in return value (3ms)
    #items()
      ✓ should default to an empty object
      ✓ should index received posts by global ID (1ms)
      ✓ should accumulate posts
      ✓ should remove an item when delete action is dispatched
      ✓ should persist state (1ms)
      ✓ should load valid persisted state (1ms)
      ✓ should not load invalid persisted state (20ms)
    #queryRequests()
      ✓ should default to an empty object
      ✓ should track post query request fetching
      ✓ should track post queries without specified site (1ms)
      ✓ should accumulate queries
      ✓ should track post query request success
      ✓ should track post query request failure
    #queries()
      ✓ should default to an empty object
      ✕ should track post query request success (5ms)
      ✓ should accumulate query request success (2ms)
      ✓ should return the same state if successful request has no changes
      ✓ should track posts even if not associated with an existing site or query
      ✓ should update received posts (1ms)
      ✓ should apply pending restore status on restore actions
      ✓ should apply pending trash status on restore failure actions (1ms)
      ✓ should apply save actions as partial received posts
      ✓ should apply pending delete status on delete actions (1ms)
      ✓ should restore item when post delete fails (1ms)
      ✓ should remove item when post delete action success dispatched
      ✓ should persist state (1ms)
      ✓ should load valid persisted state (2ms)
      ✓ should not load invalid persisted state (2ms)
    #siteRequests()
      ✓ should default to an empty object
      ✓ should map site ID, post ID to true value if request in progress
      ✓ should accumulate mappings
      ✓ should map site ID, post ID to false value if request finishes successfully
      ✓ should map site ID, post ID to false value if request finishes with failure
    #edits()
      ✓ should default to an empty object
      ✓ should track new post draft revisions by site ID (1ms)
      ✓ should track existing post revisions by site ID, post ID
      ✓ should accumulate posts
      ✓ should accumulate sites
      ✓ should merge post revisions (1ms)
      ✓ should merge nested post revisions
      ✓ should eliminate redundant data on posts received
      ✓ should handle term shape differences on posts received (2ms)
      ✓ should preserve term edit differences on posts received
      ✓ should remove discussion edits after they are saved (1ms)
      ✓ should keep discussion edits if they are not yet present in the saved post
      ✓ should remove author edit after it is saved and user IDs are equal
      ✓ should remove featured image edit after it is saved
      ✓ should remove metadata edits after they are saved (1ms)
      ✓ should remove date edits after they are saved (3ms)
      ✓ should remove status edits after they are saved
      ✓ should ignore reset edits action when discarded site doesn't exist (1ms)
      ✓ should copy edits when the post is saved and prior postId was null
      ✓ should ignore stop editor action when site doesn't exist
      ✓ should discard edits when we stop editing the post
      ✕ should reset edits when we start editing a post (1ms)
    #allSitesQueries()
      ✓ should default to a new PostQueryManager
      ✕ should track post query request success (1ms)
      ✓ should accumulate query request success
      ✓ should return the same state if successful request has no changes (1ms)
      ✓ should track post items received from site-specific queries
      ✓ should ignore query results of site-specific queries
      ✓ should update received posts
      ✓ should apply pending restore status on restore actions (1ms)
      ✓ should apply pending trash status on restore failure actions
      ✓ should apply save actions as partial received posts (1ms)
      ✓ should apply pending delete status on delete actions
      ✓ should restore item when post delete fails (1ms)
      ✓ should remove item when post delete action success dispatched (1ms)
      ✓ should persist state
      ✓ should load valid persisted state (2ms)
      ✓ should not load invalid persisted state (2ms)

  ● reducer › #queries() › should track post query request success

    AssertionError: expected [ Array(1) ] to deeply equal [ Array(1) ]

      271 | 			expect( state ).to.have.keys( [ '2916284' ] );
      272 | 			expect( state[ 2916284 ] ).to.be.an.instanceof( PostQueryManager );
    > 273 | 			expect( state[ 2916284 ].getItems( { search: 'Hello' } ) ).to.eql( [
      274 | 				{
      275 | 					ID: 841,
      276 | 					site_ID: 2916284,
      
      at Object.<anonymous> (client/state/posts/test/reducer.js:273:66)

  ● reducer › #edits() › should reset edits when we start editing a post

    AssertionError: expected { Object (2916284) } to deeply equal { Object (2916284) }

      1504 | 			);
      1505 | 
    > 1506 | 			expect( state ).to.eql( {
      1507 | 				2916284: {
      1508 | 					841: null,
      1509 | 					'': {
      
      at Object.<anonymous> (client/state/posts/test/reducer.js:1506:23)

  ● reducer › #allSitesQueries() › should track post query request success

    AssertionError: expected [ Array(1) ] to deeply equal [ Array(1) ]

      1543 | 			} );
      1544 | 
    > 1545 | 			expect( state.getItems( { search: 'Hello' } ) ).to.eql( [
      1546 | 				{
      1547 | 					ID: 841,
      1548 | 					site_ID: 2916284,
      
      at Object.<anonymous> (client/state/posts/test/reducer.js:1545:55)

Test Suites: 1 failed, 1 total
Tests:       3 failed, 69 passed, 72 total
Snapshots:   0 total
Time:        2.716s
Ran all test suites matching /client\/state\/posts\/test\/reducer.js/i.
+ ./node_modules/.bin/jest --verbose -c=test/client/jest.config.json client/state/posts/test/selectors.js
FAIL client/state/posts/test/selectors.js
  selectors
    #getPost()
      ✓ should return null if the global ID is not tracked (1ms)
      ✓ should return null if there is no manager associated with the path site (1ms)
      ✓ should return the object for the post global ID
    getNormalizedPost()
      ✓ should return null if the post is not tracked (1ms)
      ✓ should return a normalized copy of the post (4ms)
    #getSitePosts()
      ✓ should return an array of post objects for the site (1ms)
    #getSitePost()
      ✓ should return null if the post is not known for the site (1ms)
      ✓ should return the object for the post site ID, post ID pair
    #getPostsForQuery()
      ✓ should return null if the site query is not tracked (1ms)
      ✓ should return null if the query is not tracked to the query manager
      ✓ should return an array of normalized known queried posts (1ms)
      ✓ should return null if we know the number of found items but the requested set hasn't been received
    #isRequestingPostsForQuery()
      ✓ should return false if the site has not been queried
      ✓ should return false if the site has not been queried for the specific query (1ms)
      ✓ should return true if the site has been queried for the specific query
      ✓ should return false if the site has previously, but is not currently, querying for the specified query
    getPostsFoundForQuery()
      ✓ should return null if the site query is not tracked
      ✓ should return the found items for a site query
      ✓ should return zero if in-fact there are zero items
    #getPostsLastPageForQuery()
      ✓ should return null if the site query is not tracked (1ms)
      ✓ should return the last page value for a site query
      ✓ should return the last page value for a site query, even if including page param
      ✓ should return 1 if there are no found posts
    #isPostsLastPageForQuery()
      ✓ should return null if the last page is not known
      ✓ should return false if the query explicit value is not the last page (1ms)
      ✓ should return true if the query explicit value is the last page
      ✓ should return true if the query implicit value is the last page
    #getPostsForQueryIgnoringPage()
      ✓ should return null if the query is not tracked
      ✓ should return null if the query manager has not received items for query
      ✓ should return a concatenated array of all site posts ignoring page (1ms)
      ✓ should omit found items for which the requested result hasn't been received (1ms)
    isRequestingPostsForQueryIgnoringPage()
      ✓ should return false if not requesting for query
      ✓ should return true requesting for query at exact page (1ms)
      ✓ should return true requesting for query without page specified
      ✓ should return true for all-sites query
      ✓ should return false for single site when requesting all sites
    #getEditedPost()
      ✓ should return the original post if no revisions exist on site
      ✓ should return revisions for a new draft
      ✓ should return revisions for a draft if the original is unknown (1ms)
      ✓ should return revisions merged with the original post
      ✓ should return revisions merged with original post nested properties
      ✓ should return revisions with array properties overwriting objects (1ms)
      ✓ should return revisions with array properties overwriting previous versions
      ✓ should memoize the merged post if there are no changes from previous call
      ✓ should return updated post object if the original post changes (1ms)
      ✓ should return updated post object if the post edits change
    getPostEdits()
      ✓ should return null if no edits exist for a new post
      ✓ should return null if no edits exist for an existing post
      ✓ should return the edited attributes for a new post
      ✓ should return the edited attributes for an existing post
    getEditedPostValue()
      ✓ should return undefined if the post does not exist (1ms)
      ✓ should return the assigned post value
      ✓ should return the assigned nested post value
    isEditedPostPasswordProtected()
      ✓ should return false if the post does not exist
      ✓ should return false if post password is a zero length string (1ms)
      ✓ should return true if post password is a non-zero length string
      ✓ should return true if post password is whitespace only
    isEditedPostPasswordProtectedWithValidPassword()
      ✓ should return false if the post does not exist
      ✓ should return false if post password is a zero length string
      ✓ should return true if post password is a non-zero length string (1ms)
      ✓ should return false if post password is whitespace only
    isEditedPostDirty()
      ✓ should return false if there are no edits for the post
      ✓ should return false if edited with a type
      ✓ should return false if newly edited with custom type
      ✓ should return false if no saved post and value matches default for new post (1ms)
      ✓ should return true if no saved post and value does not match default for new post
      ✓ should return true if no saved post and no default exists for key
      ✓ should return false if saved post value equals edited post value
      ✕ should return true if edited post is unchanged but the raw content is different (37ms)
      ✓ should return true if saved post value does not equal edited post value
      ✓ should return true if saved post parent attr changes (1ms)
      ✓ should return false if saved post parent attr doesn't change
      ✓ should return true if saved post date changes (3ms)
      ✓ should return false if saved post date doesn't change
      ✓ should return true if discussion options change
      ✓ should return false if discussion options didn't change (1ms)
      ✓ should return false if author ID didn't change
      ✓ should return false if featured image ID didn't change
      ✓ should return true if there are unapplied metadata edits (1ms)
      ✓ should return false if all metadata edits are already applied
      ✓ should start returning false after update to original post makes the edits noop
    getPostPreviewUrl()
      ✓ should return null if the post is not known
      ✓ should return null if the post has no URL
      ✓ should return null if the post is trashed
      ✓ should prefer the post preview URL if available
      ✓ should use post URL if preview URL not available
      ✓ should change http to https if mapped domain (1ms)
      ✓ should append preview query argument to non-published posts (1ms)
    isPostPublished()
      ✓ should return null if the post is not known
      ✓ should return true if the post status is publish (1ms)
      ✓ should return true if the post status is private
      ✓ should return false if the post status is draft
      ✓ should return false if the post status is future and date is in future
      ✓ should return true if the post status is future and date is in past (1ms)
    getEditedPostSlug()
      ✓ should return undefined if the post is not known
      ✓ should return post.slug if post is published
      ✓ should return decoded non-latin post.slug if post is published
      ✓ should return undecoded post.slug if post with malformed URI sequence is published
      ✓ should return decoded post.slug with emoji sequences if post is published
      ✓ should return edited slug if post is not published
      ✓ should return suggested-slug if post is not published
      ✓ should return slug if post is not published and slug is set
      ✓ should return edited slug if post is published
      ✓ should return an empty edited slug if post is published
    getSitePostsByTerm()
      ✓ should return an array of post objects for the site matching the termId (1ms)

  ● selectors › isEditedPostDirty() › should return true if edited post is unchanged but the raw content is different

    AssertionError: expected false to be true

      2037 | 			);
      2038 | 
    > 2039 | 			expect( isDirty ).to.be.true;
      2040 | 		} );
      2041 | 
      2042 | 		test( 'should return true if saved post value does not equal edited post value', () => {
      
      at Object.<anonymous> (client/state/posts/test/selectors.js:2039:4)

Test Suites: 1 failed, 1 total
Tests:       1 failed, 104 passed, 105 total
Snapshots:   0 total
Time:        2.099s
Ran all test suites matching /client\/state\/posts\/test\/selectors.js/i.
+ ./node_modules/.bin/jest --verbose -c=test/client/jest.config.json client/state/posts/test/utils.js
FAIL client/state/posts/test/utils.js
  utils
    isTermsEqual
      ✓ should return false if term edits are the same as saved terms (3ms)
      ✓ should return false if term edits are not the same as saved terms
      ✓ should return false savedTerms is missing a taxonomy
    normalizePostForApi()
      ✓ should return null if post is falsey
      ✓ should return a normalized post object (2ms)
    normalizePostForDisplay()
      ✓ should return null if post is falsey
      ✓ should return a normalized post object (3ms)
    normalizePostForState()
      ✕ should deeply unset all meta links (18ms)
    #getNormalizedPostsQuery()
      ✓ should exclude default values (1ms)
    #getSerializedPostsQuery()
      ✓ should return a JSON string of a normalized query
      ✓ should prefix site ID if specified
    getDeserializedPostsQueryDetails()
      ✓ should return undefined query and site if string does not contain JSON
      ✓ should return query but not site if string does not contain site prefix
      ✓ should return query and site if string contains site prefix and JSON
    #getSerializedPostsQueryWithoutPage()
      ✓ should return a JSON string of a normalized query omitting page
      ✓ should prefix site ID if specified
    mergePostEdits
      ✓ should merge into an empty object (1ms)
      ✓ should not modify array properties in the original object
      ✓ should allow removing array items
      ✓ should replace arrays with the new value
      ✓ should add properties to nested objects
      ✓ should replace previous metadata edit (1ms)
      ✓ should add new metadata edit (1ms)
    applyPostEdits
      ✓ should modify metadata
      ✓ should add metadata
      ✓ should remove metadata
      ✓ should return unchanged object on noop update (1ms)
      ✓ should return unchanged object on noop delete
      ✓ should return metadata array after applying edits to a false value
    #getTermIdsFromEdits()
      ✓ should return the same post edit object if no term edits have been made
      ✓ should return the add terms_by_id if terms have been edited (1ms)
      ✓ should taxonomy terms_by_id to null if object is empty
      ✓ should not set terms_by_id for taxonomies that set an array on terms

  ● utils › normalizePostForState() › should deeply unset all meta links

    AssertionError: expected { Object (ID, terms, ...) } to deeply equal { Object (ID, meta, ...) }

      230 | 
      231 | 			expect( revised ).to.not.equal( original );
    > 232 | 			expect( revised ).to.eql( {
      233 | 				ID: 814,
      234 | 				meta: {
      235 | 					data: { autosave: true },
      
      at Object.<anonymous> (client/state/posts/test/utils.js:232:25)

Test Suites: 1 failed, 1 total
Tests:       1 failed, 32 passed, 33 total
Snapshots:   0 total
Time:        1.457s
Ran all test suites matching /client\/state\/posts\/test\/utils.js/i.
+ ./node_modules/.bin/jest --verbose -c=test/client/jest.config.json client/state/selectors/test/edited-post-has-content.js
FAIL client/state/selectors/test/edited-post-has-content.js
  editedPostHasContent()
    ✓ should return false if there are no edits and no post (2ms)
    ✓ should return false if there are no edits and post has empty content
    ✓ should return true if there are no edits and the post has a title (1ms)
    ✓ should return true if there are no edits and the post has content
    ✓ should return true if there are no edits and the post has an excerpt
    ✓ should return false if there are empty edits that overrides the post attributes (1ms)
    ✓ should return true if there are title edits
    ✓ should return true if there are content edits
    ✓ should return true if there are excerpt edits (1ms)
    ✕ should return true if there is empty content and non-empty raw content (9ms)
  isEmptyContent()
    ✓ should return true for empty strings
    ✓ should return true for empty paragraphs
    ✓ should return false for random texts

  ● editedPostHasContent() › should return true if there is empty content and non-empty raw content

    AssertionError: expected false to be true

      313 | 		);
      314 | 
    > 315 | 		expect( hasContent ).to.be.true;
      316 | 	} );
      317 | } );
      318 | 
      
      at Object.<anonymous> (client/state/selectors/test/edited-post-has-content.js:315:3)

Test Suites: 1 failed, 1 total
Tests:       1 failed, 12 passed, 13 total
Snapshots:   0 total
Time:        1.411s
Ran all test suites matching /client\/state\/selectors\/test\/edited-post-has-content.js/i.
+ ./node_modules/.bin/jest --verbose -c=test/client/jest.config.json client/state/ui/editor/test/actions.js
PASS client/state/ui/editor/test/actions.js
  actions
    setEditorMediaModalView()
      ✓ should dispatch setMediaModalView with analytics (1ms)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        2.1s
Ran all test suites matching /client\/state\/ui\/editor\/test\/actions.js/i.
+ ./node_modules/.bin/jest --verbose -c=test/client/jest.config.json client/state/ui/editor/test/reducer.js
FAIL client/state/ui/editor/test/reducer.js
  reducer
    ✕ should export expected reducer keys (9ms)
    #postId()
      ✓ should default to null (1ms)
      ✓ should update the tracked id when starting the editor
      ✓ should update the tracked post id if we save a draft post
      ✓ should not update the tracked post id if we save a draft post but we already switched the tracked post ID

  ● reducer › should export expected reducer keys

    AssertionError: expected { Object (postId, isAutosaving, ...) } to have keys 'postId', 'loadingError', 'isLoading', 'isAutosaving', 'autosavePreviewUrl', 'lastDraft', 'contactForm', 'imageEditor', 'videoEditor', 'saveBlockers', and 'rawContent'

      14 | describe( 'reducer', () => {
      15 | 	test( 'should export expected reducer keys', () => {
    > 16 | 		expect( reducer( undefined, {} ) ).to.have.keys( [
      17 | 			'postId',
      18 | 			'loadingError',
      19 | 			'isLoading',
      
      at Object.<anonymous> (client/state/ui/editor/test/reducer.js:16:46)

Test Suites: 1 failed, 1 total
Tests:       1 failed, 4 passed, 5 total
Snapshots:   0 total
Time:        1.503s
Ran all test suites matching /client\/state\/ui\/editor\/test\/reducer.js/i.
+ : '>>>>> End Test Output'
+ git checkout bcc8e2ee4ec5a0d30fabc995d9ebeedfed0a8fe0 client/lib/media/test/actions.js client/lib/posts/test/actions.js client/lib/posts/test/mocks/lib/wp.js client/lib/posts/test/post-edit-store.js client/lib/posts/test/utils.js client/post-editor/editor-word-count/test/index.jsx client/post-editor/test/post-editor.jsx client/state/posts/test/reducer.js client/state/posts/test/selectors.js client/state/posts/test/utils.js client/state/selectors/test/edited-post-has-content.js client/state/ui/editor/test/actions.js client/state/ui/editor/test/reducer.js
Updated 13 paths from 1dd465e318
