Use domain module
Add factory spec
Add coverage reporting