Skip to content

Commit

Permalink
fix: fix ignoring order in natural sorting
Browse files Browse the repository at this point in the history
  • Loading branch information
hugop95 authored Dec 2, 2024
1 parent eed1b80 commit 82cb68a
Show file tree
Hide file tree
Showing 2 changed files with 140 additions and 1 deletion.
140 changes: 140 additions & 0 deletions test/compare.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
import { describe, expect, it } from 'vitest'

import type { SortingNode } from '../typings'

import { compare } from '../utils/compare'

describe('compare', () => {
describe('alphabetical', () => {
let compareOptions = {
specialCharacters: 'keep',
type: 'alphabetical',
ignoreCase: false,
locales: 'en-US',
order: 'asc',
} as const

it('sorts by order asc', () => {
expect(
compare(
createTestNode({ name: 'b' }),
createTestNode({ name: 'a' }),
compareOptions,
),
).toBe(1)
})

it('sorts by order desc', () => {
expect(
compare(createTestNode({ name: 'a' }), createTestNode({ name: 'b' }), {
...compareOptions,
order: 'desc',
}),
).toBe(1)
})

it('sorts ignoring case', () => {
expect(
compare(
createTestNode({ name: 'aB' }),
createTestNode({ name: 'Ab' }),
{
...compareOptions,
ignoreCase: true,
},
),
).toBe(0)
})

it('sorts while trimming special characters', () => {
expect(
compare(createTestNode({ name: '_a' }), createTestNode({ name: 'a' }), {
...compareOptions,
specialCharacters: 'trim',
}),
).toBe(0)
})

it('sorts while removing special characters', () => {
expect(
compare(
createTestNode({ name: 'ab' }),
createTestNode({ name: 'a_b' }),
{
...compareOptions,
specialCharacters: 'remove',
},
),
).toBe(0)
})
})

describe('natural', () => {
let compareOptions = {
specialCharacters: 'keep',
ignoreCase: false,
locales: 'en-US',
type: 'natural',
order: 'asc',
} as const

it('sorts by order asc', () => {
expect(
compare(
createTestNode({ name: 'b' }),
createTestNode({ name: 'a' }),
compareOptions,
),
).toBe(1)
})

it('sorts by order desc', () => {
expect(
compare(createTestNode({ name: 'a' }), createTestNode({ name: 'b' }), {
...compareOptions,
order: 'desc',
}),
).toBe(1)
})

it('sorts ignoring case', () => {
expect(
compare(
createTestNode({ name: 'aB' }),
createTestNode({ name: 'Ab' }),
{
...compareOptions,
ignoreCase: true,
},
),
).toBe(0)
})

it('sorts while trimming special characters', () => {
expect(
compare(createTestNode({ name: '_a' }), createTestNode({ name: 'a' }), {
...compareOptions,
specialCharacters: 'trim',
}),
).toBe(0)
})

it('sorts while removing special characters', () => {
expect(
compare(
createTestNode({ name: 'ab' }),
createTestNode({ name: 'a_b' }),
{
...compareOptions,
specialCharacters: 'remove',
},
),
).toBe(0)
})
})

let createTestNode = ({ name }: { name: string }): SortingNode =>
({
name,
}) as SortingNode
})
1 change: 0 additions & 1 deletion utils/compare.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@ export let compare = <T extends SortingNode>(
} else if (options.type === 'natural') {
let naturalCompare = createNaturalCompare({
locale: options.locales.toString(),
order: options.order,
})
let formatString = getFormatStringFunction(
options.ignoreCase,
Expand Down

0 comments on commit 82cb68a

Please sign in to comment.