import { describe, expect, it } from 'vitest'
import { sameFamily } from './family-match'

const node = (familyId: string | null, goodName: string) => ({ familyId, goodName })

describe('sameFamily', () => {
  it('同族（familyId 相等且非空）→ true，名称不同也不影响', () => {
    expect(
      sameFamily(node('12', '美国（包邮）T恤-DG001-单面印花'), node('12', '墨西哥（不包邮）卫衣-XX-双面印花')),
    ).toBe(true)
  })

  it('任一方 familyId 为空 → 回退名称 3 段规则', () => {
    const a = node(null, '美国（包邮）T恤-DG001-单面印花')
    expect(sameFamily(a, node(null, '美国（包邮）T恤-DG001-单面印花-某仓'))).toBe(true)
    expect(sameFamily(a, node('12', '美国（包邮）T恤-DG001-单面印花'))).toBe(true)
    expect(sameFamily(a, node(null, '美国（不包邮）T恤-DG001-单面印花'))).toBe(false)
  })

  it('familyId 不同 → false（即使名称同段）', () => {
    expect(
      sameFamily(node('1', '美国（包邮）T恤-DG001-单面印花'), node('2', '美国（包邮）T恤-DG001-单面印花')),
    ).toBe(false)
  })

  it('双方均无族且名称不可比 → false', () => {
    expect(sameFamily(node(null, ''), node(null, '随便'))).toBe(false)
    expect(sameFamily(node(null, null as unknown as string), node(null, '随便'))).toBe(false)
  })
})
