package service import ( "context" "errors" "testing" persistencemock "github.com/ocdp/cluster-service/internal/adapter/output/persistence/mock" "github.com/ocdp/cluster-service/internal/domain/entity" "github.com/ocdp/cluster-service/internal/domain/repository" ) func TestDeleteInstanceIgnoresMissingRelease(t *testing.T) { ctx := context.Background() instanceRepo := persistencemock.NewInstanceRepositoryMock() instance := &entity.Instance{ ID: "inst-1", ClusterID: "cluster-1", Name: "demo", Namespace: "default", } if err := instanceRepo.Create(ctx, instance); err != nil { t.Fatalf("failed to seed instance: %v", err) } cluster := &entity.Cluster{ID: "cluster-1", Name: "cluster", Host: "https://example.com"} clusterRepo := &stubClusterRepo{cluster: cluster} svc := NewInstanceService( instanceRepo, clusterRepo, nil, &stubHelmClient{uninstallErr: entity.ErrInstanceNotFound}, nil, nil, ) if err := svc.DeleteInstance(ctx, instance.ID); err != nil { t.Fatalf("DeleteInstance returned error: %v", err) } if _, err := instanceRepo.GetByID(ctx, instance.ID); !errors.Is(err, entity.ErrInstanceNotFound) { t.Fatalf("expected instance removed, got err=%v", err) } } type stubClusterRepo struct { cluster *entity.Cluster } func (s *stubClusterRepo) Create(ctx context.Context, cluster *entity.Cluster) error { s.cluster = cluster return nil } func (s *stubClusterRepo) GetByID(ctx context.Context, id string) (*entity.Cluster, error) { if s.cluster != nil && s.cluster.ID == id { return s.cluster, nil } return nil, entity.ErrClusterNotFound } func (*stubClusterRepo) GetByName(ctx context.Context, name string) (*entity.Cluster, error) { return nil, entity.ErrClusterNotFound } func (*stubClusterRepo) Update(ctx context.Context, cluster *entity.Cluster) error { return nil } func (*stubClusterRepo) Delete(ctx context.Context, id string) error { return nil } func (*stubClusterRepo) List(ctx context.Context) ([]*entity.Cluster, error) { return nil, nil } type stubHelmClient struct { uninstallErr error } func (*stubHelmClient) Install(ctx context.Context, cluster *entity.Cluster, instance *entity.Instance) error { return nil } func (*stubHelmClient) Upgrade(ctx context.Context, cluster *entity.Cluster, instance *entity.Instance) error { return nil } func (s *stubHelmClient) Uninstall(ctx context.Context, cluster *entity.Cluster, releaseName, namespace string) error { return s.uninstallErr } func (*stubHelmClient) Rollback(ctx context.Context, cluster *entity.Cluster, releaseName, namespace string, revision int) error { return nil } func (*stubHelmClient) GetStatus(ctx context.Context, cluster *entity.Cluster, releaseName, namespace string) (*entity.Instance, error) { return nil, nil } func (*stubHelmClient) GetHistory(ctx context.Context, cluster *entity.Cluster, releaseName, namespace string) ([]*entity.ReleaseHistory, error) { return nil, nil } func (*stubHelmClient) List(ctx context.Context, cluster *entity.Cluster, namespace string) ([]*entity.Instance, error) { return nil, nil } func (*stubHelmClient) GetValues(ctx context.Context, cluster *entity.Cluster, releaseName, namespace string) (map[string]interface{}, error) { return nil, nil } var _ repository.ClusterRepository = (*stubClusterRepo)(nil) var _ repository.HelmClient = (*stubHelmClient)(nil)