Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(deps): bump express-slow-down from 1.4.0 to 2.0.3 #1119

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

chore(deps): bump express-slow-down from 1.4.0 to 2.0.3

544b916
Select commit
Loading
Failed to load commit list.
Sign in for the full log view
Open

chore(deps): bump express-slow-down from 1.4.0 to 2.0.3 #1119

chore(deps): bump express-slow-down from 1.4.0 to 2.0.3
544b916
Select commit
Loading
Failed to load commit list.
GitHub Actions / Mocha Tests succeeded Sep 19, 2024 in 0s

815 passed, 0 failed and 0 skipped

Tests passed successfully

✅ test-results.json

815 tests were completed in 81s with 815 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
test/src/api/common-tests.js 7✅ 97ms
test/src/api/routes/test-author.js 17✅ 298ms
test/src/api/routes/test-edition-group.js 16✅ 137ms
test/src/api/routes/test-edition.js 23✅ 582ms
test/src/api/routes/test-publisher.js 22✅ 409ms
test/src/api/routes/test-search.js 6✅ 278ms
test/src/api/routes/test-series.js 17✅ 179ms
test/src/api/routes/test-work.js 20✅ 10s
test/src/client/entity-editor/create-edition.js 1✅ 5ms
test/src/client/entity-editor/validators/test-alias.js 34✅ 3ms
test/src/client/entity-editor/validators/test-author.js 58✅ 6ms
test/src/client/entity-editor/validators/test-edition.js 103✅ 4ms
test/src/client/entity-editor/validators/test-identifier.js 36✅ 3ms
test/src/client/entity-editor/validators/test-name-section.js 27✅ 1ms
test/src/client/entity-editor/validators/test-publication.js 22✅ 1ms
test/src/client/entity-editor/validators/test-publisher.js 44✅ 4ms
test/src/client/entity-editor/validators/test-series.js 25✅ 1ms
test/src/client/entity-editor/validators/test-submission-section.js 10✅ 0ms
test/src/client/entity-editor/validators/test-work.js 29✅ 1ms
test/src/client/unified-form/validators/test-cover-tab.js 4✅ 0ms
test/src/client/unified-form/validators/test-detail-tab.js 2✅ 0ms
test/src/server/helpers/collections.js 10✅ 38ms
test/src/server/helpers/revisions.js 20✅ 611ms
test/src/server/helpers/utils.js 15✅ 54ms
test/src/server/routes/collection.js 54✅ 3s
test/src/server/routes/editor.js 8✅ 35ms
test/src/server/routes/entity/author.js 10✅ 2s
test/src/server/routes/entity/edition-group.js 10✅ 1s
test/src/server/routes/entity/edition.js 10✅ 274ms
test/src/server/routes/entity/entity.js 16✅ 363ms
test/src/server/routes/entity/publisher.js 10✅ 231ms
test/src/server/routes/entity/series.js 10✅ 1s
test/src/server/routes/entity/work.js 10✅ 1s
test/src/server/routes/merge.js 12✅ 3s
test/src/server/routes/relationship.js 3✅ 1s
test/src/server/routes/revision.js 4✅ 30ms
test/src/server/routes/type-editor/identifier-type.js 11✅ 86ms
test/src/server/routes/type-editor/relationship-type.js 11✅ 92ms
test/src/server/routes/unifiedform.js 10✅ 533ms
test/test-achievement.js 48✅ 460ms
test/test-render-relationship.js 6✅ 1ms
test/test-site.js 4✅ 30ms

✅ test/src/api/common-tests.js

Common test of API
  ✅ should throw a 404 error if endpoint is not valid
  ✅ should throw a 405 error if send delete request
  ✅ should throw a 405 error if send post request
  ✅ should throw a 405 error if send put request
Lookup endpoints
  ✅ GET {entity}/{BBID}/aliases should return aliases with a specific structure
  ✅ GET {entity}/{BBID}/identifiers should return identifiers with a specific structure
  ✅ GET {entity}/{BBID}/relationships should return relationships with a specific structure

✅ test/src/api/routes/test-author.js

Browse Author
  ✅ should allow params to be case insensitive
  ✅ should NOT throw an error if there is no related entity
  ✅ should return 0 authors (with Incorrect Type filter)
  ✅ should return list of authors associated with the work (with Type filter)
  ✅ should return list of authors associated with the work (without any filter)
  ✅ should throw 400 error for invalid bbid
  ✅ should throw 404 error for incorrect bbid
  ✅ should throw an error if trying to browse more than one entity
GET /Author
  ✅ should get basic information of an Author
  ✅ should return list of aliases of an Author
  ✅ should return list of identifiers of an Author
  ✅ should return list of relationships of an Author
  ✅ should throw a 400 error if trying to access an author with invalid BBID
  ✅ should throw a 404 error if trying to access aliases of an Author that does not exist
  ✅ should throw a 404 error if trying to access an author that does not exist
  ✅ should throw a 404 error if trying to access identifiers of an Author that does not exist
  ✅ should throw a 404 error if trying to access relationships of an Author that does not exist

✅ test/src/api/routes/test-edition-group.js

Browse EditionGroup
  ✅ should allow params to be case insensitive
  ✅ should return 0 EditionGroups (with Incorrect Type Filter)
  ✅ should return list of EditionGroups associated with the edition
  ✅ should return list of EditionGroups associated with the edition (with Type Filter)
  ✅ should throw 400 error for incorrect linked entity
  ✅ should throw 400 error for invalid bbid
  ✅ should throw 404 error for incorrect bbid
GET /EditionGroup
  ✅ should get basic information of an Edition Group
  ✅ should return list of aliases of an Edition Group
  ✅ should return list of identifiers of an Edition Group
  ✅ should return list of relationships of an Edition Group
  ✅ should throw a 400 error if trying to access an edition with invalid BBID
  ✅ should throw a 404 error if trying to access aliases of an Edition Group that does not exist
  ✅ should throw a 404 error if trying to access an edition group that does not exist
  ✅ should throw a 404 error if trying to access identifiers of an Edition Group that does not exist
  ✅ should throw a 404 error if trying to access relationships of an Edition Group that does not exist

✅ test/src/api/routes/test-edition.js

Browse Edition
  ✅ should allow params to be case insensitive
  ✅ should NOT throw an error if there is no related edition-group
  ✅ should NOT throw an error if there is no related publisher
  ✅ should NOT throw an error if there is no related work
  ✅ should return editions associated with a publisher
  ✅ should return list of editions associated with edition-group
  ✅ should return list of editions associated with the author (with Format Filter and Language Filter)
  ✅ should return list of editions associated with the author (with Format Filter)
  ✅ should return list of editions associated with the author (with Language Filter)
  ✅ should return list of editions associated with the author (without any filter)
  ✅ should return no editions (with WRONG Format Filter and WRONG Language Filter)
  ✅ should throw 400 error for invalid bbid
  ✅ should throw 404 error for incorrect bbid
  ✅ should throw an error if trying to browse more than one entity
GET /Edition
  ✅ should get basic information of edition
  ✅ should return list of aliases of an Edition
  ✅ should return list of identifiers of an Edition
  ✅ should return list of relationships of an Edition
  ✅ should throw a 400 error if trying to access an edition with invalid BBID
  ✅ should throw a 404 error if trying to access aliases of an Edition that does not exist
  ✅ should throw a 404 error if trying to access an edition that does not exist
  ✅ should throw a 404 error if trying to identifiers  of an Edition that does not exist
  ✅ should throw a 404 error if trying to relationships of an Edition that does not exist

✅ test/src/api/routes/test-publisher.js

Browse Publishers
  ✅ should allow params to be case insensitive
  ✅ should NOT throw error with no related edition
  ✅ should NOT throw error with no related entity
  ✅ should return list of Publisher, associated with the Work
  ✅ should return list of Publisher, associated with the Work (with Area Filter)
  ✅ should return list of Publisher, associated with the Work (with Type Filter and Area filter)
  ✅ should return list of Publisher, associated with the Work (with Type Filter)
  ✅ should return no publisher (Incorrect Filters)
  ✅ should return publishers associated with an edition
  ✅ should throw 400 error for incorrect linked entity
  ✅ should throw 400 error for invalid bbid
  ✅ should throw 404 error for incorrect bbid
  ✅ should throw an error if trying to browse more than one entity
GET /Publisher
  ✅ should get basic information of a Publisher
  ✅ should return list of aliases of a Publisher
  ✅ should return list of identifiers of a Publisher
  ✅ should return list of relationships of a Publisher
  ✅ should throw a 400 error if trying to access a publisher with invalid BBID
  ✅ should throw a 404 error if trying to access a publisher that does not exist
  ✅ should throw a 404 error if trying to access aliases of a Publisher that does not exist
  ✅ should throw a 404 error if trying to access identifiers of a Publisher that does not exist
  ✅ should throw a 404 error if trying to access relationships of a Publisher that does not exist

✅ test/src/api/routes/test-search.js

GET /search
  ✅ should return no result for a type whose entity do not exist
  ✅ should return search result for given query
  ✅ should return search result for given query (with an offset)
  ✅ should return search result for given query (with both offset and size)
  ✅ should return search result for given query (with type query)
  ✅ should throw 400 error if no search query is passed

✅ test/src/api/routes/test-series.js

Browse Series
  ✅ should allow params to be case insensitive
  ✅ should NOT throw an error if there is no related entity
  ✅ should return 0 series (with Incorrect Type filter)
  ✅ should return list of series associated with the work (with Type filter)
  ✅ should return list of series associated with the work (without any filter)
  ✅ should throw 400 error for invalid bbid
  ✅ should throw 404 error for incorrect bbid
  ✅ should throw an error if trying to browse more than one entity
GET /Series
  ✅ should get basic information of an Series
  ✅ should return list of aliases of an Series
  ✅ should return list of identifiers of an Series
  ✅ should return list of relationships of an Series
  ✅ should throw a 400 error if trying to access an series with invalid BBID
  ✅ should throw a 404 error if trying to access aliases of an Series that does not exist
  ✅ should throw a 404 error if trying to access an series that does not exist
  ✅ should throw a 404 error if trying to access identifiers of an Series that does not exist
  ✅ should throw a 404 error if trying to access relationships of an Series that does not exist

✅ test/src/api/routes/test-work.js

Browse Works
  ✅ should allow params to be case insensitive
  ✅ should NOT throw an error when there is no related entity
  ✅ should return 0 works (with Incorrect Type Filter and  Incorrect Language Filter)
  ✅ should return list of works associated with the author (with Language Filter)
  ✅ should return list of works associated with the author (with Type Filter and Language Filter)
  ✅ should return list of works associated with the author (with Type Filter)
  ✅ should return list of works associated with the author (without any filter)
  ✅ should throw 400 error for incorrect linked entity
  ✅ should throw 400 error for invalid bbid
  ✅ should throw 404 error for incorrect bbid
  ✅ should throw an error if trying to browse more than one entity
GET /work
  ✅ should get basic information of work
  ✅ should return list of aliases of a Work
  ✅ should return list of identifiers of work
  ✅ should return list of relationships of a Work
  ✅ should throw a 400 error if trying to access a work with invalid BBID
  ✅ should throw a 404 error if trying to access a work that does not exist
  ✅ should throw a 404 error if trying to access aliases of a Work that does not exist
  ✅ should throw a 404 error if trying to access identifiers of a Work that does not exist
  ✅ should throw a 404 error if trying to access relationships of a Work that does not exist

✅ test/src/client/entity-editor/create-edition.js

Creating an Edition
  ✅ should automatically create an Edition Group if none is passed

✅ test/src/client/entity-editor/validators/test-alias.js

validateAlias* functions validateAlias
  ✅ should pass a valid Immutable.Map
  ✅ should pass a valid Object
  ✅ should reject a null value
  ✅ should reject an invalid Immutable.Map
  ✅ should reject an Object with an invalid language
  ✅ should reject an Object with an invalid name
  ✅ should reject an Object with an invalid primary
  ✅ should reject an Object with an invalid sort name
  ✅ should reject any other non-null data type
validateAlias* functions validateAliases
  ✅ should pass an empty Immutable.Map
  ✅ should pass an empty Object
  ✅ should pass an Immutable.Map of valid Immutable.Maps
  ✅ should pass an Object of two valid Objects
  ✅ should reject a null value
  ✅ should reject an Immutable.Map containing one invalid Immutable.Map
  ✅ should reject an Object containing one invalid Object
  ✅ should reject any other non-null data type
validateAlias* functions validateAliasLanguage
  ✅ should pass any positive integer value
  ✅ should reject a null value
  ✅ should reject an negative number
  ✅ should reject any non-number value
  ✅ should reject NaN
  ✅ should reject zero
validateAlias* functions validateAliasName
  ✅ should pass any non-empty string value
  ✅ should reject a null value
  ✅ should reject an empty string
  ✅ should reject any non-string value
validateAlias* functions validateAliasPrimary
  ✅ should pass any boolean value
  ✅ should reject a null value
  ✅ should reject any non-boolean value
validateAlias* functions validateAliasSortName
  ✅ should pass any non-empty string value
  ✅ should reject a null value
  ✅ should reject an empty string
  ✅ should reject any non-string value

✅ test/src/client/entity-editor/validators/test-author.js

validateAuthorSection* functions validateAuthorSection
  ✅ should pass a empty value  object
  ✅ should pass a valid Immutable.Map
  ✅ should pass a valid Object
  ✅ should pass any other non-null data type
  ✅ should reject an invalid Immutable.Map
  ✅ should reject an Object with an invalid area
  ✅ should reject an Object with an invalid area
  ✅ should reject an Object with an invalid begin date
  ✅ should reject an Object with an invalid end date
  ✅ should reject an Object with an invalid ended flag
  ✅ should reject an Object with an invalid gender
  ✅ should reject an Object with an invalid type
validateAuthorSection* functions validateAuthorSectionBeginArea
  ✅ should pass a null value
  ✅ should pass a valid Immutable.Map
  ✅ should pass a valid Object
  ✅ should reject an invalid Immutable.Map
  ✅ should reject an Object with an invalid ID
  ✅ should reject any other non-null data type
validateAuthorSection* functions validateAuthorSectionBeginDate
  ✅ should pass an empty value object
  ✅ should pass an object containing a valid year and month value
  ✅ should pass an object containing a valid year value
  ✅ should pass an object containing a valid year, month and day value
  ✅ should reject all other forms of invalid dates
validateAuthorSection* functions validateAuthorSectionEndArea
  ✅ should pass a null value
  ✅ should pass a valid Immutable.Map
  ✅ should pass a valid Object
  ✅ should reject an invalid Immutable.Map
  ✅ should reject an Object with an invalid ID
  ✅ should reject any other non-null data type
validateAuthorSection* functions validateAuthorSectionEndDate
  ✅ should pass if the begin date is empty/undefined/invalid
  ✅ should pass if the begin date occurs before the end one
  ✅ should reject if the begin date occurs after the end one
  ✅ should reject if the end date is invalid
validateAuthorSection* functions validateAuthorSectionEnded
  ✅ should pass a null value
  ✅ should pass any boolean value
  ✅ should reject any non-boolean value
validateAuthorSection* functions validateAuthorSectionGender
  ✅ should pass a null value
  ✅ should pass any positive integer value
  ✅ should reject an negative number
  ✅ should reject any non-number value
  ✅ should reject NaN
  ✅ should reject zero
validateAuthorSection* functions validateAuthorSectionType
  ✅ should pass a null value
  ✅ should pass any positive integer value
  ✅ should reject an negative number
  ✅ should reject any non-number value
  ✅ should reject NaN
  ✅ should reject zero
validateAuthorSection* functions validateForm
  ✅ should pass a valid Immutable.Map
  ✅ should pass a valid Object
  ✅ should pass an Object with an empty submission section
  ✅ should reject a null value
  ✅ should reject an invalid Immutable.Map
  ✅ should reject an Object with an invalid alias editor
  ✅ should reject an Object with an invalid author section
  ✅ should reject an Object with an invalid identifier editor
  ✅ should reject an Object with an invalid name section
  ✅ should reject any other non-null data type

✅ test/src/client/entity-editor/validators/test-edition.js

validateEditionSection* functions validateEditionSection
  ✅ should ignore any other non-null data type
  ✅ should pass a null value
  ✅ should pass a valid Immutable.Map
  ✅ should pass a valid Object
  ✅ should reject an invalid Immutable.Map
  ✅ should reject an Object with an invalid depth
  ✅ should reject an Object with an invalid edition group
  ✅ should reject an Object with an invalid format
  ✅ should reject an Object with an invalid height
  ✅ should reject an Object with an invalid pages
  ✅ should reject an Object with an invalid publisher
  ✅ should reject an Object with an invalid release date
  ✅ should reject an Object with an invalid status
  ✅ should reject an Object with an invalid weight
  ✅ should reject an Object with an invalid width
  ✅ should reject an Object with invalid languages
validateEditionSection* functions validateEditionSectionDepth
  ✅ should pass a null value
  ✅ should pass any positive integer value
  ✅ should reject an negative number
  ✅ should reject any non-number value
  ✅ should reject NaN
  ✅ should reject zero
validateEditionSection* functions validateEditionSectionEditionGroup
  ✅ should pass a null value
  ✅ should pass a valid Immutable.Map
  ✅ should pass a valid Object
  ✅ should pass any other non-null data type with no ID
  ✅ should reject an invalid Immutable.Map
  ✅ should reject an Object with an invalid ID
validateEditionSection* functions validateEditionSectionFormat
  ✅ should pass a null value
  ✅ should pass any positive integer value
  ✅ should reject an negative number
  ✅ should reject any non-number value
  ✅ should reject NaN
  ✅ should reject zero
validateEditionSection* functions validateEditionSectionHeight
  ✅ should pass a null value
  ✅ should pass any positive integer value
  ✅ should reject an negative number
  ✅ should reject any non-number value
  ✅ should reject NaN
  ✅ should reject zero
validateEditionSection* functions validateEditionSectionLanguage
  ✅ should pass a valid Immutable.Map
  ✅ should pass a valid Object
  ✅ should reject a null value
  ✅ should reject an invalid Immutable.Map
  ✅ should reject an Object with an invalid value
  ✅ should reject any other non-null data type
validateEditionSection* functions validateEditionSectionLanguages
  ✅ should pass a null value
  ✅ should pass an Array of two valid Objects
  ✅ should pass an empty Array
  ✅ should pass an empty Immutable.List
  ✅ should pass an Immutable.List of valid Immutable.Maps
  ✅ should reject an Array containing one invalid Object
  ✅ should reject an Immutable.List containing one invalid Immutable.Map
  ✅ should reject any other non-null data type
validateEditionSection* functions validateEditionSectionPages
  ✅ should pass a null value
  ✅ should pass any positive integer value
  ✅ should reject an negative number
  ✅ should reject any non-number value
  ✅ should reject NaN
  ✅ should reject zero
validateEditionSection* functions validateEditionSectionPublisher
  ✅ should pass a null value
  ✅ should pass a valid Immutable.Map
  ✅ should pass a valid Object
  ✅ should reject an invalid Immutable.Map
  ✅ should reject an Object with an invalid ID
  ✅ should reject any other non-null data type
validateEditionSection* functions validateEditionSectionReleaseDate
  ✅ should pass an empty value object
  ✅ should pass an object containing a valid year and month value
  ✅ should pass an object containing a valid year value
  ✅ should pass an object containing a valid year, month and day value
  ✅ should reject all other forms of invalid dates
validateEditionSection* functions validateEditionSectionStatus
  ✅ should pass a null value
  ✅ should pass any positive integer value
  ✅ should reject an negative number
  ✅ should reject any non-number value
  ✅ should reject NaN
  ✅ should reject zero
validateEditionSection* functions validateEditionSectionWeight
  ✅ should pass a null value
  ✅ should pass any positive integer value
  ✅ should reject an negative number
  ✅ should reject any non-number value
  ✅ should reject NaN
  ✅ should reject zero
validateEditionSection* functions validateEditionSectionWidth
  ✅ should pass a null value
  ✅ should pass any positive integer value
  ✅ should reject an negative number
  ✅ should reject any non-number value
  ✅ should reject NaN
  ✅ should reject zero
validateEditionSection* functions validateForm
  ✅ should pass a valid Immutable.Map
  ✅ should pass a valid Object
  ✅ should pass an Object with an empty author credit editor and AC disabled
  ✅ should pass an Object with an empty submission section
  ✅ should reject a null value
  ✅ should reject an invalid Immutable.Map
  ✅ should reject an Object with a non empty author credit editor and AC disabled
  ✅ should reject an Object with an empty author credit editor
  ✅ should reject an Object with an invalid alias editor
  ✅ should reject an Object with an invalid author credit editor
  ✅ should reject an Object with an invalid edition section
  ✅ should reject an Object with an invalid identifier editor
  ✅ should reject an Object with an invalid name section
  ✅ should reject any other non-null data type

✅ test/src/client/entity-editor/validators/test-identifier.js

validateIdentifier* functions validateIdentifier
  ✅ should pass a valid Immutable.Map
  ✅ should pass a valid Object
  ✅ should reject a null value
  ✅ should reject an invalid Immutable.Map
  ✅ should reject an Object with an invalid type
  ✅ should reject an Object with an invalid value
  ✅ should reject any other non-null data type
validateIdentifier* functions validateIdentifiers
  ✅ should pass an empty Immutable.Map
  ✅ should pass an empty Object
  ✅ should pass an Immutable.Map of valid Immutable.Maps
  ✅ should pass an Object of two valid Objects
  ✅ should reject a null value
  ✅ should reject an Immutable.Map containing one invalid Immutable.Map
  ✅ should reject an Object containing one invalid Object
  ✅ should reject any other non-null data type
validateIdentifier* functions validateIdentifierType with no type set
  ✅ should pass any positive integer value
  ✅ should reject a null value
  ✅ should reject an negative number
  ✅ should reject any non-number value
  ✅ should reject NaN
  ✅ should reject zero
validateIdentifier* functions validateIdentifierType with type set
  ✅ should pass any positive integer value which is a type ID
  ✅ should reject a null value
  ✅ should reject an negative number
  ✅ should reject any non-number value
  ✅ should reject any positive integer value which isn't a type ID
  ✅ should reject zero
validateIdentifier* functions validateIdentifierValue with no type set
  ✅ should pass any non-empty string value
  ✅ should reject a null value
  ✅ should reject an empty string
  ✅ should reject any non-string value
validateIdentifier* functions validateIdentifierValue with type set
  ✅ should pass a non-empty string value that matches the validation regular expression
  ✅ should reject a non-empty string value that doesn't match the validation regular expression
  ✅ should reject a null value
  ✅ should reject an empty string
  ✅ should reject any non-string value

✅ test/src/client/entity-editor/validators/test-name-section.js

validateNameSection* functions validateNameSection
  ✅ should pass a valid Immutable.Map
  ✅ should pass a valid Object
  ✅ should reject a null value
  ✅ should reject an invalid Immutable.Map
  ✅ should reject an Object with an invalid disambiguation
  ✅ should reject an Object with an invalid language
  ✅ should reject an Object with an invalid name
  ✅ should reject an Object with an invalid sort name
  ✅ should reject any other non-null data type
validateNameSection* functions validateNameSectionDisambiguation
  ✅ should pass a null value
  ✅ should pass any non-empty string value
  ✅ should reject an empty string
  ✅ should reject any non-string value
validateNameSection* functions validateNameSectionLanguage
  ✅ should pass any positive integer value
  ✅ should reject a null value
  ✅ should reject an negative number
  ✅ should reject any non-number value
  ✅ should reject NaN
  ✅ should reject zero
validateNameSection* functions validateNameSectionName
  ✅ should pass any non-empty string value
  ✅ should reject a null value
  ✅ should reject an empty string
  ✅ should reject any non-string value
validateNameSection* functions validateNameSectionSortName
  ✅ should pass any non-empty string value
  ✅ should reject a null value
  ✅ should reject an empty string
  ✅ should reject any non-string value

✅ test/src/client/entity-editor/validators/test-publication.js

validateEditionGroupSection* functions validateEditionGroupSection
  ✅ should pass a null value
  ✅ should pass a valid Immutable.Map
  ✅ should pass a valid Object
  ✅ should pass any other non-null data type
  ✅ should reject an invalid Immutable.Map
  ✅ should reject an Object with an invalid type
validateEditionGroupSection* functions validateEditionGroupSectionType
  ✅ should pass a null value
  ✅ should pass any positive integer value
  ✅ should reject an negative number
  ✅ should reject any non-number value
  ✅ should reject NaN
  ✅ should reject zero
validateEditionGroupSection* functions validateForm
  ✅ should pass a valid Immutable.Map
  ✅ should pass a valid Object
  ✅ should pass an Object with an empty submission section
  ✅ should reject a null value
  ✅ should reject an invalid Immutable.Map
  ✅ should reject an Object with an invalid alias editor
  ✅ should reject an Object with an invalid Edition Group section
  ✅ should reject an Object with an invalid identifier editor
  ✅ should reject an Object with an invalid name section
  ✅ should reject any other non-null data type

✅ test/src/client/entity-editor/validators/test-publisher.js

validatePublisherSection* functions validateForm
  ✅ should pass a valid Immutable.Map
  ✅ should pass a valid Object
  ✅ should pass an Object with an empty submission section
  ✅ should reject a null value
  ✅ should reject an invalid Immutable.Map
  ✅ should reject an Object with an invalid alias editor
  ✅ should reject an Object with an invalid identifier editor
  ✅ should reject an Object with an invalid name section
  ✅ should reject an Object with an invalid publisher section
  ✅ should reject any other non-null data type
validatePublisherSection* functions validatePublisherSection
  ✅ should pass a null value
  ✅ should pass a valid Immutable.Map
  ✅ should pass a valid Object
  ✅ should pass any other non-null data type
  ✅ should reject an invalid Immutable.Map
  ✅ should reject an Object with an invalid area
  ✅ should reject an Object with an invalid begin date
  ✅ should reject an Object with an invalid end date
  ✅ should reject an Object with an invalid ended flag
  ✅ should reject an Object with an invalid type
validatePublisherSection* functions validatePublisherSectionArea
  ✅ should pass a null value
  ✅ should pass a valid Immutable.Map
  ✅ should pass a valid Object
  ✅ should reject an invalid Immutable.Map
  ✅ should reject an Object with an invalid ID
  ✅ should reject any other non-null data type
validatePublisherSection* functions validatePublisherSectionBeginDate
  ✅ should pass an empty value object
  ✅ should pass an object containing a valid year and month value
  ✅ should pass an object containing a valid year value
  ✅ should pass an object containing a valid year, month and day value
  ✅ should reject all other forms of invalid dates
validatePublisherSection* functions validatePublisherSectionEndDate
  ✅ should pass if the begin date is empty/undefined/invalid
  ✅ should pass if the begin date occurs before the end one
  ✅ should reject if the begin date occurs after the end one
  ✅ should reject if the end date is invalid
validatePublisherSection* functions validatePublisherSectionEnded
  ✅ should pass a null value
  ✅ should pass any boolean value
  ✅ should reject any non-boolean value
validatePublisherSection* functions validatePublisherSectionType
  ✅ should pass a null value
  ✅ should pass any positive integer value
  ✅ should reject an negative number
  ✅ should reject any non-number value
  ✅ should reject NaN
  ✅ should reject zero

✅ test/src/client/entity-editor/validators/test-series.js

validateSeriesSection* functions validateForm
  ✅ should pass a valid Immutable.Map
  ✅ should pass a valid Object
  ✅ should pass an Object with an empty submission section
  ✅ should reject a null value
  ✅ should reject an invalid Immutable.Map
  ✅ should reject an Object with an invalid alias editor
  ✅ should reject an Object with an invalid identifier editor
  ✅ should reject an Object with an invalid name section
  ✅ should reject an Object with an invalid series section
  ✅ should reject any other non-null data type
validateSeriesSection* functions validateSeriesSection
  ✅ should pass a valid Immutable.Map
  ✅ should pass a valid Object
  ✅ should reject a null value
  ✅ should reject an invalid Immutable.Map
  ✅ should reject an Object with an invalid ordering type
  ✅ should reject an Object with an invalid series type
  ✅ should reject any other non-null data type
validateSeriesSection* functions validateSeriesSectionEntityType
  ✅ should return false if passed a invalid series type
  ✅ should return true if passed a valid series type
validateSeriesSection* functions validateSeriesSectionOrderingType
  ✅ should pass any positive integer value
  ✅ should reject a null value
  ✅ should reject an negative number
  ✅ should reject any non-number value
  ✅ should reject NaN
  ✅ should reject zero

✅ test/src/client/entity-editor/validators/test-submission-section.js

validateSubmissionSection* functions validateSubmissionSection
  ✅ should pass a null value
  ✅ should pass a valid Immutable.Map
  ✅ should pass a valid Object
  ✅ should pass an empty note Immutable.Map
  ✅ should pass an Object with an empty note
  ✅ should reject any other non-null data type
validateSubmissionSection* functions validateSubmissionSectionNote
  ✅ should pass a null value
  ✅ should pass any non-empty string value
  ✅ should reject an empty string
  ✅ should reject any non-string value

✅ test/src/client/entity-editor/validators/test-work.js

validateWorkSection* functions validateForm
  ✅ should pass a valid Immutable.Map
  ✅ should pass a valid Object
  ✅ should pass an Object with an empty submission section
  ✅ should reject a null value
  ✅ should reject an invalid Immutable.Map
  ✅ should reject an Object with an invalid alias editor
  ✅ should reject an Object with an invalid identifier editor
  ✅ should reject an Object with an invalid name section
  ✅ should reject an Object with an invalid work section
  ✅ should reject any other non-null data type
validateWorkSection* functions validateWorkSection
  ✅ should pass a null value
  ✅ should pass a valid Immutable.Map
  ✅ should pass a valid Object
  ✅ should pass any other non-null data type
  ✅ should reject an invalid Immutable.Map
  ✅ should reject an Object with an invalid language
  ✅ should reject an Object with an invalid type
validateWorkSection* functions validateWorkSectionLanguage
  ✅ should pass a null value
  ✅ should pass a valid Immutable.Map
  ✅ should pass a valid Object
  ✅ should reject an invalid Immutable.Map
  ✅ should reject an Object with an invalid value
  ✅ should reject any other non-null data type
validateWorkSection* functions validateWorkSectionType
  ✅ should pass a null value
  ✅ should pass any positive integer value
  ✅ should reject an negative number
  ✅ should reject any non-number value
  ✅ should reject NaN
  ✅ should reject zero

✅ test/src/client/unified-form/validators/test-cover-tab.js

CoverTabValidators validateCoverTabState
  ✅ should be false for modified cover tab state
  ✅ should be true for unmodified cover tab state
CoverTabValidators validateISBNState
  ✅ should be false for invalid isbn type
  ✅ should be true for valid isbn type

✅ test/src/client/unified-form/validators/test-detail-tab.js

DetailTabValidators
  ✅ should be false for modified detail-tab state
  ✅ should be true for unmodified detail-tab state

✅ test/src/server/helpers/collections.js

getOrderedCollectionsForEditorPage
  ✅ should return 1 collection when editor1 is logged in (fetching "Edition-Collection" for editor1)
  ✅ should return all collections when editor1 is logged in (fetching collections for editor1)
  ✅ should return all collections when editor2 is logged in (fetching collections for editor2)
  ✅ should return collections with expected keys
  ✅ should return correct collections when passed with an offset (fetching for editor1)
  ✅ should return only public collections when no one is logged in (fetching collections for editor1)
  ✅ should return only public collections when no one is logged in (fetching collections for editor2)
getOrderedPublicCollections
  ✅ should return collections when a filter is applied
  ✅ should return collections when passed with an offset
  ✅ should return collections with expected keys

✅ test/src/server/helpers/revisions.js

getAssociatedEntityRevisions
  ✅ should return formatted revisions array after adding entities (1 revision with multiple (different type) entities revised)
  ✅ should return formatted revisions array after adding entities (1 revision with multiple entities ( same type ) revised)
  ✅ should return formatted revisions array after adding entities (5 revision each with single entity revised)
  ✅ should return formatted revisions array after adding entity (1 revision with 1 entity revised)
getOrderedRevisionForEditorPage
  ✅ should return no results if offset is higher than total revisions
  ✅ should return sorted revisions with notes sorted according to "postedAt"
  ✅ should return sorted revisions with the expected keys
  ✅ should return the expected subset of revisions when passed an offset (from)
  ✅ should throw an error for an invalid editor
getOrderedRevisions
  ✅ should return no results if offset is higher than total revisions
  ✅ should return sorted revisions with the expected keys
  ✅ should return the expected subset of revisions when passed an offset (from)
getOrderedRevisionsForEntityPage
  ✅ should return ordered revisions with expected keys (Author Revision)
  ✅ should return ordered revisions with expected keys (edition revision)
  ✅ should return ordered revisions with expected keys (EditionGroup revision)
  ✅ should return ordered revisions with expected keys (publisher revision)
  ✅ should return ordered revisions with expected keys (work revision)
  ✅ should return revisions of merged entities
  ✅ should return revisions of previously merged entities recursively
  ✅ should return revisions with notes sorted according to "postedAt" and with expected keys

✅ test/src/server/helpers/utils.js

Convert ISBNs
  ✅ should return null if isbn10 not valid
  ✅ should return null if isbn13 not valid
  ✅ should return valid isbn10 from isbn13
  ✅ should return valid isbn13 from isbn10
generateIdenfierState
  ✅ should return correctly formatted identifier state
getIdByField
  ✅ should return null if item does not exists
  ✅ should return the ID for an existing item
getNextEnabledAndResultsArray
  ✅ should return an array of required length and nextEnabled:false when results.length < size
  ✅ should return an array of required length and nextEnabled:false when results.length = 0
  ✅ should return an array of required length and nextEnabled:false when results.length = size
  ✅ should return an array of required length and nextEnabled:true when results.length > size
  ✅ should return an array of required length and nextEnabled:true when results.length > size and results.length - size > 1
parseLanguages
  ✅ should return correctly formatted languages state
searchOption
  ✅ should return correct option if match found
  ✅ should return null if no exact match found

✅ test/src/server/routes/collection.js

POST /collection/:collectionID/add
  ✅ should be able to add multiple items
  ✅ should be able to add to my own collection
  ✅ should be able to add to private collection I"m collaborator of
  ✅ should be able to add to public collection I"m collaborator of
  ✅ should not add duplicate items
  ✅ should not be able to add to a private collection I’m not a collaborator of
  ✅ should not be able to add to a public collection I’m not a collaborator of
  ✅ should throw an error when trying to add an entity of type different than the collection type
  ✅ should throw an error when trying to add an entity that does not exist
  ✅ should throw an error when trying to add entity with invalid bbid
  ✅ should throw error for empty bbid array
POST /collection/:collectionID/remove
  ✅ should be able to remove from my own collection
  ✅ should be able to remove from private collection I"m collaborator of
  ✅ should be able to remove from public collection I"m collaborator of
  ✅ should be able to remove multiple items
  ✅ should not be able to remove from a private collection I’m not a collaborator of
  ✅ should not be able to remove from a public collection I’m not a collaborator of
  ✅ should throw error for empty bbid array
  ✅ should throw error when trying to remove an entity that do not exist in the collection
  ✅ should throw error when trying to remove an entity with invalid bbid
POST /collection/collectionID/collaborator/remove
  ✅ should allow collaborator to stop collaboration
  ✅ should allow the owner to remove collaborators
  ✅ should throw error if a collaborator tries to remove another collaborator
  ✅ should throw error if collaboratorIds array is empty
  ✅ should throw error when trying to remove incorrect collaborator
  ✅ should throw error when unauthorized (neither collaborator nor owner) tries to remove collaborators
POST /collection/collectionID/delete
  ✅ should be able to delete my collection
  ✅ should delete all the collaborators along with the collection
  ✅ should delete all the items along with the collection
  ✅ should not allow collaborator to delete the collection
  ✅ should not allow unauthorized user to delete the collection
  ✅ should remove collection from ES index
POST /collection/create
  ✅ should add the collection in the ES index
  ✅ should correctly add collaborators in the collection
  ✅ should correctly create collection and return with status code 200 for correct data
  ✅ should correctly create Edition-Group collection and return with status code 200 for correct data
  ✅ should throw error for empty collection name
  ✅ should throw error for incorrect collaborator id (collaborator does not exist)
  ✅ should throw error for incorrect entityType
  ✅ should throw error for invalid collaborator id (negative number)
  ✅ should throw error for invalid collaborator id (string)
POST collection/edit
  ✅ should correctly add a new collaborator and return 200 status code
  ✅ should correctly remove a collaborator and return 200 status code
  ✅ should correctly update the collection and return 200 status code
  ✅ should correctly update the collection to Edition-Group type and return 200 status code
  ✅ should throw error for empty collection name
  ✅ should throw error for incorrect collaborator id (collaborator does not exist)
  ✅ should throw error for incorrect entityType
  ✅ should throw error for invalid collaborator id (negative number)
  ✅ should throw error for invalid collaborator id (string)
  ✅ should throw error when collaborator tries to edit the collection
  ✅ should throw error when trying to edit entityType of a non empty collection
  ✅ should throw error when unauthorized user tries to edit the collection
  ✅ should update the collection in the ES index

✅ test/src/server/routes/editor.js

Editor with Administrator priv
  ✅ should be able to edit privs of an editor
Editor without Administrator priv
  ✅ should not be able to edit privs of an editor
getEditorActivity
  ✅ should give count months with zero or multiple revisions
  ✅ should not throw error when editor has zero revisions
  ✅ should return revision data for graph
  ✅ should throw an error for an invalid endDate
  ✅ should throw an error for an invalid startDate
  ✅ should throw an error when startDate is greater than endDate

✅ test/src/server/routes/entity/author.js

Author routes with entity editing priv
  ✅ should not throw an error if creating new author
  ✅ should not throw an error if requested author BBID exists
  ✅ should not throw an error trying to edit an existing author
  ✅ should not throw error while seeding author
  ✅ should not throw not authorized error while seeding author
  ✅ should throw an error if requested BBID is invalid
Author routes without entity editing priv
  ✅ should throw an error if trying to open author create page
  ✅ should throw an error trying to edit an existing author
  ✅ should throw an error when trying to delete an existing author
  ✅ should throw not authorized error while seeding author

✅ test/src/server/routes/entity/edition-group.js

Edition Group routes with entity editing priv
  ✅ should not throw an error if creating new edition-group
  ✅ should not throw an error if requested edition group BBID exists
  ✅ should not throw an error trying to edit an existing edition group
  ✅ should not throw error while seeding edition group
  ✅ should not throw not authorized error while seeding edition group
  ✅ should throw an error if requested BBID is invalid
Edition Group routes without entity editing priv
  ✅ should throw an error if trying to open edition-group create page
  ✅ should throw an error trying to edit an existing edition-group
  ✅ should throw an error when trying to delete an existing edition-group
  ✅ should throw not authorized error while seeding edition-group

✅ test/src/server/routes/entity/edition.js

Edition routes with entity editing priv
  ✅ should not throw an error if creating new edition
  ✅ should not throw an error if requested edition BBID exists
  ✅ should not throw an error trying to edit an existing edition
  ✅ should not throw error while seeding edition
  ✅ should not throw not authorized error while seeding edition
  ✅ should throw an error if requested BBID is invalid
Edition routes without entity editing priv
  ✅ should throw an error if trying to open edition create page
  ✅ should throw an error trying to edit an existing edition
  ✅ should throw an error when trying to delete an existing edition
  ✅ should throw not authorized error while seeding edition

✅ test/src/server/routes/entity/entity.js

deleteRelationships
  ✅ it should delete only the relationships to the entity being deleted (meaning if entity A has rels to B and C and I deleted B, A should still have a rel to C)
  ✅ it should return an array containing the other entity to modify (this should also check that the returned entity model has a changed relationshipSetId)
  ✅ it should return an array with multiple other entities to modify if there are relationships to multiple entities
  ✅ it should return an empty array if the other entity is a deleted entity (no dataId)
  ✅ it should return an empty array if there are no relationships to delete
getDefaultAliasIndex
  ✅ should return 0 if there is no defaultAliasId and no alias marked as default
  ✅ should return null if there are no aliases in the aliasSet
  ✅ should return null if there is not aliasSet
  ✅ should return the index of the alias matching the set's defaultAliasId
  ✅ should return the index of the alias matching the set's defaultAliasId if it is a string
  ✅ should return the index of the first alias marked as default if there is no defaultAliasId
processMergeOperation
  ✅ should add the bbid of the merged entity to the entity_redirect table
  ✅ should add the entity to be merged to the returned entities
  ✅ should modify the relationshipSet of any entity related to an entity being merged
  ✅ should throw an error if there is no mergingEntities in the mergeQueue
  ✅ should throw an error if trying to merge into an entity not in the mergeQueue

✅ test/src/server/routes/entity/publisher.js

Publisher routes with entity editing priv
  ✅ should not throw an error if creating new publisher
  ✅ should not throw an error if requested publisher BBID exists
  ✅ should not throw an error trying to edit an existing publisher
  ✅ should not throw error while seeding publisher
  ✅ should not throw not authorized error while seeding publisher
  ✅ should throw an error if requested BBID is invalid
Publisher routes without entity editing priv
  ✅ should throw an error if trying to open publisher create page
  ✅ should throw an error trying to edit an existing publisher
  ✅ should throw an error when trying to delete an existing publisher
  ✅ should throw not authorized error while seeding publisher

✅ test/src/server/routes/entity/series.js

Series routes with entity editing priv
  ✅ should not throw an error if creating new series
  ✅ should not throw an error if requested series BBID exists
  ✅ should not throw an error trying to edit an existing series
  ✅ should not throw error while seeding series
  ✅ should not throw not authorized error while seeding series
  ✅ should throw an error if requested BBID is invalid
Series routes without entity editing priv
  ✅ should throw an error if trying to open series create page
  ✅ should throw an error trying to edit an existing series
  ✅ should throw an error when trying to delete an existing series
  ✅ should throw not authorized error while seeding series

✅ test/src/server/routes/entity/work.js

Work routes with entity editing priv
  ✅ should not throw an error if creating new work
  ✅ should not throw an error if requested work BBID exists
  ✅ should not throw an error trying to edit an existing work
  ✅ should not throw error while seeding work
  ✅ should not throw not authorized error while seeding work
  ✅ should throw an error if requested BBID is invalid
Work routes without entity editing priv
  ✅ should throw an error if trying to open work create page
  ✅ should throw an error trying to edit an existing work
  ✅ should throw an error when trying to delete an existing work
  ✅ should throw not authorized error while seeding work

✅ test/src/server/routes/merge.js

Merge routes with entity editing priv /add route
  ✅ should add an entity to the merge queue
  ✅ should allow adding another entity of same type to the merge queue
  ✅ should do nothing and redirect when adding the same entity BBID
  ✅ should recreate the merge queue if adding another entity type
  ✅ should throw a 404 error if entity does not exist
  ✅ should throw an 400 error if adding an invalid BBID
  ✅ should throw an 404 error if BBID is absent (invalid route)
Merge routes with entity editing priv /cancel route
  ✅ should clear the merge queue
Merge routes without entity editing priv /add route
  ✅ should throw 403 error when trying to add an entity to the merge queue
  ✅ should throw a 403 error if adding an invalid BBID
  ✅ should throw a 403 error if entity does not exist
  ✅ should throw an 404 error if BBID is absent (invalid route)

✅ test/src/server/routes/relationship.js

Relationship
  ✅ should be able to add new relationships without having previous relationships
  ✅ should be able to add relationship on an entity
  ✅ should be able to remove relationship of an entity

✅ test/src/server/routes/revision.js

checkValidRevisionId
  ✅ should not throw an error when revision id is valid and found
  ✅ should throw an error if requested id is invalid
  ✅ should throw an error when revision id is a decimal
  ✅ should throw an error when revision id is unavailable

✅ test/src/server/routes/type-editor/identifier-type.js

Identifier Type routes with Identifier Editor priv
  ✅ should be able to correctly update the Identifier type and return status code 200
  ✅ should be able to create a new Identifier type and return with status code 200
  ✅ should not throw an error while accessing Identifier Type Editor to create new Identifier type
  ✅ should not throw an error while accessing Identifier Type Editor to edit an existing Identifier type
  ✅ should throw a 404 error when trying to access Identifier Type Editor with a non-existent id
  ✅ should throw an error when trying to access Identifier Type Editor with an invalid id
Identifier Type routes without Identifier Editor priv
  ✅ should not be able to create a new Identifier type
  ✅ should not be able to update a Identifier type
  ✅ should throw an error when trying to access Identifier Type Editor with a non-existent id
  ✅ should throw an error while accessing Identifier Type Editor to create new Identifier type
  ✅ should throw an error while accessing Identifier Type Editor to edit an existing Identifier type

✅ test/src/server/routes/type-editor/relationship-type.js

Relationship Type routes with Relationship Editor priv
  ✅ should be able to correctly update the relationship type and return status code 200
  ✅ should be able to create a new relationship type and return with status code 200
  ✅ should not throw an error while accessing Relationship Type Editor to create new relationship type
  ✅ should not throw an error while accessing Relationship Type Editor to edit an existing relationship type
  ✅ should throw a 404 error when trying to access Relationship Type Editor with a non-existent id
  ✅ should throw an error when trying to access Relationship Type Editor with an invalid id
Relationship Type routes without Relationship Editor priv
  ✅ should not be able to create a new relationship type
  ✅ should not be able to update a relationship type
  ✅ should throw an error when trying to access Relationship Type Editor with a non-existent id
  ✅ should throw an error while accessing Relationship Type Editor to create new relationship type
  ✅ should throw an error while accessing Relationship Type Editor to edit an existing relationship type

✅ test/src/server/routes/unifiedform.js

Unified form routes with entity editing priv
  ✅ should not throw error when linking existing works to edition
  ✅ should not throw error while adding relationship to single entity
  ✅ should not throw error while creating multiple entities
  ✅ should not throw error while creating single entity
  ✅ should not throw error while editing single entity
  ✅ should not throw error while linking existing author to edition using AC
  ✅ should not throw error while linking existing edition-group to edition
  ✅ should not throw error while linking existing publisher to edition
  ✅ should throw bad request error while posting invalid form
Unified form routes without entity editing priv
  ✅ should throw an error if trying to open unified form create page

✅ test/test-achievement.js

achievement module Author Creator Achievement
  ✅ I should be given to someone with an author creation
  ✅ II should be given to someone with 10 author creations
  ✅ III should be given to someone with 100 author creations
  ✅ should not be given to someone with 0 author creations
achievement module awardAchievement
  ✅ should award achievements
  ✅ should reject invalid achievements
  ✅ should reject invalid editors
achievement module awardTitle
  ✅ should award titles
  ✅ should reject invalid editors
  ✅ should reject invalid titles
achievement module Explorer Achievement
  ✅ I should be given to someone with 10 entity views
  ✅ I should not be given to someone with 9 entity views
  ✅ II should be given to someone with 100 entity views
  ✅ III should be given to someone with 1000 entity views
achievement module Fun Runner Achievement
  ✅ should be given to someone with a revision a day for a week
  ✅ shouldn't be given to someone without a revision a day for a week
achievement module Hot Off the Press Achievement
  ✅ should be given to someone with edition revision released this week
  ✅ shouldn't be given when edition revision released a week ago
achievement module Limited Edition Achievement
  ✅ I should given to someone with an edition creation
  ✅ II should be given to someone with 10 edition creations
  ✅ III should be given to someone with 100 edition creations
  ✅ should not given to someone with 0 edition creations
achievement module Marathoner Achievement
  ✅ should be given to someone with a revision a day for 30 days
  ✅ shouldn't be given to someone without a revision a day for 30 days
achievement module Publisher Achievement
  ✅ I should be given to someone with an edition group creation
  ✅ II should be given to someone with 10 edition groups creations
  ✅ III should be given to someone with 100 edition groups creations
  ✅ should not be given to someone with 0 edition group creation
achievement module Publisher Creator Achievement
  ✅ I should be given to someone with a publisher creation
  ✅ II should be given to someone with 10 publisher creations
  ✅ III should be given to someone with 100 publisher creations
  ✅ should not be given to someone with 0 publisher creations
achievement module Revisionist Achievement
  ✅ I should be given to someone with a revision
  ✅ II should be given to someone with 50 revisions
  ✅ III should be given to someone with 250 revisions
  ✅ should not be given to someone without a revision
achievement module Series Creator Achievement
  ✅ I should be given to someone with a series creation
  ✅ II should be given to someone with 10 series creations
  ✅ III should be given to someone with 100 series creations
  ✅ should not be given to someone with 0 series creations
achievement module Sprinter Achievement
  ✅ should be given to someone with 10 revisions in an hour
  ✅ should not be given to someone with 9 revisions in an hour
achievement module Time Traveller Achievement
  ✅ should be given to someone with edition revision released after today
  ✅ shouldn't be given to someone with edition revision already released
achievement module Worker Bee Achievement
  ✅ I should be given to someone with a work creation
  ✅ II should be given to someone with 10 work creations
  ✅ III should be given to someone with 100 work creations
  ✅ should not be given to someone with 0 work creations

✅ test/test-render-relationship.js

renderRelationship
  ✅ renders a fully specified relationship
  ✅ renders a fully specified relationship with numeric bbids
  ✅ renders a relationship where the source entity is unnamed
  ✅ throws on a null link phrase
  ✅ throws on null entities
  ✅ works with an empty link phrase

✅ test/test-site.js

GET /
  ✅ should return 200
GET /about
  ✅ should return 200
GET /contribute
  ✅ should return 200
GET /develop
  ✅ should return 200