import { PASSWORD, USERNAME, createProviders, createRandomString } from './config';
import { describe, expect, it } from 'vitest';

describe('test getList', async () => {
  const { dataProvider, authProvider } = createProviders();

  it('should fail when not logged in', async () => {
    expect(
      dataProvider.getList('entities/category', {
        pagination: {
          page: 1,
          perPage: 10
        },
        sort: {
          field: 'id',
          order: 'ASC'
        }
      })
    ).rejects.toThrow('iam.error.forbidden');
  });

  it('should success with empty params', async () => {
    await authProvider.login({ username: USERNAME, password: PASSWORD });
    await dataProvider.create('entities/category', {
      data: {
        description: { it: createRandomString(10) }
      }
    });
    const { data } = await dataProvider.getList('entities/category', {});
    expect(data).toBeDefined();
    expect(data?.length).toBeGreaterThan(0);
  });

  it('should success with valid data', async () => {
    await authProvider.login({ username: USERNAME, password: PASSWORD });
    const category = await dataProvider.create('entities/category', {
      data: {
        description: { it: createRandomString(10) }
      }
    });

    const { data: allRecords } = await dataProvider.getList('entities/category', {
      pagination: {
        page: 1,
        perPage: 10
      },
      sort: {
        field: 'id',
        order: 'ASC'
      }
    });

    expect(allRecords).toBeDefined();

    const { data: filteredRecords } = await dataProvider.getList('entities/category', {
      filter: {
        'description.it__like': category.data?.description?.it
      }
    });

    expect(filteredRecords).toBeDefined();
    expect(filteredRecords?.length).toBe(1);
  });
});
