mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-20 21:41:55 +00:00
96 lines
2.9 KiB
Go
96 lines
2.9 KiB
Go
package test
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"testing"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
|
|
"gitlab.com/mbugroup/lti-api.git/internal/entities"
|
|
"gitlab.com/mbugroup/lti-api.git/internal/utils"
|
|
)
|
|
|
|
func TestKandangIntegration(t *testing.T) {
|
|
app, db := setupIntegrationApp(t)
|
|
areaID := createArea(t, app, "Area Kandang")
|
|
locationID := createLocation(t, app, "Location For Kandang", "Address", areaID)
|
|
|
|
t.Run("create kandang success", func(t *testing.T) {
|
|
resp, body := doJSONRequest(t, app, http.MethodPost, "/api/master-data/kandangs", map[string]any{
|
|
"name": "Kandang OK",
|
|
"location_id": locationID,
|
|
"pic_id": 1,
|
|
})
|
|
if resp.StatusCode != fiber.StatusCreated {
|
|
t.Fatalf("expected 201, got %d: %s", resp.StatusCode, string(body))
|
|
}
|
|
|
|
var createResp struct {
|
|
Data struct {
|
|
Status string `json:"status"`
|
|
} `json:"data"`
|
|
}
|
|
if err := json.Unmarshal(body, &createResp); err != nil {
|
|
t.Fatalf("failed to parse create response: %v", err)
|
|
}
|
|
if createResp.Data.Status == "" {
|
|
t.Fatalf("expected default status to be returned, got empty")
|
|
}
|
|
})
|
|
|
|
t.Run("create kandang with unknown location fails", func(t *testing.T) {
|
|
resp, body := doJSONRequest(t, app, http.MethodPost, "/api/master-data/kandangs", map[string]any{
|
|
"name": "Kandang Fail",
|
|
"status": "ACTIVE",
|
|
"location_id": 999,
|
|
"pic_id": 1,
|
|
})
|
|
if resp.StatusCode != fiber.StatusNotFound {
|
|
t.Fatalf("expected 404, got %d: %s", resp.StatusCode, string(body))
|
|
}
|
|
})
|
|
|
|
t.Run("cannot assign project floc with existing active kandang", func(t *testing.T) {
|
|
fcrID := createFcr(t, app, "FCR For Floc", []map[string]any{
|
|
{"weight": 1.0, "fcr_number": 1.5, "mortality": 2.0},
|
|
})
|
|
flocID := createFlock(t, app, "Floc Test")
|
|
|
|
projectFloc := entities.ProjectFlock{
|
|
FlockId: flocID,
|
|
AreaId: areaID,
|
|
Category: string(utils.ProjectFlockCategoryGrowing),
|
|
FcrId: fcrID,
|
|
LocationId: locationID,
|
|
Period: 1,
|
|
CreatedBy: 1,
|
|
}
|
|
if err := db.Create(&projectFloc).Error; err != nil {
|
|
t.Fatalf("failed to seed project floc: %v", err)
|
|
}
|
|
|
|
resp, body := doJSONRequest(t, app, http.MethodPost, "/api/master-data/kandangs", map[string]any{
|
|
"name": "Kandang Active 1",
|
|
"status": "ACTIVE",
|
|
"location_id": locationID,
|
|
"pic_id": 1,
|
|
"project_flock_id": projectFloc.Id,
|
|
})
|
|
if resp.StatusCode != fiber.StatusCreated {
|
|
t.Fatalf("expected 201 when creating first kandang, got %d: %s", resp.StatusCode, string(body))
|
|
}
|
|
|
|
resp, body = doJSONRequest(t, app, http.MethodPost, "/api/master-data/kandangs", map[string]any{
|
|
"name": "Kandang Active 2",
|
|
"status": "ACTIVE",
|
|
"location_id": locationID,
|
|
"pic_id": 1,
|
|
"project_flock_id": projectFloc.Id,
|
|
})
|
|
if resp.StatusCode != fiber.StatusConflict {
|
|
t.Fatalf("expected 409 when creating second active kandang, got %d: %s", resp.StatusCode, string(body))
|
|
}
|
|
})
|
|
}
|