mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-20 05:21:57 +00:00
128 lines
4.3 KiB
Go
128 lines
4.3 KiB
Go
package test
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"net/http"
|
|
"testing"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
"gorm.io/gorm"
|
|
|
|
"gitlab.com/mbugroup/lti-api.git/internal/entities"
|
|
)
|
|
|
|
func TestBankIntegration(t *testing.T) {
|
|
app, db := setupIntegrationApp(t)
|
|
|
|
const bankAlias = "BNI"
|
|
const bankName = "Bank Negara Indonesia"
|
|
const bankOwner = "John Doe"
|
|
const bankAccountNumber = "1234567890"
|
|
var bankID uint
|
|
|
|
t.Run("creating bank succeeds", func(t *testing.T) {
|
|
bankID = createBank(t, app, bankName, bankAlias, bankAccountNumber, bankOwner)
|
|
bank := fetchBank(t, db, bankID)
|
|
if bank.Alias != bankAlias {
|
|
t.Fatalf("expected alias %q, got %q", bankAlias, bank.Alias)
|
|
}
|
|
if bank.AccountNumber != bankAccountNumber {
|
|
t.Fatalf("expected account number %q, got %q", bankAccountNumber, bank.AccountNumber)
|
|
}
|
|
})
|
|
|
|
t.Run("creating bank with duplicate name fails", func(t *testing.T) {
|
|
resp, body := doJSONRequest(t, app, http.MethodPost, "/api/master-data/banks", map[string]any{
|
|
"name": bankName,
|
|
"alias": "NEWALIAS",
|
|
"owner": "Owner Name",
|
|
"account_number": "1122334455",
|
|
})
|
|
if resp.StatusCode != fiber.StatusConflict {
|
|
t.Fatalf("expected 409 when creating duplicate bank name, got %d: %s", resp.StatusCode, string(body))
|
|
}
|
|
})
|
|
|
|
t.Run("getting existing bank succeeds", func(t *testing.T) {
|
|
resp, body := doJSONRequest(t, app, http.MethodGet, fmt.Sprintf("/api/master-data/banks/%d", bankID), nil)
|
|
if resp.StatusCode != fiber.StatusOK {
|
|
t.Fatalf("expected 200 when fetching bank, got %d: %s", resp.StatusCode, string(body))
|
|
}
|
|
var payload struct {
|
|
Data struct {
|
|
Id uint `json:"id"`
|
|
Name string `json:"name"`
|
|
Alias string `json:"alias"`
|
|
AccountNumber string `json:"account_number"`
|
|
} `json:"data"`
|
|
}
|
|
if err := json.Unmarshal(body, &payload); err != nil {
|
|
t.Fatalf("failed to parse response: %v", err)
|
|
}
|
|
if payload.Data.Id != bankID {
|
|
t.Fatalf("expected id %d, got %d", bankID, payload.Data.Id)
|
|
}
|
|
if payload.Data.Alias != bankAlias {
|
|
t.Fatalf("expected alias %q, got %q", bankAlias, payload.Data.Alias)
|
|
}
|
|
if payload.Data.AccountNumber != bankAccountNumber {
|
|
t.Fatalf("expected account number %q, got %q", bankAccountNumber, payload.Data.AccountNumber)
|
|
}
|
|
})
|
|
|
|
const updatedName = "BNI Updated"
|
|
|
|
t.Run("updating bank name succeeds", func(t *testing.T) {
|
|
resp, body := doJSONRequest(t, app, http.MethodPatch, fmt.Sprintf("/api/master-data/banks/%d", bankID), map[string]any{
|
|
"name": updatedName,
|
|
})
|
|
if resp.StatusCode != fiber.StatusOK {
|
|
t.Fatalf("expected 200 when updating bank, got %d: %s", resp.StatusCode, string(body))
|
|
}
|
|
var payload struct {
|
|
Data struct {
|
|
Name string `json:"name"`
|
|
} `json:"data"`
|
|
}
|
|
if err := json.Unmarshal(body, &payload); err != nil {
|
|
t.Fatalf("failed to parse response: %v", err)
|
|
}
|
|
if payload.Data.Name != updatedName {
|
|
t.Fatalf("expected updated name %q, got %q", updatedName, payload.Data.Name)
|
|
}
|
|
bank := fetchBank(t, db, bankID)
|
|
if bank.Name != updatedName {
|
|
t.Fatalf("expected persisted name %q, got %q", updatedName, bank.Name)
|
|
}
|
|
})
|
|
|
|
t.Run("updating non existent bank returns 404", func(t *testing.T) {
|
|
resp, body := doJSONRequest(t, app, http.MethodPatch, "/api/master-data/banks/9999", map[string]any{
|
|
"name": "Does Not Matter",
|
|
})
|
|
if resp.StatusCode != fiber.StatusNotFound {
|
|
t.Fatalf("expected 404 when updating missing bank, got %d: %s", resp.StatusCode, string(body))
|
|
}
|
|
})
|
|
|
|
t.Run("deleting bank succeeds", func(t *testing.T) {
|
|
resp, body := doJSONRequest(t, app, http.MethodDelete, fmt.Sprintf("/api/master-data/banks/%d", bankID), nil)
|
|
if resp.StatusCode != fiber.StatusOK {
|
|
t.Fatalf("expected 200 when deleting bank, got %d: %s", resp.StatusCode, string(body))
|
|
}
|
|
var bank entities.Bank
|
|
if err := db.First(&bank, bankID).Error; !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
t.Fatalf("expected bank to be deleted, got error %v", err)
|
|
}
|
|
})
|
|
|
|
t.Run("deleting non existent bank returns 404", func(t *testing.T) {
|
|
resp, body := doJSONRequest(t, app, http.MethodDelete, fmt.Sprintf("/api/master-data/banks/%d", bankID), nil)
|
|
if resp.StatusCode != fiber.StatusNotFound {
|
|
t.Fatalf("expected 404 when deleting missing bank, got %d: %s", resp.StatusCode, string(body))
|
|
}
|
|
})
|
|
}
|