Skip to content

Add the first reusable smoke test for the current Nextcloud stack #49

Description

@vitormattos

Goal

Create the basic smoke-test foundation for the current Nextcloud Docker Compose stack and implement the first minimal test scenario.

Before changing the container architecture, we need a small test foundation that can be extended step by step.

The first scenario should answer only:

Can an isolated instance of the current stack start and reach an installed Nextcloud state?

Testing approach

Implement the smoke test as a real test that can run independently from GitHub Actions.

GitHub Actions must not contain the test scenario itself. CI integration will be added later and will only execute the same repository test command.

Use a testing approach that provides clear scenarios, assertions, failures, setup, and cleanup.

For infrastructure-level tests, a shell-oriented test framework such as Bats is appropriate.

Avoid creating one large procedural script that becomes a custom test framework.

First scenario

Implement one initial smoke-test scenario.

The scenario must:

  • start an isolated instance of the current Compose-based environment;
  • wait for Nextcloud using a real readiness condition instead of a fixed startup delay;
  • run occ status;
  • verify that Nextcloud reports an installed instance;
  • fail with useful output if the stack cannot start or Nextcloud does not become ready within a reasonable timeout.

The repository already uses occ status --output=json as a readiness pattern. Reuse that approach where appropriate.

Do not add additional runtime scenarios in this issue.

Isolation and cleanup

The test must not depend on an existing deployment or existing application data.

Use an isolated Compose project and test-specific resources where necessary.

Test-specific Compose overrides or environment values may be added for isolation, but reuse the current runtime instead of creating a separate test architecture.

Resources created by the test must be cleaned up after success or failure.

Cleanup must not remove resources that existed before the test run.

Local execution

Provide one documented repository command that runs the smoke test locally.

The command must:

  • prepare the isolated test environment;
  • execute the scenario;
  • return a non-zero status when the scenario fails;
  • clean up test-created resources.

The test must be runnable and debuggable without GitHub Actions.

Future scenarios

This issue creates the foundation for additional smoke-test scenarios.

Later work will extend the suite with checks for other essential parts of the stack, such as Redis and the web service.

Those additional scenarios are not part of this issue.

Nextcloud 35 development image

The version-specific Nextcloud 35 development image is temporary and will be replaced later in the parent Epic by a reusable way to follow Nextcloud master.

Do not change or remove that implementation in this issue.

The first smoke test does not need special coverage for the Nextcloud 35 development image.

Acceptance criteria

  • A reusable smoke-test structure exists in the repository.
  • One documented command runs the test locally.
  • The test is independent from GitHub Actions.
  • One scenario verifies that an isolated instance of the current Compose-based stack can start.
  • Nextcloud readiness is detected without a fixed startup delay.
  • occ status confirms an installed Nextcloud instance.
  • Failures return a non-zero result with useful output.
  • Test-created resources are cleaned up safely.
  • Existing environments and persistent data are not modified or removed.
  • No additional runtime scenarios are introduced in this issue.
  • No GitHub Actions workflow is added as part of this issue.

Good first issue

Keep this focused on creating the smoke-test foundation and one minimal scenario.

Additional runtime scenarios and CI integration will be handled separately.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions