feat: add search and pagination to tariff period services
This commit is contained in:
72
internal/http/periode_tarif_test.go
Normal file
72
internal/http/periode_tarif_test.go
Normal file
@@ -0,0 +1,72 @@
|
||||
package http
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"primaya-api/cpone-middleware/internal/repository"
|
||||
)
|
||||
|
||||
type fakePeriodeTarifRepository struct {
|
||||
items []repository.PeriodeTarif
|
||||
err error
|
||||
}
|
||||
|
||||
func (f *fakePeriodeTarifRepository) ListPeriodeTarif(_ context.Context) ([]repository.PeriodeTarif, error) {
|
||||
return f.items, f.err
|
||||
}
|
||||
|
||||
func (f *fakePeriodeTarifRepository) ListPeriodeTarifLayanan(_ context.Context, _ repository.PeriodeTarifLayananListParams) (repository.PeriodeTarifLayananPage, error) {
|
||||
return repository.PeriodeTarifLayananPage{}, f.err
|
||||
}
|
||||
|
||||
func TestListPeriodeTarifReturnsAvailablePeriods(t *testing.T) {
|
||||
keterangan := "Tarif Dasar 2026"
|
||||
repo := &fakePeriodeTarifRepository{items: []repository.PeriodeTarif{{
|
||||
PeriodeTarifID: 42, Keterangan: &keterangan,
|
||||
TanggalBerlaku: "2026-01-01", TanggalBerakhir: "2026-12-31",
|
||||
}}}
|
||||
|
||||
recorder := httptest.NewRecorder()
|
||||
request := httptest.NewRequest(http.MethodGet, "/api/cpone/periode-tarif", nil)
|
||||
Handler{periodeTarifRepo: repo}.ListPeriodeTarif(recorder, request)
|
||||
|
||||
if recorder.Code != http.StatusOK {
|
||||
t.Fatalf("status=%d body=%s", recorder.Code, recorder.Body.String())
|
||||
}
|
||||
for _, expected := range []string{
|
||||
`"success":true`, `"message":"ok"`, `"PeriodeTarifID":42`,
|
||||
`"Keterangan":"Tarif Dasar 2026"`, `"TanggalBerlaku":"2026-01-01"`,
|
||||
`"TanggalBerakhir":"2026-12-31"`,
|
||||
} {
|
||||
if !strings.Contains(recorder.Body.String(), expected) {
|
||||
t.Fatalf("response missing %s: %s", expected, recorder.Body.String())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestListPeriodeTarifReturnsEmptyArray(t *testing.T) {
|
||||
recorder := httptest.NewRecorder()
|
||||
request := httptest.NewRequest(http.MethodGet, "/api/cpone/periode-tarif", nil)
|
||||
Handler{periodeTarifRepo: &fakePeriodeTarifRepository{items: []repository.PeriodeTarif{}}}.
|
||||
ListPeriodeTarif(recorder, request)
|
||||
|
||||
if recorder.Code != http.StatusOK || !strings.Contains(recorder.Body.String(), `"data":[]`) {
|
||||
t.Fatalf("status=%d body=%s", recorder.Code, recorder.Body.String())
|
||||
}
|
||||
}
|
||||
|
||||
func TestListPeriodeTarifInternalError(t *testing.T) {
|
||||
recorder := httptest.NewRecorder()
|
||||
request := httptest.NewRequest(http.MethodGet, "/api/cpone/periode-tarif", nil)
|
||||
Handler{periodeTarifRepo: &fakePeriodeTarifRepository{err: errors.New("query failed")}}.
|
||||
ListPeriodeTarif(recorder, request)
|
||||
|
||||
if recorder.Code != http.StatusInternalServerError {
|
||||
t.Fatalf("status=%d body=%s", recorder.Code, recorder.Body.String())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user