ElectronicBabylonianLiterature/ebl-frontend

View on GitHub
src/test-support/colophon-fixtures.ts

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
import { Factory } from 'fishery'
import { Chance } from 'chance'
import {
  IndividualType,
  ColophonStatus,
  ColophonOwnership,
  ColophonType,
  NameAttestation,
  IndividualAttestation,
  Colophon,
  ProvenanceAttestation,
  IndividualTypeAttestation,
} from 'fragmentarium/domain/Colophon'
import { Provenances } from 'corpus/domain/provenance'

const chance = new Chance()

const nameAttestationFactory = Factory.define<NameAttestation>(() => ({
  value: chance.name(),
  isBroken: chance.bool(),
  isUncertain: chance.bool(),
}))

const provenanceAttestationFactory = Factory.define<ProvenanceAttestation>(
  () => ({
    value: chance.pickone(Object.values(Provenances)).name,
    isBroken: chance.bool(),
    isUncertain: chance.bool(),
  })
)

const individualTypeAttestationFactory = Factory.define<
  IndividualTypeAttestation
>(() => ({
  value: chance.pickone(Object.values(IndividualType)),
  isBroken: chance.bool(),
  isUncertain: chance.bool(),
}))

const individualAttestationFactory = Factory.define<IndividualAttestation>(
  () => {
    return new IndividualAttestation({
      name: nameAttestationFactory.build(),
      sonOf: chance.bool() ? nameAttestationFactory.build() : undefined,
      grandsonOf: chance.bool() ? nameAttestationFactory.build() : undefined,
      family: chance.bool() ? nameAttestationFactory.build() : undefined,
      nativeOf: provenanceAttestationFactory.build(),
      type: individualTypeAttestationFactory.build(),
    })
  }
)

export const colophonFactory = Factory.define<Colophon>(() => ({
  colophonOwnership: chance.pickone(Object.values(ColophonOwnership)),
  colophonType: chance.pickone(Object.values(ColophonType)),
  colophonStatus: chance.pickone(Object.values(ColophonStatus)),
  originalFrom: provenanceAttestationFactory.build(),
  writtenIn: provenanceAttestationFactory.build(),
  notesToScribalProcess: chance.sentence(),
  individuals: individualAttestationFactory.buildList(
    chance.integer({ min: 0, max: 5 })
  ),
}))