ElectronicBabylonianLiterature/ebl-frontend

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

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
import { Factory } from 'fishery'
import Chance from 'chance'
import { ChapterDisplay, LineDisplay } from 'corpus/domain/chapter'
import { ChapterId } from 'transliteration/domain/chapter-id'
import { TextId } from 'transliteration/domain/text-id'
import { periods } from 'common/period'
import _ from 'lodash'
import { reconstructionTokens } from './test-corpus-text'
import { ChapterDisplayDto, LineDisplayDto } from 'corpus/application/dtos'
import TranslationLine from 'transliteration/domain/translation-line'
import { NoteLine } from 'transliteration/domain/note-line'
import {
  ParallelComposition,
  parallelLinePrefix,
} from 'transliteration/domain/parallel-line'
import { lineNumberFactory } from './linenumber-factory'

const defaultChance = new Chance()
const maxRoman = 3999

export const textIdFactory = Factory.define<TextId, { chance: Chance.Chance }>(
  ({ transientParams }) => {
    const chance = transientParams.chance ?? defaultChance
    return {
      genre: chance.pickone(['L', 'D']),
      category: chance.integer({ min: 0, max: maxRoman }),
      index: chance.integer({ min: 0 }),
    }
  }
)

export const chapterIdFactory = Factory.define<
  ChapterId,
  { chance: Chance.Chance }
>(({ transientParams }) => {
  const chance = transientParams.chance ?? defaultChance
  return {
    textId: textIdFactory.build({}, { transient: { chance } }),
    stage: chance.pickone([...periods]).name,
    name: chance.sentence(),
  }
})

export const lineDisplayDtoFactory = Factory.define<
  LineDisplayDto,
  { chance: Chance.Chance }
>(({ associations, sequence, transientParams }) => {
  const chance = transientParams.chance ?? defaultChance
  return {
    number: lineNumberFactory.build(),
    originalIndex: associations.originalIndex ?? sequence,
    oldLineNumbers: associations.oldLineNumbers ?? [],
    isSecondLineOfParallelism: chance.bool(),
    isBeginningOfSection: chance.bool(),
    translation: [
      {
        language: 'en',
        extent: null,
        parts: [
          {
            text: chance.sentence(),
            type: 'StringPart',
          },
        ],
        content: [],
      },
      {
        language: 'de',
        extent: null,
        parts: [
          {
            text: chance.sentence(),
            type: 'StringPart',
          },
        ],
        content: [],
      },
    ],
    variants: [
      {
        originalIndex: 0,
        isPrimaryVariant: true,
        intertext: [
          {
            text: chance.sentence(),
            type: 'StringPart',
          },
        ],
        reconstruction: _.cloneDeep(reconstructionTokens),
        note: {
          prefix: '#note: ',
          content: [],
          parts: [
            {
              text: chance.sentence(),
              type: 'StringPart',
            },
          ],
        },
        manuscripts: [],
        parallelLines: [
          {
            type: 'ParallelComposition',
            prefix: parallelLinePrefix,
            hasCf: false,
            name: 'A Composition',
            lineNumber: {
              prefixModifier: '',
              number: 2,
              hasPrime: false,
              suffixModifier: '',
            },
            content: [],
          },
        ],
      },
    ],
  }
})

export const lineDisplayFactory = Factory.define<
  LineDisplay,
  { chance: Chance.Chance }
>(({ associations, sequence, transientParams }) => {
  const chance = transientParams.chance ?? defaultChance
  return {
    number: lineNumberFactory.build(),
    originalIndex: associations.originalIndex ?? sequence,
    oldLineNumbers: associations.oldLineNumbers ?? [],
    isSecondLineOfParallelism: chance.bool(),
    isBeginningOfSection: chance.bool(),
    translation: [
      new TranslationLine({
        language: 'en',
        extent: null,
        parts: [
          {
            text: chance.sentence(),
            type: 'StringPart',
          },
        ],
        content: [],
      }),
      new TranslationLine({
        language: 'de',
        extent: null,
        parts: [
          {
            text: chance.sentence(),
            type: 'StringPart',
          },
        ],
        content: [],
      }),
    ],

    variants: [
      {
        originalIndex: 0,
        isPrimaryVariant: true,
        intertext: [
          {
            text: chance.sentence(),
            type: 'StringPart',
          },
        ],
        reconstruction: _.cloneDeep(reconstructionTokens),
        manuscripts: [],
        note: new NoteLine({
          content: [],
          parts: [
            {
              text: chance.sentence(),
              type: 'StringPart',
            },
          ],
        }),
        parallelLines: [
          new ParallelComposition({
            hasCf: false,
            name: 'A Composition',
            lineNumber: {
              prefixModifier: '',
              number: 2,
              hasPrime: false,
              suffixModifier: '',
            },
            content: [],
          }),
        ],
      },
    ],
  }
})

export const chapterDisplayDtoFactory = Factory.define<
  ChapterDisplayDto,
  { chance: Chance.Chance }
>(({ transientParams }) => {
  const chance = transientParams.chance ?? defaultChance
  return {
    id: chapterIdFactory.build({}, { transient: { chance } }),
    textHasDoi: chance.bool(),
    textName: chance.sentence(),
    isSingleStage: chance.bool(),
    title: [
      {
        text: chance.sentence(),
        type: 'StringPart',
      },
    ],
    lines: lineDisplayDtoFactory.buildList(2, {}, { transient: { chance } }),
    record: { authors: [], translators: [], publicationDate: '' },
    atf: chance.sentence(),
  }
})

class ChapterDisplayFactory extends Factory<
  ChapterDisplay,
  { chance: Chance.Chance }
> {
  published() {
    return this.params({
      record: {
        authors: [
          {
            name: 'Test',
            prefix: 'A.',
            role: 'EDITOR',
            orcidNumber: '',
          },
        ],
        translators: [],
        publicationDate: '2020-02-25',
      },
    })
  }
}

export const chapterDisplayFactory = ChapterDisplayFactory.define(
  ({ transientParams }) => {
    const chance = transientParams.chance ?? defaultChance
    return new ChapterDisplay(
      chapterIdFactory.build({}, { transient: { chance } }),
      chance.bool(),
      chance.sentence(),
      chance.bool(),
      [
        {
          text: chance.sentence(),
          type: 'StringPart',
        },
      ],
      [
        lineDisplayFactory.build(
          { originalIndex: 0 },
          { transient: { chance } }
        ),
        lineDisplayFactory.build(
          { originalIndex: 1 },
          { transient: { chance } }
        ),
      ],
      { authors: [], translators: [], publicationDate: '' },
      chance.sentence()
    )
  }
)