Skip to content

Replace shell smoke test with Go integration tests#26

Merged
swalkinshaw merged 2 commits intomainfrom
test-improvements
Mar 19, 2026
Merged

Replace shell smoke test with Go integration tests#26
swalkinshaw merged 2 commits intomainfrom
test-improvements

Conversation

@swalkinshaw
Copy link
Member

Replaces the 480-line bash smoke test with Go integration tests that are deterministic, fast, and self-contained. The new test infrastructure uses fixture data and a mock wp.org server so tests run without network dependencies on the WordPress.org API.

New files:

  • Mock wp.org server (internal/wporg/mock_server.go) + API fixtures
  • Test DB helpers (internal/testutil/testdb.go) for in-memory SQLite
  • Integration smoke test covering full pipeline, HTTP endpoints, composer install, version pinning, and build integrity
  • R2 sync test using gofakes3 for S3-compat verification
  • Live canary test for nightly runs against real wp.org
  • Fixture capture script (test/capture-fixtures.sh)
  • Canary CI workflow (.github/workflows/canary.yml)

Changes:

  • wporg.Client now supports configurable base URL via SetBaseURL()
  • S3 client uses path-style addressing (needed for R2 + test compat)
  • CI workflow gains integration test job (stub CSS, no Tailwind needed)
  • Makefile: smoke target replaced with integration target

Deleted: test/smoke_test.sh, .github/workflows/smoke-test.yml

@swalkinshaw swalkinshaw requested a review from retlehs March 18, 2026 03:42
}
}

func runComposer(t *testing.T, composerPath, dir string, args ...string) string {
Copy link
Member

@tangrufus tangrufus Mar 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about using https://pkg.go.dev/github.com/rogpeppe/go-internal/testscript ?

We can test it against multiple composer versions via docker images.
Also open up the possibility to run e2e test against production server.

Examples:

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using docker for multiple versions is definitely better 👍 think I'll defer as a follow-up though

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems like testscript would be better for testing your own binaries? like trellis-cli testing itself whereas this is running composer.

Copy link
Member

@tangrufus tangrufus Mar 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My idea is e2e of is:

  • one end is composer
  • the other end is wp-composer.com (the test subject)

During the test:

  1. Seed the database + prepare some /p2/ files
  2. Boot wp-composer serve
  3. testscripts to exec composer install something from step 2

Composer is not the test subject. Goal is to assert the server in step 2 (ie: the local wp-composer.com) can be used by composer.

@retlehs
Copy link
Member

retlehs commented Mar 18, 2026

@codex review

Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 98c0588250

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

swalkinshaw and others added 2 commits March 18, 2026 23:34
Replaces the 480-line bash smoke test with Go integration tests that are
deterministic, fast, and self-contained. The new test infrastructure uses
fixture data and a mock wp.org server so tests run without network
dependencies on the WordPress.org API.

New files:
- Mock wp.org server (internal/wporg/mock_server.go) + API fixtures
- Test DB helpers (internal/testutil/testdb.go) for in-memory SQLite
- Integration smoke test covering full pipeline, HTTP endpoints,
  composer install, version pinning, and build integrity
- R2 sync test using gofakes3 for S3-compat verification
- Live canary test for nightly runs against real wp.org
- Fixture capture script (test/capture-fixtures.sh)
- Canary CI workflow (.github/workflows/canary.yml)

Changes:
- wporg.Client now supports configurable base URL via SetBaseURL()
- S3 client uses path-style addressing (needed for R2 + test compat)
- CI workflow gains integration test job (stub CSS, no Tailwind needed)
- Makefile: smoke target replaced with integration target

Deleted: test/smoke_test.sh, .github/workflows/smoke-test.yml

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The httptest server uses plain HTTP (http://127.0.0.1:...) which
Composer's secure-http default blocks. Add secure-http: false to the
generated composer.json config.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@swalkinshaw swalkinshaw merged commit 3604622 into main Mar 19, 2026
7 checks passed
@swalkinshaw swalkinshaw deleted the test-improvements branch March 19, 2026 04:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants