diff --git a/.github/workflows/deploy_production.yml b/.github/workflows/deploy_production.yml new file mode 100644 index 000000000..96dc31adb --- /dev/null +++ b/.github/workflows/deploy_production.yml @@ -0,0 +1,47 @@ +# Deploys to research-catalog-production +name: deploy production + +on: + push: + branches: + - production + +permissions: + id-token: write + contents: read + +env: + AWS_DEFAULT_REGION: us-east-1 + LOCAL_TAG_NAME: research-catalog:${{ github.ref_name }}-${{ github.run_number }} + ECR_URL: 946183545209.dkr.ecr.us-east-1.amazonaws.com/research-catalog:production-latest + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Check out code + uses: actions/checkout@v4 + + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: arn:aws:iam::946183545209:role/GithubActionsDeployerRole + aws-region: us-east-1 + + - name: Log in to Amazon ECR + id: login-ecr + uses: aws-actions/amazon-ecr-login@v2 + + - name: Build and push Docker image to Amazon ECR + run: | + docker build --build-arg NEXT_PUBLIC_APP_ENV=production --tag $LOCAL_TAG_NAME . + docker tag $LOCAL_TAG_NAME $ECR_URL + # Re-tag last latest image just in case + MANIFEST=$(aws ecr batch-get-image --repository-name research-catalog --image-ids imageTag="production-latest" --output json | jq --raw-output --join-output '.images[0].imageManifest') + aws ecr batch-delete-image --repository-name research-catalog --image-ids imageTag="production-previous" || true + aws ecr put-image --repository-name research-catalog --image-tag "production-previous" --image-manifest "$MANIFEST" || true + docker push $ECR_URL + + - name: Update ECS service + run: | + aws ecs update-service --cluster research-catalog-production --service research-catalog-production --force-new-deployment diff --git a/.github/workflows/deploy_qa.yml b/.github/workflows/deploy_qa.yml new file mode 100644 index 000000000..943dbcdd9 --- /dev/null +++ b/.github/workflows/deploy_qa.yml @@ -0,0 +1,48 @@ +# Deploys to research-catalog-qa +name: deploy qa + +on: + push: + branches: + - qa + - SCC-4218/move-rc-from-travis-to-github-actions + +permissions: + id-token: write + contents: read + +env: + AWS_DEFAULT_REGION: us-east-1 + LOCAL_TAG_NAME: research-catalog:${{ github.ref_name }}-${{ github.run_number }} + ECR_URL: 946183545209.dkr.ecr.us-east-1.amazonaws.com/research-catalog:qa-latest + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Check out code + uses: actions/checkout@v4 + + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: arn:aws:iam::946183545209:role/GithubActionsDeployerRole + aws-region: us-east-1 + + - name: Log in to Amazon ECR + id: login-ecr + uses: aws-actions/amazon-ecr-login@v2 + + - name: Build and push Docker image to Amazon ECR + run: | + docker build --build-arg NEXT_PUBLIC_APP_ENV=qa --tag $LOCAL_TAG_NAME . + docker tag $LOCAL_TAG_NAME $ECR_URL + # Re-tag last latest image just in case + MANIFEST=$(aws ecr batch-get-image --repository-name research-catalog --image-ids imageTag="qa-latest" --output json | jq --raw-output --join-output '.images[0].imageManifest') + aws ecr batch-delete-image --repository-name research-catalog --image-ids imageTag="qa-previous" || true + aws ecr put-image --repository-name research-catalog --image-tag "qa-previous" --image-manifest "$MANIFEST" || true + docker push $ECR_URL + + - name: Update ECS service + run: | + aws ecs update-service --cluster research-catalog-qa --service research-catalog-qa --force-new-deployment diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index b706a49df..baea7a1eb 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -8,12 +8,12 @@ jobs: strategy: matrix: - node-version: [18.x] + node-version: [20.x] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - name: npm install diff --git a/.nvmrc b/.nvmrc index 25bf17fc5..2edeafb09 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -18 \ No newline at end of file +20 \ No newline at end of file diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index a4f042c26..000000000 --- a/.travis.yml +++ /dev/null @@ -1,63 +0,0 @@ -dist: xenial -language: ruby - -services: - - docker - -branches: - only: - - qa - - production - -jobs: - include: - - stage: docker build - if: (branch = qa or branch = production) - before_install: - - if [[ $TRAVIS_BRANCH == "qa" ]]; - then - export NEXT_PUBLIC_APP_ENV="qa"; - fi - - if [[ "$TRAVIS_BRANCH" == "production" ]]; - then - export NEXT_PUBLIC_APP_ENV="production"; - fi - env: - - ECR_URL=946183545209.dkr.ecr.us-east-1.amazonaws.com/research-catalog - - AWS_DEFAULT_REGION=us-east-1 - - AWS_REGION=us-east-1 - install: - - pip install --user awscli - - export LOCAL_TAG_NAME="${NEXT_PUBLIC_APP_ENV}-latest" - script: - - eval $(aws ecr get-login --no-include-email --region us-east-1) - - docker build -t "$LOCAL_TAG_NAME" --build-arg NEXT_PUBLIC_APP_ENV="${NEXT_PUBLIC_APP_ENV}" . - - docker tag "$LOCAL_TAG_NAME" "$ECR_URL:$LOCAL_TAG_NAME" - # Re-tag last latest image just in case - - | - MANIFEST=$(aws ecr batch-get-image --repository-name research-catalog --image-ids imageTag="$NEXT_PUBLIC_APP_ENV-latest" --output json | jq --raw-output --join-output '.images[0].imageManifest') - aws ecr batch-delete-image --repository-name research-catalog --image-ids imageTag="$NEXT_PUBLIC_APP_ENV-previous" || true - aws ecr put-image --repository-name research-catalog --image-tag "$NEXT_PUBLIC_APP_ENV-previous" --image-manifest "$MANIFEST" || true - - docker push "$ECR_URL:$LOCAL_TAG_NAME" - - - stage: deploy qa - if: branch IN (qa) AND type != pull_request - env: - - AWS_DEFAULT_REGION=us-east-1 - - AWS_REGION=us-east-1 - - CLUSTER_NAME=research-catalog-qa - install: - - pip install --user awscli - script: - - aws ecs update-service --cluster $CLUSTER_NAME --service $CLUSTER_NAME --force-new-deployment - - - stage: deploy production - if: branch IN (production) AND type != pull_request - env: - - AWS_DEFAULT_REGION=us-east-1 - - AWS_REGION=us-east-1 - - CLUSTER_NAME=research-catalog-production - install: - - pip install --user awscli - script: - - aws ecs update-service --cluster $CLUSTER_NAME --service $CLUSTER_NAME --force-new-deployment diff --git a/CHANGELOG b/CHANGELOG index 88d470707..4353e6f4b 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -5,6 +5,35 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.3.0] 2024-10-3 + +### Added + +## Hotfix + +- Fix bug where the "View fewer" button was not appearing when filters weren't applied + +### Fixed + +- Small styling fixes after DS version bump to 3.4.0 (SCC-4264) +- Fix bug where "undefined" appears in the search results heading (SCC-4277) +- VQA second pass miscellaneous fixes (SCC-4264) +- Fixed accessibility issue on Bib page where focus moves to Displaying text when filters are controlled via MultiSelect. This will change when dynamic updates are replaced with an apply button (SCC-4246) + +### Updated + +- Bump DS version to 3.4.0 +- Bump nvmrc version to Node 20. +- Update error message in Item Filter Year to include new error message prefix from the DS. +- Integrate view_all query param on client side and remove batched fetch (SCC-4287) +- Replaced travis with github actions (SCC-4218) +- Sentence case and rearrange search options (SCC-4260) + +Added the following, but commented out for later release: + +- Call number search scope to search dropdown options [(SCC-4260)](https://newyorkpubliclibrary.atlassian.net/browse/SCC-4260) +- Search tip per search scope [(SCC-4263)](https://newyorkpubliclibrary.atlassian.net/browse/SCC-4263) + ## [1.2.4] 2024-08-29 ### Fixed @@ -24,6 +53,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed some accessibility issues including making Request button titles more specific and fixing a layout issue on zoom. (SCC-4234) +### Fixed + +- Fixed visual and copy issues found in VQA (SCC-4235) + ## [1.2.2] 2024-08-14 ### Updated diff --git a/Dockerfile b/Dockerfile index 94151590a..04267d537 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:16-alpine AS production +FROM node:20-alpine AS production #RUN apt-get update #RUN apt-get upgrade -y diff --git a/Dockerfile.development b/Dockerfile.development index 1f3a1d068..b74e61a9f 100644 --- a/Dockerfile.development +++ b/Dockerfile.development @@ -1,4 +1,4 @@ -FROM node:16-alpine +FROM node:20-alpine WORKDIR /app diff --git a/__test__/fixtures/bibFixtures.ts b/__test__/fixtures/bibFixtures.ts index dd25a78ce..294842e95 100644 --- a/__test__/fixtures/bibFixtures.ts +++ b/__test__/fixtures/bibFixtures.ts @@ -11273,3 +11273,535 @@ export const bibManyEResources = { subjectHeadings: null, }, } + +export const bibWithSubjectHeadings = { + resource: { + "@context": + "http://discovery-api-qa.nypl.org/api/v0.1/discovery/context_all.jsonld", + "@type": ["nypl:Item", "nypl:Resource"], + "@id": "res:b16145054", + buildingLocationIds: ["rc"], + carrierType: [ + { + "@id": "carriertypes:nc", + prefLabel: "volume", + }, + ], + createdString: [2005], + createdYear: 2005, + creatorLiteral: ["Cortanze, Gérard de."], + creatorLiteralNormalized: ["Gérard Cortanze", "Gérard de Cortanze"], + creatorLiteralWithoutDates: ["Cortanze, Gérard de."], + dateStartYear: 2005, + dateString: [2005], + dimensions: ["19 cm."], + electronicResources: [], + extent: ["193 p. : ill. ;"], + idIsbn: [2070775178], + idLccn: [2005483039], + idOclc: [61868265], + identifier: [ + { + "@type": "bf:ShelfMark", + "@value": "JFC 06-438", + }, + { + "@type": "nypl:Bnumber", + "@value": 16145054, + }, + { + "@type": "bf:Isbn", + "@value": 2070775178, + }, + { + "@type": "nypl:Oclc", + "@value": 61868265, + }, + { + "@type": "bf:Lccn", + "@value": 2005483039, + }, + { + "@type": "bf:Identifier", + "@value": "(WaOLN)M040000221", + }, + ], + issuance: [ + { + "@id": "urn:biblevel:m", + prefLabel: "monograph/item", + }, + ], + itemAggregations: [ + { + "@type": "nypl:Aggregation", + "@id": "res:location", + id: "location", + field: "location", + values: [ + { + value: "loc:rc2ma", + count: 1, + label: "Offsite", + }, + ], + }, + { + "@type": "nypl:Aggregation", + "@id": "res:format", + id: "format", + field: "format", + values: [ + { + value: "Text", + count: 1, + label: "Text", + }, + ], + }, + { + "@type": "nypl:Aggregation", + "@id": "res:status", + id: "status", + field: "status", + values: [ + { + value: "status:a", + count: 1, + label: "Available", + }, + ], + }, + ], + items: [ + { + "@id": "res:i15550040", + "@type": ["bf:Item"], + accessMessage: [ + { + "@id": "accessMessage:2", + prefLabel: "Request in advance", + }, + ], + catalogItemType: [ + { + "@id": "catalogItemType:55", + prefLabel: "book, limited circ, MaRLI", + }, + ], + eddFulfillment: { + "@id": "fulfillment:recap-edd", + }, + eddRequestable: true, + formatLiteral: ["Text"], + holdingLocation: [ + { + "@id": "loc:rc2ma", + prefLabel: "Offsite", + }, + ], + idBarcode: ["33433073236758"], + identifier: [ + { + "@type": "bf:ShelfMark", + "@value": "JFC 06-438", + }, + { + "@type": "bf:Barcode", + "@value": "33433073236758", + }, + ], + owner: [ + { + "@id": "orgs:1000", + prefLabel: "Stephen A. Schwarzman Building", + }, + ], + physFulfillment: { + "@id": "fulfillment:recap-offsite", + }, + physRequestable: true, + physicalLocation: ["JFC 06-438"], + recapCustomerCode: ["NA"], + requestable: [true], + shelfMark: ["JFC 06-438"], + specRequestable: false, + status: [ + { + "@id": "status:a", + prefLabel: "Available", + }, + ], + uri: "i15550040", + idNyplSourceId: { + "@type": "SierraNypl", + "@value": "15550040", + }, + }, + ], + language: [ + { + "@id": "lang:fre", + prefLabel: "French", + }, + ], + lccClassification: ["PQ2663.O7223 Z46 2005"], + materialType: [ + { + "@id": "resourcetypes:txt", + prefLabel: "Text", + }, + ], + mediaType: [ + { + "@id": "mediatypes:n", + prefLabel: "unmediated", + }, + ], + numCheckinCardItems: 0, + numElectronicResources: 0, + numItemDatesParsed: 0, + numItemVolumesParsed: 0, + numItemsMatched: 1, + numItemsTotal: 1, + nyplSource: ["sierra-nypl"], + placeOfPublication: ["[Paris, France]"], + popularity: 1, + publicationStatement: ["[Paris, France] : Gallimard, c2005."], + publisherLiteral: ["Gallimard"], + seriesStatement: ["Haute enfance"], + shelfMark: ["JFC 06-438"], + subjectLiteral: [ + "Cortanze, Gérard de -- Childhood and youth.", + "Authors, French -- 20th century -- Biography.", + "Autobiographical Narrative", + ], + title: ["Spaghetti!"], + titleDisplay: ["Spaghetti! / Gérard de Cortanze."], + type: ["nypl:Item"], + uniformTitle: ["Haute enfance (Gallimard (Firm))"], + updatedAt: 1723133852918, + uri: "b16145054", + suppressed: false, + hasItemVolumes: false, + hasItemDates: false, + subjectHeadings: [ + { + label: "Cortanze, Gérard de -- Childhood and youth", + uuid: "74746d11-638b-4cfb-a72a-9a2bd296e6fd", + bib_count: 1, + desc_count: 0, + parent: { + label: "Cortanze, Gérard de", + uuid: "cf347108-e1f2-4c0f-808a-ac4ace2f0765", + bib_count: 5, + desc_count: 4, + }, + }, + { + label: "Authors, French -- 20th century -- Biography", + uuid: "9391bc26-e44c-44ac-98cc-e3800da51926", + bib_count: 5319, + desc_count: 22, + parent: { + label: "Authors, French -- 20th century", + uuid: "e43674a7-5f02-44f1-95cd-dbcc776331b7", + bib_count: 8405, + desc_count: 197, + parent: { + label: "Authors, French", + uuid: "5fd065df-b4e9-48cb-b13c-ea15f36b96b4", + bib_count: 14275, + desc_count: 1012, + }, + }, + }, + { + label: "Autobiographical Narrative", + uuid: "3a779ed6-8a07-4d27-80ef-e0c2b10fe78e", + bib_count: 505, + desc_count: 343, + }, + ], + }, + annotatedMarc: { + id: "16145054", + nyplSource: "sierra-nypl", + fields: [ + { + label: "Author", + values: [ + { + content: "Cortanze, Gérard de.", + source: { + fieldTag: "a", + marcTag: "100", + ind1: "1", + ind2: " ", + content: null, + subfields: [ + { + tag: "a", + content: "Cortanze, Gérard de.", + }, + ], + }, + }, + ], + }, + { + label: "Title", + values: [ + { + content: "Spaghetti! / Gérard de Cortanze.", + source: { + fieldTag: "t", + marcTag: "245", + ind1: "1", + ind2: "0", + content: null, + subfields: [ + { + tag: "a", + content: "Spaghetti! /", + }, + { + tag: "c", + content: "Gérard de Cortanze.", + }, + ], + }, + }, + ], + }, + { + label: "Imprint", + values: [ + { + content: "[Paris, France] : Gallimard, c2005.", + source: { + fieldTag: "p", + marcTag: "260", + ind1: " ", + ind2: " ", + content: null, + subfields: [ + { + tag: "a", + content: "[Paris, France] :", + }, + { + tag: "b", + content: "Gallimard,", + }, + { + tag: "c", + content: "c2005.", + }, + ], + }, + }, + ], + }, + { + label: "Description", + values: [ + { + content: "193 p. : ill. ; 19 cm.", + source: { + fieldTag: "r", + marcTag: "300", + ind1: " ", + ind2: " ", + content: null, + subfields: [ + { + tag: "a", + content: "193 p. :", + }, + { + tag: "b", + content: "ill. ;", + }, + { + tag: "c", + content: "19 cm.", + }, + ], + }, + }, + ], + }, + { + label: "Series", + values: [ + { + content: "Haute enfance", + source: { + fieldTag: "s", + marcTag: "490", + ind1: "1", + ind2: " ", + content: null, + subfields: [ + { + tag: "a", + content: "Haute enfance", + }, + ], + }, + }, + { + content: "Haute enfance (Gallimard (Firm))", + source: { + fieldTag: "s", + marcTag: "830", + ind1: " ", + ind2: "0", + content: null, + subfields: [ + { + tag: "a", + content: "Haute enfance (Gallimard (Firm))", + }, + ], + }, + }, + ], + }, + { + label: "Indexed Term", + values: [ + { + content: "Autobiographical Narrative", + source: { + fieldTag: "d", + marcTag: "653", + ind1: " ", + ind2: " ", + content: null, + subfields: [ + { + tag: "a", + content: "Autobiographical Narrative", + }, + ], + }, + }, + ], + }, + { + label: "Subject", + values: [ + { + content: "Cortanze, Gérard de -- Childhood and youth.", + source: { + fieldTag: "d", + marcTag: "600", + ind1: "1", + ind2: "0", + content: null, + subfields: [ + { + tag: "a", + content: "Cortanze, Gérard de", + }, + { + tag: "x", + content: "Childhood and youth.", + }, + ], + }, + }, + { + content: "Authors, French -- 20th century -- Biography.", + source: { + fieldTag: "d", + marcTag: "650", + ind1: " ", + ind2: "0", + content: null, + subfields: [ + { + tag: "a", + content: "Authors, French", + }, + { + tag: "y", + content: "20th century", + }, + { + tag: "v", + content: "Biography.", + }, + ], + }, + }, + ], + }, + { + label: "LCCN", + values: [ + { + content: "2005483039", + source: { + fieldTag: "l", + marcTag: "010", + ind1: " ", + ind2: " ", + content: null, + subfields: [ + { + tag: "a", + content: "2005483039", + }, + ], + }, + }, + ], + }, + { + label: "ISBN", + values: [ + { + content: "2070775178", + source: { + fieldTag: "i", + marcTag: "020", + ind1: " ", + ind2: " ", + content: null, + subfields: [ + { + tag: "a", + content: "2070775178", + }, + ], + }, + }, + ], + }, + { + label: "Research Call Number", + values: [ + { + content: "JFC 06-438", + source: { + fieldTag: "q", + marcTag: "852", + ind1: "8", + ind2: " ", + content: null, + subfields: [ + { + tag: "h", + content: "JFC 06-438", + }, + ], + }, + }, + ], + }, + ], + }, +} diff --git a/__test__/pages/Home.test.tsx b/__test__/pages/Home.test.tsx index 74b6a0401..197b779b2 100644 --- a/__test__/pages/Home.test.tsx +++ b/__test__/pages/Home.test.tsx @@ -9,8 +9,8 @@ jest.mock("next/router", () => jest.requireActual("next-router-mock")) describe("Home", () => { it("should render the search form", () => { render() - const searchButton = screen.getByRole("button", { name: "Search" }) - expect(searchButton).toBeInTheDocument() + const searchForm = screen.getByLabelText("Search Bar Label") + expect(searchForm).toBeInTheDocument() }) it("should render an H2", () => { render() diff --git a/__test__/pages/bib/bibPage.test.tsx b/__test__/pages/bib/bibPage.test.tsx index c8f8b2d48..a18ae2b37 100644 --- a/__test__/pages/bib/bibPage.test.tsx +++ b/__test__/pages/bib/bibPage.test.tsx @@ -44,8 +44,9 @@ describe("Bib Page with items", () => { expect(screen.getByTestId("bib-details-item-table")).toBeInTheDocument() }) + // TODO: Determine if this should be rendering twice it("renders the bottom bib details", () => { - expect(screen.getByTestId("publication-date")).toHaveTextContent( + expect(screen.getAllByTestId("publication-date")[0]).toHaveTextContent( "Vol. 1, issue 1-" ) expect(screen.getByTestId("description")).toHaveTextContent( @@ -167,11 +168,41 @@ describe("Bib Page Item Table", () => { await userEvent.click(yearFilter.querySelector("button[type='submit']")) expect(mockRouter.asPath).toBe("/bib/pb5579193?item_date=2005") + }) + + it("clears the year filter when the year tag is clicked", async () => { + const yearTag = screen.queryByText("Year > 2005").closest("button") + await userEvent.click(yearTag) + + expect(mockRouter.asPath).toBe("/bib/pb5579193") + }) + + it("shows an error and doesn't update router when an invalid year is submitted", async () => { + const yearFilter = screen.queryByTestId("year-filter") + const yearField = screen.queryByPlaceholderText("YYYY") + + // blank year + await userEvent.click(yearFilter.querySelector("button[type='submit']")) + expect(mockRouter.asPath).toBe("/bib/pb5579193") + expect( + screen.queryByText("There was a problem. Please enter a valid year.") + ).toBeInTheDocument() + + // non-numeric + await userEvent.type(yearField, "ABCD") + await userEvent.click(yearFilter.querySelector("button[type='submit']")) + expect(mockRouter.asPath).toBe("/bib/pb5579193") + expect( + screen.queryByText("There was a problem. Please enter a valid year.") + ).toBeInTheDocument() - // Clear the year field - await userEvent.click(yearFilter.querySelector("button[type='button']")) + // not of length 4 + await userEvent.type(yearField, "1") await userEvent.click(yearFilter.querySelector("button[type='submit']")) expect(mockRouter.asPath).toBe("/bib/pb5579193") + expect( + screen.queryByText("There was a problem. Please enter a valid year.") + ).toBeInTheDocument() }) it("clears a filter group when the MultiSelect clear button is clicked", async () => { @@ -246,7 +277,7 @@ describe("Bib Page Item Table", () => { }) it("renders a view all button when there are more than 20 items and updates the url to /all when clicked", async () => { - const viewAllLink = screen.getByText("View All 26 Items").closest("a") + const viewAllLink = screen.getByText("View all 26 items").closest("a") expect(viewAllLink).toHaveAttribute( "href", "/research/research-catalog/bib/pb5579193/all" @@ -269,7 +300,7 @@ describe("Bib Page Item Table", () => { }), }) ) - await userEvent.click(screen.getByText("View All 26 Items").closest("a")) + await userEvent.click(screen.getByText("View all 26 items").closest("a")) expect(screen.getByText("View fewer items")).toBeInTheDocument() expect(screen.getByTestId("bib-details-item-table")).toBeInTheDocument() }) @@ -281,7 +312,7 @@ describe("Bib Page Item Table", () => { setTimeout(resolve, 50) }) ) - await userEvent.click(screen.getByText("View All 26 Items").closest("a")) + await userEvent.click(screen.getByText("View all 26 items").closest("a")) expect( screen.getByText("Loading all 26 items. This may take a few moments...") ).toBeInTheDocument() @@ -294,7 +325,7 @@ describe("Bib Page Item Table", () => { ok: false, }) ) - await userEvent.click(screen.getByText("View All 26 Items").closest("a")) + await userEvent.click(screen.getByText("View all 26 items").closest("a")) expect( screen.getByText( "There was an error fetching items. Please try again with a different query." diff --git a/discoveryApiResearchNowMapping.md b/discoveryApiResearchNowMapping.md index 0ba4f1cbe..6bb2b868f 100644 --- a/discoveryApiResearchNowMapping.md +++ b/discoveryApiResearchNowMapping.md @@ -131,7 +131,7 @@ e.g. `filters`) is used for the parameters the respective APIs except. |