import { AppBasePath } from '@/types/AppBasePath';
import { isMatchingLocation } from '../isMatchingLocation';

describe('isMatchingLocation', () => {
  it('returns true when paths match with no basePath', () => {
    const location = {
      pathname: '/example',
      state: null,
      key: 'test-key',
      search: '',
      hash: '',
    };
    const result = isMatchingLocation(location, '/example');
    expect(result).toBe(true);
  });

  it('returns false when paths do not match with no basePath', () => {
    const location = {
      pathname: '/example',
      state: null,
      key: 'test-key',
      search: '',
      hash: '',
    };
    const result = isMatchingLocation(location, '/non-match');
    expect(result).toBe(false);
  });

  it('returns true when paths match with basePath', () => {
    const location = {
      pathname: `${AppBasePath.Settings}/example`,
      state: null,
      key: 'test-key',
      search: '',
      hash: '',
    };
    const result = isMatchingLocation(
      location,
      'example',
      AppBasePath.Settings,
    );
    expect(result).toBe(true);
  });

  it('returns false when paths do not match with basePath', () => {
    const location = {
      pathname: `${AppBasePath.Settings}/example`,
      state: null,
      key: 'test-key',
      search: '',
      hash: '',
    };

    const result = isMatchingLocation(
      location,
      'non-match',
      AppBasePath.Settings,
    );
    expect(result).toBe(false);
  });

  it('handles trailing slashes in basePath correctly', () => {
    const location = {
      pathname: `${AppBasePath.Settings}/example`,
      state: null,
      key: 'test-key',
      search: '',
      hash: '',
    };
    const result = isMatchingLocation(
      location,
      'example',
      (AppBasePath.Settings + '/') as AppBasePath,
    );
    expect(result).toBe(true);
  });

  it('handles paths without basePath correctly', () => {
    const location = {
      pathname: '/example',
      state: null,
      key: 'test-key',
      search: '',
      hash: '',
    };
    const result = isMatchingLocation(location, '/example');
    expect(result).toBe(true);
  });
});
