package admin

import (
	"errors"
	"testing"

	"github.com/jackc/pgx/v5/pgconn"
)

func TestIsAdjustmentRetryable(t *testing.T) {
	t.Parallel()

	tests := []struct {
		name string
		err  error
		want bool
	}{
		{
			name: "serialization failure",
			err:  &pgconn.PgError{Code: "40001"},
			want: true,
		},
		{
			name: "deadlock detected",
			err:  &pgconn.PgError{Code: "40P01"},
			want: true,
		},
		{
			name: "idempotency race unique violation",
			err:  &pgconn.PgError{Code: "23505"},
			want: true,
		},
		{
			name: "check violation",
			err:  &pgconn.PgError{Code: "23514"},
			want: false,
		},
		{
			name: "non postgres error",
			err:  errors.New("network timeout"),
			want: false,
		},
	}

	for _, tt := range tests {
		tt := tt
		t.Run(tt.name, func(t *testing.T) {
			t.Parallel()
			if got := isAdjustmentRetryable(tt.err); got != tt.want {
				t.Fatalf("isAdjustmentRetryable() = %t, want %t", got, tt.want)
			}
		})
	}
}
