Is 80% coverage a reasonable target?
Coverage measures what ran, not what was checked. A suite at 80% with meaningful assertions is healthy; the same number reached by importing modules is decoration. Track it as a trend and never as a gate.
Mock the HTTP client or spin up a fake server?
A fake server, when the protocol matters. Mocks encode your belief about the API, so they keep passing after the real one changes. A local server exercises serialisation, headers and timeouts, which is where the bugs actually live.
Which edge cases deserve a test in a small project?
The ones that already bit you, and the boundaries: empty, one, many, malformed, and the largest input you claim to support. That list catches most regressions without turning the suite into a second implementation.
How do I know when it stops being worth it?
When you stop noticing it. If it has not surfaced a problem in six months, it is either solved or it was never the bottleneck you thought.