import test from 'ava'
import f from '../dist'

const rules = f.rules
const error = ({field, value, label}) => {
  return `${field}${label}`
}

test('test required rule failure', async t => {
  let v = await rules.required({field: 'name', value: '', error, label: 'xyz'})
  t.is('string', typeof v)
  t.is('namexyz', v)
})

test('test required rule empty array failure', async t => {
  let v = await rules.required({field: 'name', value: [], error, label: 'xyz'})
  t.is('namexyz', v)
})

test('test required rule passes', async t => {
  t.is(false, await rules.required({field: 'name', value: 'Justin'}))
})

test('test email rule with valid email', async t => {
  t.is(false, await rules.email({field: 'email', value: 'valid@example.com'}))
})

test('test email rule with invalid email', async t => {
  t.is('email123', await rules.email({field: 'email', value: 'invalid@example', error, label: '123'}))
})

test('test email with empty email', async t => {
  t.is(false, await rules.email({field: 'email', value: '', error}))
})

test('test confirmed passes', async t => {
  t.is(false, await rules.confirmed({
    field: 'password',
    value: 'password',
    label: '123',
    error,
    values: {password_confirmation: 'password'}
  }))
})

test('test confirmed passes custom field', async t => {
  t.is(false, await rules.confirmed({
    field: 'password',
    value: 'password',
    label: '123',
    error,
    values: {customfield: 'password'}
  }, 'customfield'))
})

test('test confirmed fails', async t => {
  t.is('password123', await rules.confirmed({
    field: 'password',
    value: 'password',
    label: '123',
    error,
    values: {password_confirmation: 'pAssword'}
  }))
})

test('test empty confirmed passes', async t => {
  t.is(false, await rules.confirmed({
    field: 'password',
    value: '',
    label: '123',
    error,
    values: {password_confirmation: ''}
  }))
})