altered first expectations with spy-based tests
expectations completely with new spy on arguments
cleaned up expectation implementations