import { describe, beforeEach, it, expect, vi } from 'vitest'
import { shallowMount } from '@vue/test-utils'

import StorageCard from '@/components/Core/StorageCard.vue'

const label = 'Downloaded'
const value = 10000
const color = 'download'

let wrapper
describe('StorageCard.vue', () => {
  beforeEach(() => {
    wrapper = shallowMount(StorageCard, {
      propsData: { label, value, color },
      filters: {
        formatDataValue: vi.fn().mockReturnValue('9.77'),
        formatDataUnit: vi.fn().mockReturnValue('KB')
      },
      mocks: {
        $store: {
          getters: { shouldUseBinaryData: vi.fn().mockReturnValue(true) }
        }
      }
    })
  })

  it('should render the label', () => {
    expect(wrapper.find('[data-testid="StorageCard-label"]').text()).toEqual(label)
  })

  it('should render value and unit & be formatted', () => {
    expect(wrapper.find('[data-testid="StorageCard-value"]').exists()).toBe(true)
    expect(wrapper.find('[data-testid="StorageCard-value"]').text()).toBe('9.77')

    expect(wrapper.find('[data-testid="StorageCard-unit"]').exists()).toBe(true)
    expect(wrapper.find('[data-testid="StorageCard-unit"]').text()).toBe('KB')
  })

  it('text should have the passed-in color', () => {
    expect(wrapper.find('[data-testid="StorageCard-label"]').classes()).toContain(color + '--text')
    expect(wrapper.find('[data-testid="StorageCard-Wrapper"]').classes()).toContain(color + '--text')
  })
})