You don't need a test for every function. You probably want every function call covered by a test, though, otherwise you have untested code.
The exact granularity is a debate that has gone on for a long time. Nowadays, people seem to prefer larger tests that cover more code in one go so as to avoid lots of mocking / stubbing. Super granular tests tend to be reserved for libraries with no internal state.
Do you write tests for every third-party function that interacts with your code, so that it never fails in runtime after a version bump?
How do you guarantee that your own refactoring is exhaustively covered by the prior tests you've written for the old version?