This document is not really a task list, but more of a few vague ideas for refactoring and feature development.
- Unit tests should not require a database or filesystem.
- Many of the current unit tests are closer to integration tests and require particular file layouts and database configurations. We can add to these with sets of true unit tests that take better advantage of mocks.
- Unit/integration tests should not require specific setups of multiple databases.
- Configuration should be handled within the tests as much as possible, with Assumption tests to check if the tests being run are actually failing or if they are simply not valid.
- Integration tests should work consistently when run back-to-back.
- Sometimes running the current unit tests without a `clean` step results in one or more of the tests failing.
- Take better advantage of guice, especially for unit tests.
- While the current setup takes heavy advantage of guice, it is a little cumbersome to work with for unit testing.
- Restructuring for easier testing
- There are a few places where a little refactoring could make the bulk of the code easier to unit test.
- Better command-line Javadocs/Findbugs/Checkstyle support
- Currently not generating reports for these, could be useful for future development.
- Allow for Arbitrary Script Files
- Currently it only allows for script files that are in the classpath.
- Execute In Transactions
- When scripts run, either in part or in whole, they should be run in a transaction to enable easy rollback if something goes wrong.
- Alternative Language Support
- Currently the only real support is for Java and Groovy. It'd be nice to extend this to other languages that run on the JVM, such as Scala.
- Down Support
- Currently the emphasis is on upgrading the database. Should also support rollbacks.
- Maintenance
- Working on a database frequently involves occasional maintenance operations such as reindexing. There's a request to put these into a separate table.