package purchasing

import (
	"context"
	"errors"
	"testing"

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

	"github.com/TaruLab/keluargamart-backend/internal/db"
)

var errApproveWrite = errors.New("approve write failed")

// ApprovePurchaseOrder flips draft→approved: zero rows means the order was
// not a draft (concurrent approve/cancel slipped past the locked read) and
// must surface, never pass as an approval.
func TestRepositoryApproveOrderRowCount(t *testing.T) {
	r := &Repository{}
	ctx := context.Background()
	cases := []struct {
		name string
		tag  pgconn.CommandTag
		err  error
		want error
	}{
		{name: "zero rows is not an approval", tag: pgconn.NewCommandTag("UPDATE 0"), want: ErrNotFound},
		{name: "one row passes", tag: pgconn.NewCommandTag("UPDATE 1"), want: nil},
		{name: "driver error surfaces unchanged", tag: pgconn.NewCommandTag("UPDATE 0"), err: errApproveWrite, want: errApproveWrite},
	}
	for _, tc := range cases {
		t.Run(tc.name, func(t *testing.T) {
			err := r.ApproveOrder(ctx, &fakeTx{tag: tc.tag, err: tc.err}, db.ApprovePurchaseOrderParams{ID: 7})
			if tc.want == nil {
				if err != nil {
					t.Errorf("ApproveOrder error = %v, want nil", err)
				}
				return
			}
			if !errors.Is(err, tc.want) {
				t.Errorf("ApproveOrder error = %v, want %v", err, tc.want)
			}
		})
	}
}
