This can be simplified to use `then` instead of chaining `done` and `fail`. This change would keep the door open to alternate promise implementations that don't have `done` and `fail` sugar (if someone were so inclined to run the test suite with something else, of course.)