auth_user_info.test.js 1.97 KB
import { describe, expect, it, vi } from 'vitest'
import { applyUserInfoAuth } from '../auth_user_info'

const createStorage = () => {
  const store = {}
  return {
    store,
    setItem: vi.fn((key, value) => {
      store[key] = value
    }),
    getItem: vi.fn((key) => store[key] ?? null),
    removeItem: vi.fn((key) => {
      delete store[key]
    }),
    clear: vi.fn(() => {
      Object.keys(store).forEach((key) => delete store[key])
    })
  }
}

describe('applyUserInfoAuth', () => {
  it('从 response.data.user_info 写入鉴权与缓存', () => {
    const storage = createStorage()
    const set_auth_headers = vi.fn()
    const response = {
      data: {
        user_info: {
          user_id: '100',
          HTTP_USER_TOKEN: 'token-xxx',
          user_name: '张三'
        }
      }
    }

    const ok = applyUserInfoAuth(response, { storage, set_auth_headers })

    expect(ok).toBe(true)
    expect(set_auth_headers).toHaveBeenCalledTimes(1)
    expect(set_auth_headers).toHaveBeenCalledWith('100', 'token-xxx')
    expect(storage.setItem).toHaveBeenCalledTimes(1)
    expect(storage.setItem).toHaveBeenCalledWith('user_info', JSON.stringify(response.data.user_info))
  })

  it('缺少 user_id 或 HTTP_USER_TOKEN 时不做任何写入', () => {
    const storage = createStorage()
    const set_auth_headers = vi.fn()

    const ok = applyUserInfoAuth({ user_id: '100' }, { storage, set_auth_headers })

    expect(ok).toBe(false)
    expect(set_auth_headers).not.toHaveBeenCalled()
    expect(storage.setItem).not.toHaveBeenCalled()
  })

  it('支持直接传入 user_info 对象', () => {
    const storage = createStorage()
    const set_auth_headers = vi.fn()
    const user_info = { user_id: 1, HTTP_USER_TOKEN: 't' }

    const ok = applyUserInfoAuth(user_info, { storage, set_auth_headers })

    expect(ok).toBe(true)
    expect(set_auth_headers).toHaveBeenCalledWith(1, 't')
    expect(storage.setItem).toHaveBeenCalledWith('user_info', JSON.stringify(user_info))
  })
})