276 lines
9.3 KiB
Go
276 lines
9.3 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"testing"
|
|
|
|
"wucher/internal/domain/health_insurance_companies"
|
|
)
|
|
|
|
type healthInsuranceCompaniesRepoMock struct {
|
|
createCalled bool
|
|
updateCalled bool
|
|
deleteCalled bool
|
|
getByIDCalled bool
|
|
listCalled bool
|
|
|
|
lastCreate *health_insurance_companies.HealthInsuranceCompany
|
|
lastUpdate *health_insurance_companies.HealthInsuranceCompany
|
|
lastDeleteID []byte
|
|
lastDeleteBy []byte
|
|
lastGetByID []byte
|
|
lastListFilter string
|
|
lastListSort string
|
|
lastListLimit int
|
|
lastListOffset int
|
|
|
|
getByIDResult *health_insurance_companies.HealthInsuranceCompany
|
|
listResult []health_insurance_companies.HealthInsuranceCompany
|
|
listTotal int64
|
|
|
|
createErr error
|
|
updateErr error
|
|
deleteErr error
|
|
getByIDErr error
|
|
listErr error
|
|
resolveErr error
|
|
|
|
resolveResult map[string]health_insurance_companies.StateDetail
|
|
resolveLandResult map[string]health_insurance_companies.LandDetail
|
|
}
|
|
|
|
func (m *healthInsuranceCompaniesRepoMock) Create(_ context.Context, o *health_insurance_companies.HealthInsuranceCompany) error {
|
|
m.createCalled = true
|
|
m.lastCreate = o
|
|
return m.createErr
|
|
}
|
|
|
|
func (m *healthInsuranceCompaniesRepoMock) Update(_ context.Context, o *health_insurance_companies.HealthInsuranceCompany) error {
|
|
m.updateCalled = true
|
|
m.lastUpdate = o
|
|
return m.updateErr
|
|
}
|
|
|
|
func (m *healthInsuranceCompaniesRepoMock) Delete(_ context.Context, id []byte, deletedBy []byte) error {
|
|
m.deleteCalled = true
|
|
m.lastDeleteID = id
|
|
m.lastDeleteBy = deletedBy
|
|
return m.deleteErr
|
|
}
|
|
|
|
func (m *healthInsuranceCompaniesRepoMock) GetByID(_ context.Context, id []byte) (*health_insurance_companies.HealthInsuranceCompany, error) {
|
|
m.getByIDCalled = true
|
|
m.lastGetByID = id
|
|
return m.getByIDResult, m.getByIDErr
|
|
}
|
|
|
|
func (m *healthInsuranceCompaniesRepoMock) List(_ context.Context, filter, sort string, limit, offset int) ([]health_insurance_companies.HealthInsuranceCompany, int64, error) {
|
|
m.listCalled = true
|
|
m.lastListFilter = filter
|
|
m.lastListSort = sort
|
|
m.lastListLimit = limit
|
|
m.lastListOffset = offset
|
|
return m.listResult, m.listTotal, m.listErr
|
|
}
|
|
|
|
func (m *healthInsuranceCompaniesRepoMock) ResolveStateDetails(_ context.Context, _ []string) (map[string]health_insurance_companies.StateDetail, error) {
|
|
return m.resolveResult, m.resolveErr
|
|
}
|
|
|
|
func (m *healthInsuranceCompaniesRepoMock) ResolveLandDetails(_ context.Context, _ []string) (map[string]health_insurance_companies.LandDetail, error) {
|
|
return m.resolveLandResult, m.resolveErr
|
|
}
|
|
|
|
func TestNewHealthInsuranceCompaniesService(t *testing.T) {
|
|
repo := &healthInsuranceCompaniesRepoMock{}
|
|
svc := NewHealthInsuranceCompaniesService(repo)
|
|
if svc == nil || svc.repo == nil {
|
|
t.Fatalf("expected service and repo initialized")
|
|
}
|
|
}
|
|
|
|
func TestHealthInsuranceCompaniesServiceCreate(t *testing.T) {
|
|
repo := &healthInsuranceCompaniesRepoMock{}
|
|
svc := NewHealthInsuranceCompaniesService(repo)
|
|
row := &health_insurance_companies.HealthInsuranceCompany{Name: "Name"}
|
|
|
|
if err := svc.Create(context.Background(), row); err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if !repo.createCalled || repo.lastCreate != row {
|
|
t.Fatalf("expected Create forwarded to repo")
|
|
}
|
|
|
|
repo.createErr = errors.New("create failed")
|
|
if err := svc.Create(context.Background(), row); err == nil {
|
|
t.Fatalf("expected error from repo")
|
|
}
|
|
}
|
|
|
|
func TestHealthInsuranceCompaniesServiceUpdate(t *testing.T) {
|
|
repo := &healthInsuranceCompaniesRepoMock{}
|
|
svc := NewHealthInsuranceCompaniesService(repo)
|
|
row := &health_insurance_companies.HealthInsuranceCompany{Name: "Updated"}
|
|
|
|
if err := svc.Update(context.Background(), row); err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if !repo.updateCalled || repo.lastUpdate != row {
|
|
t.Fatalf("expected Update forwarded to repo")
|
|
}
|
|
|
|
repo.updateErr = errors.New("update failed")
|
|
if err := svc.Update(context.Background(), row); err == nil {
|
|
t.Fatalf("expected error from repo")
|
|
}
|
|
}
|
|
|
|
func TestHealthInsuranceCompaniesServiceDelete(t *testing.T) {
|
|
repo := &healthInsuranceCompaniesRepoMock{}
|
|
svc := NewHealthInsuranceCompaniesService(repo)
|
|
id := []byte("id")
|
|
deletedBy := []byte("by")
|
|
|
|
if err := svc.Delete(context.Background(), id, deletedBy); err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if !repo.deleteCalled {
|
|
t.Fatalf("expected Delete forwarded to repo")
|
|
}
|
|
if string(repo.lastDeleteID) != string(id) || string(repo.lastDeleteBy) != string(deletedBy) {
|
|
t.Fatalf("expected delete params forwarded")
|
|
}
|
|
|
|
repo.deleteErr = errors.New("delete failed")
|
|
if err := svc.Delete(context.Background(), id, deletedBy); err == nil {
|
|
t.Fatalf("expected error from repo")
|
|
}
|
|
}
|
|
|
|
func TestHealthInsuranceCompaniesServiceGetByID(t *testing.T) {
|
|
expected := &health_insurance_companies.HealthInsuranceCompany{Name: "A"}
|
|
repo := &healthInsuranceCompaniesRepoMock{getByIDResult: expected}
|
|
svc := NewHealthInsuranceCompaniesService(repo)
|
|
id := []byte("id")
|
|
|
|
got, err := svc.GetByID(context.Background(), id)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if got != expected {
|
|
t.Fatalf("unexpected result")
|
|
}
|
|
if !repo.getByIDCalled || string(repo.lastGetByID) != string(id) {
|
|
t.Fatalf("expected GetByID forwarded")
|
|
}
|
|
|
|
repo.getByIDErr = errors.New("get failed")
|
|
if _, err := svc.GetByID(context.Background(), id); err == nil {
|
|
t.Fatalf("expected error from repo")
|
|
}
|
|
}
|
|
|
|
func TestHealthInsuranceCompaniesServiceList(t *testing.T) {
|
|
repo := &healthInsuranceCompaniesRepoMock{
|
|
listResult: []health_insurance_companies.HealthInsuranceCompany{{Name: "A"}},
|
|
listTotal: 1,
|
|
}
|
|
svc := NewHealthInsuranceCompaniesService(repo)
|
|
|
|
rows, total, err := svc.List(context.Background(), "find", "name", 10, 20)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if len(rows) != 1 || total != 1 {
|
|
t.Fatalf("unexpected list result")
|
|
}
|
|
if !repo.listCalled {
|
|
t.Fatalf("expected List forwarded to repo")
|
|
}
|
|
if repo.lastListFilter != "find" || repo.lastListSort != "name ASC" || repo.lastListLimit != 10 || repo.lastListOffset != 20 {
|
|
t.Fatalf("unexpected list args forwarded")
|
|
}
|
|
|
|
rows, total, err = svc.List(context.Background(), "find", "sortkey", 10, 20)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if len(rows) != 1 || total != 1 {
|
|
t.Fatalf("unexpected list result")
|
|
}
|
|
if repo.lastListSort != "is_active DESC, CASE WHEN is_active = 1 AND sortkey IS NOT NULL AND sortkey >= 0 THEN 0 ELSE 1 END ASC, CASE WHEN is_active = 1 AND sortkey IS NOT NULL AND sortkey >= 0 THEN sortkey END ASC, name ASC" {
|
|
t.Fatalf("unexpected sortkey args forwarded: %q", repo.lastListSort)
|
|
}
|
|
|
|
repo.listErr = errors.New("list failed")
|
|
if _, _, err := svc.List(context.Background(), "", "unknown", 1, 0); err == nil {
|
|
t.Fatalf("expected error from repo")
|
|
}
|
|
}
|
|
|
|
func TestNormalizeHealthInsuranceCompaniesSort(t *testing.T) {
|
|
cases := map[string]string{
|
|
"name": "name ASC",
|
|
"-name": "name DESC",
|
|
"sortkey": "is_active DESC, CASE WHEN is_active = 1 AND sortkey IS NOT NULL AND sortkey >= 0 THEN 0 ELSE 1 END ASC, CASE WHEN is_active = 1 AND sortkey IS NOT NULL AND sortkey >= 0 THEN sortkey END ASC, name ASC",
|
|
"-sortkey": "is_active DESC, CASE WHEN is_active = 1 AND sortkey IS NOT NULL AND sortkey >= 0 THEN 0 ELSE 1 END ASC, CASE WHEN is_active = 1 AND sortkey IS NOT NULL AND sortkey >= 0 THEN sortkey END DESC, name ASC",
|
|
"state": "state ASC",
|
|
"-state": "state DESC",
|
|
"address": "address ASC",
|
|
"-address": "address DESC",
|
|
"mobile_number": "mobile_number ASC",
|
|
"-mobile_number": "mobile_number DESC",
|
|
"email": "email ASC",
|
|
"-email": "email DESC",
|
|
"note": "note ASC",
|
|
"-note": "note DESC",
|
|
"is_active": "is_active ASC",
|
|
"-is_active": "is_active DESC",
|
|
"created_at": "created_at ASC",
|
|
"-created_at": "created_at DESC",
|
|
"updated_at": "updated_at ASC",
|
|
"-updated_at": "updated_at DESC",
|
|
"unknown": "",
|
|
"": "",
|
|
}
|
|
|
|
for in, want := range cases {
|
|
if got := normalizeHealthInsuranceCompaniesSort(in); got != want {
|
|
t.Fatalf("normalizeHealthInsuranceCompaniesSort(%q) = %q, want %q", in, got, want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestHealthInsuranceCompaniesServiceResolveStateDetails(t *testing.T) {
|
|
want := map[string]health_insurance_companies.StateDetail{
|
|
"berlin": {FederalStateID: "id1", FederalState: "Berlin", LandName: "Deutschland", LandISOCode: "DE"},
|
|
}
|
|
repo := &healthInsuranceCompaniesRepoMock{resolveResult: want}
|
|
svc := NewHealthInsuranceCompaniesService(repo)
|
|
|
|
got, err := svc.ResolveStateDetails(context.Background(), []string{"Berlin"})
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if got["berlin"].FederalStateID != "id1" {
|
|
t.Fatalf("unexpected resolve result")
|
|
}
|
|
}
|
|
|
|
func TestHealthInsuranceCompaniesServiceResolveLandDetails(t *testing.T) {
|
|
want := map[string]health_insurance_companies.LandDetail{
|
|
"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d": {LandID: "018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d", LandName: "Deutschland", LandISOCode: "DE"},
|
|
}
|
|
repo := &healthInsuranceCompaniesRepoMock{resolveLandResult: want}
|
|
svc := NewHealthInsuranceCompaniesService(repo)
|
|
|
|
got, err := svc.ResolveLandDetails(context.Background(), []string{"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"})
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if got["018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"].LandName != "Deutschland" {
|
|
t.Fatalf("unexpected land resolve result")
|
|
}
|
|
}
|