1) Check if there are no any restrictions set for this user at his ‘Edit posts restrictions’ section.

2) ‘edit_post’, ‘delete_post’ are so called meta capabilities which are mapped by WordPress to the real user capabilities ‘edit_posts’, ‘edit_others_posts’, etc.
For example you check if user can edit the post. If it’s his post, it’s enough to have ‘edit_posts’. Then if this post is published, it’s needed to have ‘edit_published_posts’.
That is for 1 ‘edit_post’ meta capability 2 real capabilities are required. In case user is not an author of this post, WordPress will check if user has ‘edit_others_posts’, etc.
Look at
wp-includes/capabilities.php map_meta_cap() function for more details.

There is no need to add meta capabilities directly to the roles by my opinion. But WooCommerce makes this.