[fix] move missing attribute check into the save() method to ensure it is done after hooks (which can modify attributes and change the result of the test)
[fix] move missing attribute check into the save() method to ensure it is done after hooks (which can modify attributes and change the result of the test)