fix(workflows): replace invalid semantic-version action with fallback script
This commit is contained in:
65
frontend/src/utils/__tests__/compareHosts.test.ts
Normal file
65
frontend/src/utils/__tests__/compareHosts.test.ts
Normal file
@@ -0,0 +1,65 @@
|
||||
import { describe, it, expect } from 'vitest'
|
||||
import compareHosts from '../compareHosts'
|
||||
import type { ProxyHost } from '../../api/proxyHosts'
|
||||
|
||||
const hostA: ProxyHost = {
|
||||
uuid: 'a',
|
||||
name: 'Alpha',
|
||||
domain_names: 'alpha.com',
|
||||
forward_host: '127.0.0.1',
|
||||
forward_port: 80,
|
||||
forward_scheme: 'http',
|
||||
enabled: true,
|
||||
ssl_forced: false,
|
||||
websocket_support: false,
|
||||
certificate: null,
|
||||
http2_support: false,
|
||||
hsts_enabled: false,
|
||||
hsts_subdomains: false,
|
||||
block_exploits: false,
|
||||
application: 'none',
|
||||
locations: [],
|
||||
created_at: '2025-01-01',
|
||||
updated_at: '2025-01-01',
|
||||
}
|
||||
|
||||
const hostB: ProxyHost = {
|
||||
uuid: 'b',
|
||||
name: 'Beta',
|
||||
domain_names: 'beta.com',
|
||||
forward_host: '127.0.0.2',
|
||||
forward_port: 8080,
|
||||
forward_scheme: 'http',
|
||||
enabled: true,
|
||||
ssl_forced: false,
|
||||
websocket_support: false,
|
||||
certificate: null,
|
||||
http2_support: false,
|
||||
hsts_enabled: false,
|
||||
hsts_subdomains: false,
|
||||
block_exploits: false,
|
||||
application: 'none',
|
||||
locations: [],
|
||||
created_at: '2025-01-01',
|
||||
updated_at: '2025-01-01',
|
||||
}
|
||||
|
||||
describe('compareHosts', () => {
|
||||
it('returns 0 for unknown sort column (default case)', () => {
|
||||
const res = compareHosts(hostA, hostB, 'unknown' as any, 'asc')
|
||||
expect(res).toBe(0)
|
||||
})
|
||||
|
||||
it('sorts by name', () => {
|
||||
expect(compareHosts(hostA, hostB, 'name', 'asc')).toBeLessThan(0)
|
||||
expect(compareHosts(hostB, hostA, 'name', 'asc')).toBeGreaterThan(0)
|
||||
})
|
||||
|
||||
it('sorts by domain', () => {
|
||||
expect(compareHosts(hostA, hostB, 'domain', 'asc')).toBeLessThan(0)
|
||||
})
|
||||
|
||||
it('sorts by forward', () => {
|
||||
expect(compareHosts(hostA, hostB, 'forward', 'asc')).toBeLessThan(0)
|
||||
})
|
||||
})
|
||||
32
frontend/src/utils/compareHosts.ts
Normal file
32
frontend/src/utils/compareHosts.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
import type { ProxyHost } from '../api/proxyHosts'
|
||||
|
||||
type SortColumn = 'name' | 'domain' | 'forward'
|
||||
type SortDirection = 'asc' | 'desc'
|
||||
|
||||
export function compareHosts(a: ProxyHost, b: ProxyHost, sortColumn: SortColumn, sortDirection: SortDirection) {
|
||||
let aVal: string
|
||||
let bVal: string
|
||||
|
||||
switch (sortColumn) {
|
||||
case 'name':
|
||||
aVal = (a.name || a.domain_names.split(',')[0] || '').toLowerCase()
|
||||
bVal = (b.name || b.domain_names.split(',')[0] || '').toLowerCase()
|
||||
break
|
||||
case 'domain':
|
||||
aVal = (a.domain_names.split(',')[0] || '').toLowerCase()
|
||||
bVal = (b.domain_names.split(',')[0] || '').toLowerCase()
|
||||
break
|
||||
case 'forward':
|
||||
aVal = `${a.forward_host}:${a.forward_port}`.toLowerCase()
|
||||
bVal = `${b.forward_host}:${b.forward_port}`.toLowerCase()
|
||||
break
|
||||
default:
|
||||
return 0
|
||||
}
|
||||
|
||||
if (aVal < bVal) return sortDirection === 'asc' ? -1 : 1
|
||||
if (aVal > bVal) return sortDirection === 'asc' ? 1 : -1
|
||||
return 0
|
||||
}
|
||||
|
||||
export default compareHosts
|
||||
Reference in New Issue
Block a user