This solution is very elegant! It's so easily readable
Same problem here
This comment is hidden because it contains spoiler information about the solution
At first I thought report() method should return an immutable object. One whose totalCalls and log doesn't change after spied is called again after calling report(). I understood it as a "snapshot" from the time it is created (compare printed report).