Updated by
Modified
Steps.markdown- Ignore whitespace
* Complex replacements might be easier by passing an array into the ActiveRecord constructor setting attributes.
* With `ItemDiscount`, it was initialized with `new ItemDiscount(0, $lineItemId)` to create a new `ItemDiscount` based on a previous `LineItem`. I solved this with:
+ I prefer the Model::create() method over new Model() because it includes a built-in save() giving the instance an id from the beginning which helps with associations and lessens code you have to write around the instance.
5. I elimitated code that would set improper data to an empty string in order to have it remain `null`. (e.g. `check_deposit_date` was set to a date if it was valid, else ''. I removed the else and chose to ignore any assignment. It simply stays `null`.
6. Look through CRUD methods implemented in the class (e.g. `save()`, `delete()`, etc). Remove them.
* `PaymentTransaction::save()` was a little more complicated than a simple update of attributes in the database. It also called upon invoice to update its balance.
* `PaymentTransaction::save()` also set the `created` attribute. I originally put a hook to set `created` after create, but that overwrote things set in the Factory. Plus there is a default value in the database, so it should be good to leave out.
7. If the class is not directly inhereting from `Model` (for instace, `ItemDiscount`) look for refernces to the parent's entities and make sure those are explicitly made in associations (`has_one`, `has_many`, etc.)
+8. Associations sometimes break tests. For instance, making an associate with Invoice's `billing_address` and the `Address` model broke tests where random numbers were used for the billing address. Simply make an instance of the associated model and pass in the id.