I am just starting to write tests for a Grails app and I have watched this and read this and would like to use the tests to check that the constraints have been set properly.
Now, while at it, I would figure one should also test if the default value is correct (kind of a safetycheck if someone was tampering with the domain object). Problem seems to be that if I mock an object, it will exist, but the default value will not have been set. Is there a way to check this, or am I just being to cautious (spell 'paranoid')?
It should become something like this:
class Event implements Taggable {
   ...
   Boolean publish
   ...
   static constraints = {
        ...
        publish nullable: true, defaultValue: true
        ...
    }
}
and
@TestMixin(GrailsUnitTestMixin)
@TestFor(Event)
class EventSpec extends Specification{
    Event ev = new Event(start: new Date(), subProgram: new Subprogram(),venue: new Venue())
    def setup() {
        mockForConstraintsTests(Event)
    }
    def cleanup() {
    }
    void "publish ist default true"() {  // cannot be tested ???
        expect:
        ev.publish
    }
Is this because the DB is not involved (no environment availbale in unit tests) which sets the default value? Can I do this only in integration tests?
                        
You are correct, you will need to do this in an integration test, since not all the database components are wired up in a unit test.