package managerserver

import (
	"encoding/json"
	"net/http"
	"net/http/httptest"
	"testing"
)

func TestUpdateKeyspacePoolCreateRateRequiresRate(t *testing.T) {
	s := newServerForTest(nil, nil, nil, nil)

	rec := httptest.NewRecorder()
	req := httptest.NewRequest(http.MethodPost, "/api/keyspace/update_pool_create_rate", nil)
	s.updateKeyspacePoolCreateRate(rec, req)

	if rec.Code != http.StatusBadRequest {
		t.Fatalf("expected 400, got %d body=%s", rec.Code, rec.Body.String())
	}
}

func TestUpdateKeyspacePoolCreateRateUpdatesMemoryOnly(t *testing.T) {
	s := newServerForTest(nil, nil, nil, nil)

	rec := httptest.NewRecorder()
	req := httptest.NewRequest(http.MethodPost,
		"/api/keyspace/update_pool_create_rate?create-rate-per-second=1.5", nil)
	s.updateKeyspacePoolCreateRate(rec, req)

	if rec.Code != http.StatusOK {
		t.Fatalf("expected 200, got %d body=%s", rec.Code, rec.Body.String())
	}

	if got, ok := s.createRateStore.Get(); !ok || got != 1.5 {
		t.Fatalf("memory rate = (%v, %t), want (1.5, true)", got, ok)
	}

	var result updatePoolCreateRateResult
	if err := json.Unmarshal(rec.Body.Bytes(), &result); err != nil {
		t.Fatalf("decode response: %v", err)
	}
	if result.CreateRatePerSecond != 1.5 {
		t.Fatalf("unexpected response: %+v", result)
	}
}
