package permissions

import (
	"context"
	"testing"

	"github.com/DATA-DOG/go-sqlmock"
	"github.com/stretchr/testify/require"
)

func TestEnsureOrganizationViewShare_InsertsWhenMissing(t *testing.T) {
	db, mock, err := sqlmock.New()
	require.NoError(t, err)
	defer db.Close()

	service := NewFolderAccessService(nil, db)
	ctx := context.Background()

	mock.ExpectQuery("SELECT COUNT\\(\\*\\) FROM `FolderShare` WHERE `FolderId` = \\? AND `SharedToType` = \\?").
		WithArgs("folder-public", "Organization").
		WillReturnRows(sqlmock.NewRows([]string{"count"}).AddRow(0))
	mock.ExpectExec("INSERT INTO `FolderShare`").
		WithArgs(sqlmock.AnyArg(), "folder-public", "ALL_INTERNAL", "Organization", "View", "user-admin").
		WillReturnResult(sqlmock.NewResult(1, 1))

	err = service.EnsureOrganizationViewShare(ctx, "folder-public", "user-admin")
	require.NoError(t, err)
	require.NoError(t, mock.ExpectationsWereMet())
}

func TestEnsureOrganizationViewShare_SkipsExistingOrganizationShare(t *testing.T) {
	db, mock, err := sqlmock.New()
	require.NoError(t, err)
	defer db.Close()

	service := NewFolderAccessService(nil, db)
	ctx := context.Background()

	mock.ExpectQuery("SELECT COUNT\\(\\*\\) FROM `FolderShare` WHERE `FolderId` = \\? AND `SharedToType` = \\?").
		WithArgs("folder-public", "Organization").
		WillReturnRows(sqlmock.NewRows([]string{"count"}).AddRow(1))

	err = service.EnsureOrganizationViewShare(ctx, "folder-public", "user-admin")
	require.NoError(t, err)
	require.NoError(t, mock.ExpectationsWereMet())
}
