diff --git a/__tests__/pages/provinces/[provinceSlug]/index.test.tsx b/__tests__/pages/provinces/[provinceSlug]/index.test.tsx index a6d724c5a..c8d21c771 100644 --- a/__tests__/pages/provinces/[provinceSlug]/index.test.tsx +++ b/__tests__/pages/provinces/[provinceSlug]/index.test.tsx @@ -3,12 +3,14 @@ import React from "react"; import { render, screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import provinces from "~/lib/data/provinces"; +import vaccination from "~/lib/data/vaccination"; import ProvincePage, { getStaticPaths, getStaticProps, } from "~/pages/provinces/[provinceSlug]"; jest.mock("~/lib/data/provinces"); +jest.mock("~/lib/data/vaccination"); jest.mock("next/router", () => require("next-router-mock")); describe("ProvincePage", () => { @@ -104,6 +106,7 @@ describe("getStaticProps", () => { const [province] = provinces; const [unverifiedContact, verifiedContactBravo, verifiedContactAlpha] = province.data; + const [vaccinationContact] = vaccination["Province A"]; it("gets the provinceName and sorted contactList from the provinceSlug params", () => { expect( @@ -117,6 +120,7 @@ describe("getStaticProps", () => { contactList: [ verifiedContactAlpha, verifiedContactBravo, + vaccinationContact, unverifiedContact, ], }, diff --git a/etc/fetchers/fetch-vaccination-database.ts b/etc/fetchers/fetch-vaccination-database.ts index c9590b31e..2dee6b8a5 100644 --- a/etc/fetchers/fetch-vaccination-database.ts +++ b/etc/fetchers/fetch-vaccination-database.ts @@ -23,11 +23,12 @@ export async function fetchVaccinationDatabase() { fetch(`${vaksinId}/locations/${province}`) .then((res) => res.json() as unknown as VaccinationRegion) .then((region) => { - locations[region.data[0].province] = region.data.map((location) => ({ + locations[province] = region.data.map((location) => ({ id: `${region.data.findIndex( (index) => location.title === index.title, )}`, keterangan: "Lokasi Vaksinasi COVID-19", + kebutuhan: "Tempat vaksin", lokasi: location.city, verifikasi: location.isvalid ? 1 : 0, penyedia: location.title, diff --git a/lib/data/__mocks__/builders/provinces.ts b/lib/data/__mocks__/builders/provinces.ts index 5749bac84..bd53b225e 100644 --- a/lib/data/__mocks__/builders/provinces.ts +++ b/lib/data/__mocks__/builders/provinces.ts @@ -20,7 +20,6 @@ export const contactBuilder = build({ "Pemakaman", "Puskesmas", "Rumah sakit", - "Tempat vaksin", "Tes swab", ), penyedia: fake((f) => f.company.companyName()), @@ -53,6 +52,11 @@ export const provinceBuilder = build({ penyedia: perBuild(() => "Alpha"), }, }), + contactBuilder({ + overrides: { + kebutuhan: perBuild(() => "Tempat vaksin"), + }, + }), ], }, }); diff --git a/lib/data/__mocks__/builders/vaccination.ts b/lib/data/__mocks__/builders/vaccination.ts new file mode 100644 index 000000000..e81dae50c --- /dev/null +++ b/lib/data/__mocks__/builders/vaccination.ts @@ -0,0 +1,24 @@ +import { build, fake } from "@jackfranklin/test-data-bot"; +import { sequence } from "@jackfranklin/test-data-bot/build"; +import { VaccinationContact } from "../../vaccination"; + +export const vaccinationContactBuilder = build({ + fields: { + id: sequence(), + slug: fake((f) => f.lorem.slug()), + kebutuhan: "Tempat vaksin", + penyedia: fake((f) => f.company.companyName()), + keterangan: fake((f) => f.commerce.productName()), + kontak: fake((f) => f.phone.phoneNumber()), + alamat: fake((f) => f.address.streetAddress()), + verifikasi: 1, + catatan_ketersediaan: fake((f) => f.lorem.sentence()), + rentang_umur: ["Dewasa (18-59 Tahun)", "Lansia (60-)"], + buka_waktu: "09:00:00", + tutup_waktu: "12:00:00", + mulai_tanggal: "2021-07-26", + selesai_tanggal: "2021-07-30", + map: "https://goo.gl/maps/L7BUJexFx3Fiy36bA", + link: fake((f) => f.internet.domainName()), + }, +}); diff --git a/lib/data/__mocks__/provinces.ts b/lib/data/__mocks__/provinces.ts index ddd27b34f..5d0b6b650 100644 --- a/lib/data/__mocks__/provinces.ts +++ b/lib/data/__mocks__/provinces.ts @@ -1,5 +1,16 @@ import { provinceBuilder } from "./builders/provinces"; -const provinces = [provinceBuilder(), provinceBuilder()]; +const provinces = [ + provinceBuilder({ + overrides: { + name: "Province A", + }, + }), + provinceBuilder({ + overrides: { + name: "Province B", + }, + }), +]; export default provinces; diff --git a/lib/data/__mocks__/vaccination.ts b/lib/data/__mocks__/vaccination.ts new file mode 100644 index 000000000..15e3cd7f4 --- /dev/null +++ b/lib/data/__mocks__/vaccination.ts @@ -0,0 +1,7 @@ +import { vaccinationContactBuilder } from "./builders/vaccination"; + +const vaccination = Object.create({ + "Province A": [vaccinationContactBuilder()], + "Province B": [vaccinationContactBuilder()], +}); +export default vaccination; diff --git a/lib/data/vaccination.ts b/lib/data/vaccination.ts index d7b5e548a..2f1b66b61 100644 --- a/lib/data/vaccination.ts +++ b/lib/data/vaccination.ts @@ -1,4 +1,5 @@ import { Contact } from "./provinces"; +import vaccination from "~/data/wbw-vaccination-database.json"; type City = `${"Kab." | "Kota"} ${string}`; type DateString = `${number}-${number}-${number}`; @@ -51,3 +52,7 @@ export interface VaccinationContact extends Contact { map: _location["map"]; link: _location["link"]; } + +export type Vaccination = { [province: string]: VaccinationContact[] }; + +export default vaccination as unknown as Vaccination; diff --git a/pages/provinces/[provinceSlug]/index.tsx b/pages/provinces/[provinceSlug]/index.tsx index f14462581..a15c98c64 100644 --- a/pages/provinces/[provinceSlug]/index.tsx +++ b/pages/provinces/[provinceSlug]/index.tsx @@ -8,6 +8,7 @@ import { SearchForm } from "~/components/search-form"; import { SeoText } from "~/components/seo-text"; import { getProvincesPaths } from "~/lib/data/helpers/provinces"; import provinces, { Contact } from "~/lib/data/provinces"; +import vaccination from "~/lib/data/vaccination"; import { getCurrentLongDate } from "~/lib/date-utils"; import { useSearch } from "~/lib/hooks/use-search"; import { getProvinceMeta } from "~/lib/meta"; @@ -124,8 +125,11 @@ export const getStaticProps: GetStaticProps = ({ params = {} }) => { const { provinceSlug } = params; const province = provinces.find((prov) => prov.slug === provinceSlug); const provinceName = province ? province.name : ""; - const contactList = province - ? [...province.data].sort((a, b) => { + const contacts = province?.data.filter( + (contact) => contact.kebutuhan !== "Tempat vaksin", + ); + const contactList = contacts + ? [...contacts, ...vaccination[provinceName]].sort((a, b) => { return ( b.verifikasi - a.verifikasi || (a.penyedia ?? "").localeCompare(b.penyedia ?? "")