edge-connect-client/internal/infrastructure/config/config_test.go
Stephan Lo 7b062612f5 refactor(arch): Separate infrastructure from driven adapter
This commit introduces a significant architectural refactoring to decouple the driven adapter from low-level infrastructure concerns, adhering more strictly to the principles of Hexagonal Architecture.

Problem:
The driven adapter in `internal/adapters/driven/edgeconnect` was responsible for both adapting data structures and handling direct HTTP communication, authentication, and request/response logic. This violated the separation of concerns, making the adapter difficult to test and maintain.

Solution:
A new infrastructure layer has been created at `internal/infrastructure`. This layer now contains all the low-level details of interacting with the EdgeConnect API.

Key Changes:
- **New Infrastructure Layer:** Created `internal/infrastructure` to house components that connect to external systems.
- **Generic HTTP Client:** A new, generic `edgeconnect_client` was created in `internal/infrastructure/edgeconnect_client`. It is responsible for authentication, making HTTP requests, and handling raw responses. It has no knowledge of the application's domain models.
- **Config & Transport Moved:** The `config` and `http` (now `transport`) packages were moved into the infrastructure layer, as they are details of how the application is configured and communicates.
- **Consolidated Driven Adapter:** The logic from the numerous old adapter files (`apps.go`, `cloudlet.go`, etc.) has been consolidated into a single, true adapter at `internal/adapters/driven/edgeconnect/adapter.go`.
- **Clear Responsibility:** The new `adapter.go` is now solely responsible for:
  1. Implementing the driven port (repository) interfaces.
  2. Translating domain models into the data structures required by the `edgeconnect_client`.
  3. Calling the `edgeconnect_client` to perform the API operations.
  4. Translating the results back into domain models.
- **Updated Dependency Injection:** The application's entry point (`cmd/cli/main.go`) has been updated to construct and inject dependencies according to the new architecture: `infra_client` -> `adapter` -> `service` -> `cli_command`.
- **SDK & Apply Command:** The SDK examples and the `apply` command have been updated to use the new adapter and its repository methods, removing all direct client instantiation.
2025-10-09 00:47:45 +02:00

46 lines
935 B
Go

package config
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestGetDeploymentType(t *testing.T) {
// Test k8s app
k8sConfig := &EdgeConnectConfig{
Spec: Spec{
K8sApp: &K8sApp{},
},
}
assert.Equal(t, "kubernetes", k8sConfig.GetDeploymentType())
// Test docker app
dockerConfig := &EdgeConnectConfig{
Spec: Spec{
DockerApp: &DockerApp{},
},
}
assert.Equal(t, "docker", dockerConfig.GetDeploymentType())
}
func TestGetImagePath(t *testing.T) {
// Test docker app with image
dockerConfig := &EdgeConnectConfig{
Spec: Spec{
DockerApp: &DockerApp{
Image: "my-custom-image:latest",
},
},
}
assert.Equal(t, "my-custom-image:latest", dockerConfig.GetImagePath())
// Test k8s app (should use default)
k8sConfig := &EdgeConnectConfig{
Spec: Spec{
K8sApp: &K8sApp{},
},
}
assert.Equal(t, "https://registry-1.docker.io/library/nginx:latest", k8sConfig.GetImagePath())
}