ElectronicBabylonianLiterature/ebl-frontend

View on GitHub
src/fragmentarium/ui/info/ExternalResources.test.tsx

Summary

Maintainability
A
0 mins
Test Coverage
import React from 'react'
import { render, screen } from '@testing-library/react'
import ExternalResources from './ExternalResources'

import { fragmentFactory } from 'test-support/fragment-fixtures'
import { externalNumbersFactory } from 'test-support/fragment-data-fixtures'
import { Fragment } from 'fragmentarium/domain/fragment'

const cdliNumber = 'P 0000+q'
const bmIdNumber = 'bm 00000+q'
const bdtnsNumber = 'bdtns123'
const archibabNumber = 'A38'
const urOnlineNumber = 'U5'
const hilprechtJenaNumber = 'H42'
const hilprechtHeidelbergNumber = 'H007'
const achemenetNumber = 'H00744'
const nabuccoNumber = 'H00765'
const metropolitanNumber = 'M123'
const louvreNumber = 'L123'
const alalahHpmNumber = 'L123'
const australianinstituteofarchaeologyNumber = 'L123'
const philadelphiaNumber = 'P123'
const yalePeabodyNumber = 'y123'
let fragment: Fragment
let container: HTMLElement

describe('external resources', () => {
  beforeEach(async () => {
    fragment = fragmentFactory.build(
      {},
      {
        associations: {
          externalNumbers: externalNumbersFactory.build({
            cdliNumber,
            bmIdNumber,
            bdtnsNumber,
            archibabNumber,
            urOnlineNumber,
            hilprechtJenaNumber,
            hilprechtHeidelbergNumber,
            achemenetNumber,
            nabuccoNumber,
            metropolitanNumber,
            louvreNumber,
            alalahHpmNumber,
            australianinstituteofarchaeologyNumber,
            philadelphiaNumber,
            yalePeabodyNumber,
          }),
        },
      }
    )
    container = render(<ExternalResources fragment={fragment} />).container
  })

  test.each([
    ['CDLI', 'https://cdli.mpiwg-berlin.mpg.de/', cdliNumber],
    [
      'The British Museum',
      'https://www.britishmuseum.org/collection/object/',
      bmIdNumber,
    ],
    ['BDTNS', 'http://bdtns.filol.csic.es/', bdtnsNumber],
    ['Archibab', 'http://www.archibab.fr/', archibabNumber],
    ['Ur Online', 'http://www.ur-online.org/subject/', urOnlineNumber],
    [
      'Hilprecht Collection',
      'https://hilprecht.mpiwg-berlin.mpg.de/object3d/',
      hilprechtJenaNumber,
    ],
    [
      'Hilprecht Collection – HeiCuBeDa',
      'https://doi.org/10.11588/heidicon/',
      hilprechtHeidelbergNumber,
    ],
    [
      'Achemenet',
      'http://www.achemenet.com/en/item/?/textual-sources/texts-by-languages-and-scripts/babylonian/',
      achemenetNumber,
    ],
    [
      'NaBuCCo',
      'https://nabucco.acdh.oeaw.ac.at/archiv/tablet/detail/',
      nabuccoNumber,
    ],
    [
      'The Metropolitan Museum of Art',
      'https://www.metmuseum.org/art/collection/search/',
      metropolitanNumber,
    ],
    ['Louvre', 'https://collections.louvre.fr/ark:/53355/', louvreNumber],
    [
      'Alalah HPM Number',
      'https://www.hethport.uni-wuerzburg.de/Alalach/bildpraep.php?fundnr=',
      alalahHpmNumber,
    ],
    [
      'Australian Institute of Archaeology',
      'https://aiarch.pedestal3d.com/r/',
      australianinstituteofarchaeologyNumber,
    ],
    [
      'Penn Museum',
      'https://www.penn.museum/collections/object/',
      philadelphiaNumber,
    ],
    [
      'Yale Babylonian Collection',
      'https://collections.peabody.yale.edu/search/Record/YPM-',
      yalePeabodyNumber,
    ],
  ])('%s number is shown', async (label, link, number) => {
    expect(screen.getByLabelText(`${label} text ${number}`)).toHaveAttribute(
      'href',
      `${link}${encodeURIComponent(number)}`
    )
  })
  test('Snapshot', async () => expect(container).toMatchSnapshot())
})

describe('missing external resources', () => {
  beforeEach(async () => {
    fragment = fragmentFactory.build(
      {},
      {
        associations: {
          externalNumbers: {},
        },
      }
    )
    render(<ExternalResources fragment={fragment} />)
  })

  test.each([
    'CDLI',
    'The British Museum',
    'BDTNS',
    'Archibab',
    'Ur Online',
    'Hilprecht Collection',
    'Hilprecht Collection – HeiCuBeDa',
    'Achemenet',
    'NaBuCCo',
    'The Metropolitan Museum of Art',
    'Louvre',
    'Alalah HPM Number',
    'Australian Institute of Archaeology',
    'Penn Museum',
    'Yale Babylonian Collection',
  ])('Mising %s number is not shown', async (label) => {
    expect(screen.queryByText(label)).not.toBeInTheDocument()
  })
})