Fusion des scans (désinstallés, doublons, ajouts manuels), rescan, ajout manuel et explorateur de fichiers pour la manette
Some checks are pending
CI / windows (push) Waiting to run

This commit is contained in:
yasder5 2026-10-07 20:47:19 +02:00
parent bcc96d5fe5
commit f68ed4112f
8 changed files with 179 additions and 7 deletions

34
tests/merge.test.ts Normal file
View file

@ -0,0 +1,34 @@
import { describe, expect, it } from 'vitest'
import { mergeScan } from '../src/main/scanners/merge'
import type { Game } from '../src/shared/types'
const base = (o: Partial<Game>): Game => ({ id: '', platform: 'steam', platformId: '', name: '', installed: true, favorite: false, hidden: false, addedAt: 0, playtime: 0, collections: [], media: {}, ...o })
describe('mergeScan', () => {
it('ajoute, met à jour et garde les données utilisateur', () => {
const old = [base({ id: 'steam:1', platformId: '1', name: 'Vieux nom', favorite: true, playtime: 500, collections: ['c'] })]
const { games, stats } = mergeScan(old, { ok: { steam: [{ platform: 'steam', platformId: '1', name: 'Nouveau', installDir: 'C:\\A' }, { platform: 'steam', platformId: '2', name: 'B' }] } }, 42)
expect(stats).toMatchObject({ added: 1, updated: 1 })
const a = games.find((g) => g.id === 'steam:1')!
expect(a).toMatchObject({ name: 'Nouveau', favorite: true, playtime: 500, collections: ['c'], installDir: 'C:\\A' })
expect(games.find((g) => g.id === 'steam:2')!.addedAt).toBe(42)
})
it('ne renomme pas un jeu renommé par l’utilisateur', () => {
const { games } = mergeScan([base({ id: 'steam:1', platformId: '1', name: 'Mon nom', nameLocked: true })], { ok: { steam: [{ platform: 'steam', platformId: '1', name: 'Officiel' }] } })
expect(games[0].name).toBe('Mon nom')
})
it('marque désinstallé, sans toucher aux scanners en échec', () => {
const old = [base({ id: 'steam:1', platformId: '1' }), base({ id: 'epic:x', platform: 'epic', platformId: 'x' })]
const { games, stats } = mergeScan(old, { ok: { steam: [] } })
expect(stats.uninstalled).toBe(1)
expect(games.find((g) => g.id === 'steam:1')!.installed).toBe(false)
expect(games.find((g) => g.id === 'epic:x')!.installed).toBe(true)
})
it('dédoublonne et fusionne un ajout manuel dans le jeu détecté', () => {
const old = [base({ id: 'manual:m', platform: 'manual', platformId: 'm', exe: 'D:\\GOG Games\\W3\\bin\\w3.exe', playtime: 100, favorite: true })]
const { games, stats } = mergeScan(old, { ok: { gog: [{ platform: 'gog', platformId: '9', name: 'W3', installDir: 'D:\\GOG Games\\W3' }, { platform: 'gog', platformId: '9', name: 'W3' }] } })
expect(games).toHaveLength(1)
expect(stats.merged).toBe(1)
expect(games[0]).toMatchObject({ id: 'gog:9', playtime: 100, favorite: true })
})
})