Decouple config loading and parsing with test coverage