Raise submodule test coverage: 13 files at 0% with generated mocks already in place
Is your feature request related to a problem? Please describe.
Once #3866 / #3940 land, the datasource and metrics-exporter submodules are part of the published coverage figure for the first time — and they dominate it. In the merged profile from run 34580707916 the submodules contribute 6,009 of 8,770 statements (69%) and sit at 74.7%, so submodule coverage is now the main lever on the repo-wide number.
The cheap part of that gap is unusually cheap: 13 files are at exactly 0%, and most of the
modules they live in already ship interface.go + generated mock_*.go (gomock). The seams
exist; nothing is testing through them. No Docker, no live services, no new abstractions — just
table-driven tests against mocks that are already committed.
Describe the solution you'd like
Cover the files below. Each is independent, so this splits cleanly across contributors and makes a
good first issue set. Statement counts are from the merged profile, with mock_*.go excluded (the
same rule the merge step applies).
| file | stmts (all uncovered) | mocks available | notes |
|---|---|---|---|
pkg/gofr/datasource/file/sftp/file.go |
59 | ✅ mock_interface.go |
biggest single win |
pkg/gofr/datasource/couchbase/wrappers.go |
35 | ✅ mock_interfaces.go |
thin driver wrappers |
pkg/gofr/datasource/surrealdb/utils.go |
17 | n/a | pure funcs: clean, PrettyPrint, isAdministrativeOperation, isCustomNil — zero deps |
pkg/gofr/datasource/pubsub/nats/pubsub_wrapper.go |
17 | ✅ | |
pkg/gofr/datasource/influxdb/internal.go |
15 | ✅ | |
pkg/gofr/datasource/couchbase/logger.go |
11 | ✅ mock_logger.go |
|
pkg/gofr/datasource/influxdb/logger.go |
10 | ✅ | |
pkg/gofr/datasource/kv-store/nats/logger.go |
8 | ✅ mock_logger.go |
PrettyPrint |
pkg/gofr/datasource/pubsub/eventhub/message.go |
7 | ✅ mock_logger.go |
Commit |
pkg/gofr/datasource/dgraph/metrics.go |
7 | ✅ mock_metrics.go |
|
pkg/gofr/datasource/surrealdb/wrapper.go |
5 | ✅ mock_interface.go |
NewDBWrapper, Use, SignIn, Info, GetDB |
pkg/gofr/datasource/solr/logger.go |
4 | ✅ mock_logger.go |
|
pkg/gofr/datasource/kv-store/dynamodb/logger.go |
1 | ✅ |
196 statements, all currently unexecuted.
Tests should follow the repo convention: one test function per method, table-driven over a
[]struct of cases.
Describe alternatives you've considered
The same coverage could be reached with testcontainers-backed integration tests, but that is a much larger change to CI runtime and flakiness for the same statements — these files are wrappers, loggers and pure helpers whose behaviour is fully observable through the existing mocks.
Additional context
Where the rest of the submodule gap lives, for anyone who wants the larger pieces (these need new tests or a seam, not just mocks — worth separate issues):
| module | coverage | uncovered stmts | effect on the repo-wide figure if taken to 90% |
|---|---|---|---|
datasource/surrealdb |
24.8% | 228 | +2.25pp |
datasource/pubsub/eventhub |
40.5% | 169 | +1.60pp |
datasource/mongo |
34.5% | 97 | +0.94pp — already fixed by dropping -short in #4201 |
datasource/couchbase |
62.4% | 86 | +0.72pp |
datasource/file/sftp |
54.2% | 77 | +0.69pp |
datasource/influxdb |
62.0% | 78 | +0.66pp |
datasource/kv-store/nats |
45.9% | 53 | +0.49pp |
Two structural notes found while measuring:
surrealdbneeds one seam before it can move.newDB(surrealdb.go:89) is called directly insideConnect, soConnect,connectToDatabase,setupNamespaceAndDatabase,signIn,authenticateCredentialsandHealthCheckare all unreachable from a test. MakingnewDBa package-level var (or aClientfield) that tests swap for the existingMockDBunlocks all of them at once.The
pkg/gofrhalf of the figure has its own denominator problem, unrelated to this issue. The PKG job runs-coverpkg=./pkg/gofr, so the merged profile contains only the 29 top-levelpkg/gofr/*.gofiles (2,290 statements). Everything underpkg/gofr/http,container,logging,service,cmdand the in-repo datasources is absent from the published number entirely. That is the same class of gap #3866 fixed for submodules, one level up, and deserves its own issue.
Source: gofr-dev/gofr