Add hook to get the website links

This commit is contained in:
Pedro Piñera 2020-12-26 19:00:33 +01:00
parent 85ae51c974
commit 52d8e4ee7e
8 changed files with 434 additions and 30 deletions

View File

@ -9,6 +9,12 @@ module.exports = {
title: title,
siteUrl: siteUrl,
twitterHandle: twitterHandle,
links: {
slack: 'https://slack.tuist.io',
releases: 'https://github.com/tuist/tuist/releases',
githubRepository: 'https://github.com/tuist/tuist',
githubOrganization: 'https://github.com/tuist',
},
},
plugins: [
'gatsby-plugin-sharp',

View File

@ -1,4 +1,5 @@
module.exports = {
preset: 'ts-jest',
transform: {
'^.+\\.jsx?$': `<rootDir>/jest-preprocess.js`,
},

View File

@ -58,6 +58,7 @@
"eslint-plugin-react": "^7.21.5",
"identity-obj-proxy": "^3.0.0",
"jest": "^26.6.3",
"react-test-renderer": "^17.0.1"
"react-test-renderer": "^17.0.1",
"ts-jest": "^26.4.4"
}
}

View File

@ -1,7 +1,10 @@
import React from 'react'
import tw, { css, styled, theme } from 'twin.macro'
import useSiteLinks from '../hooks/useSiteLinks'
const Footer = () => {
const links = useSiteLinks()
console.log(links)
return (
<footer css={[tw`bg-pink-200`]}>
<div css={[tw`max-w-6xl mx-auto bg-green-200`]}>

View File

@ -0,0 +1,227 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`useSiteLinks returns the GitHub organization link from the site metadata 1`] = `
[MockFunction] {
"calls": Array [
Array [
Array [
"
query SiteLinks {
site {
siteMetadata {
links {
slack
}
}
}
}
",
],
],
Array [
Array [
"
query SiteLinks {
site {
siteMetadata {
links {
slack
}
}
}
}
",
],
],
Array [
Array [
"
query SiteLinks {
site {
siteMetadata {
links {
slack
}
}
}
}
",
],
],
Array [
Array [
"
query SiteLinks {
site {
siteMetadata {
links {
slack
}
}
}
}
",
],
],
],
"results": Array [
Object {
"type": "return",
"value": undefined,
},
Object {
"type": "return",
"value": undefined,
},
Object {
"type": "return",
"value": undefined,
},
Object {
"type": "return",
"value": undefined,
},
],
}
`;
exports[`useSiteLinks returns the GitHub repository link from the site metadata 1`] = `
[MockFunction] {
"calls": Array [
Array [
Array [
"
query SiteLinks {
site {
siteMetadata {
links {
slack
}
}
}
}
",
],
],
Array [
Array [
"
query SiteLinks {
site {
siteMetadata {
links {
slack
}
}
}
}
",
],
],
Array [
Array [
"
query SiteLinks {
site {
siteMetadata {
links {
slack
}
}
}
}
",
],
],
],
"results": Array [
Object {
"type": "return",
"value": undefined,
},
Object {
"type": "return",
"value": undefined,
},
Object {
"type": "return",
"value": undefined,
},
],
}
`;
exports[`useSiteLinks returns the Slack link from the site metadata 1`] = `
[MockFunction] {
"calls": Array [
Array [
Array [
"
query SiteLinks {
site {
siteMetadata {
links {
slack
}
}
}
}
",
],
],
],
"results": Array [
Object {
"type": "return",
"value": undefined,
},
],
}
`;
exports[`useSiteLinks returns the releases link from the site metadata 1`] = `
[MockFunction] {
"calls": Array [
Array [
Array [
"
query SiteLinks {
site {
siteMetadata {
links {
slack
}
}
}
}
",
],
],
Array [
Array [
"
query SiteLinks {
site {
siteMetadata {
links {
slack
}
}
}
}
",
],
],
],
"results": Array [
Object {
"type": "return",
"value": undefined,
},
Object {
"type": "return",
"value": undefined,
},
],
}
`;

View File

@ -0,0 +1,105 @@
import useSiteLinks from '../useSiteLinks'
import { useStaticQuery, graphql } from 'gatsby'
const mockUseStaticQuery = useStaticQuery as jest.Mock<any>
const mockGraphql = graphql as jest.Mock
const graphqlQuery = `
query SiteLinks {
site {
siteMetadata {
links {
slack
releases
githubRepository
githubOrganization
}
}
}
}
`
describe('useSiteLinks', () => {
it('returns the Slack link from the site metadata', () => {
// Given
const slackUrl = 'https://slack.tuist.io'
mockUseStaticQuery.mockReturnValue({
site: {
siteMetadata: {
links: {
slack: slackUrl,
},
},
},
})
// When
const got = useSiteLinks()
// Then
expect(mockGraphql).toMatchSnapshot()
expect(got.slack).toBe(slackUrl)
})
it('returns the releases link from the site metadata', () => {
// Given
const releasesUrl = 'https://github.com/tuist/tuist/releases'
mockUseStaticQuery.mockReturnValue({
site: {
siteMetadata: {
links: {
releases: releasesUrl,
},
},
},
})
// When
const got = useSiteLinks()
// Then
expect(mockGraphql).toMatchSnapshot()
expect(got.releases).toBe(releasesUrl)
})
it('returns the GitHub repository link from the site metadata', () => {
// Given
const githubUrl = 'https://github.com/tuist/tuist'
mockUseStaticQuery.mockReturnValue({
site: {
siteMetadata: {
links: {
githubRepository: githubUrl,
},
},
},
})
// When
const got = useSiteLinks()
// Then
expect(mockGraphql).toMatchSnapshot()
expect(got.githubRepository).toBe(githubUrl)
})
it('returns the GitHub organization link from the site metadata', () => {
// Given
const githubUrl = 'https://github.com/tuist'
mockUseStaticQuery.mockReturnValue({
site: {
siteMetadata: {
links: {
githubOrganization: githubUrl,
},
},
},
})
// When
const got = useSiteLinks()
// Then
expect(mockGraphql).toMatchSnapshot()
expect(got.githubOrganization).toBe(githubUrl)
})
})

View File

@ -0,0 +1,37 @@
import { useStaticQuery, graphql } from 'gatsby'
type SiteLinks = {
slack: string
releases: string
githubRepository: string
githubOrganization: string
}
const useSiteLinks = (): SiteLinks => {
const {
site: {
siteMetadata: {
links: { slack, releases, githubRepository, githubOrganization },
},
},
} = useStaticQuery(graphql`
query SiteLinks {
site {
siteMetadata {
links {
slack
}
}
}
}
`)
return {
slack,
releases,
githubRepository,
githubOrganization,
}
}
export default useSiteLinks

View File

@ -2081,7 +2081,7 @@
dependencies:
"@types/istanbul-lib-report" "*"
"@types/jest@^26.0.19":
"@types/jest@26.x", "@types/jest@^26.0.19":
version "26.0.19"
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.19.tgz#e6fa1e3def5842ec85045bd5210e9bb8289de790"
integrity sha512-jqHoirTG61fee6v6rwbnEuKhpSKih0tuhqeFbCmMmErhtu3BYlOZaXWjffgOstMM4S/3iQD31lI5bGLTrs97yQ==
@ -3650,6 +3650,13 @@ browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.12.2, browserslist@^4
escalade "^3.1.1"
node-releases "^1.1.67"
bs-logger@0.x:
version "0.2.6"
resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8"
integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==
dependencies:
fast-json-stable-stringify "2.x"
bser@2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
@ -3685,7 +3692,7 @@ buffer-fill@^1.0.0:
resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
integrity sha1-+PeLdniYiO858gXNY39o5wISKyw=
buffer-from@^1.0.0:
buffer-from@1.x, buffer-from@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
@ -6580,7 +6587,7 @@ fast-glob@^3.0.3, fast-glob@^3.1.1:
micromatch "^4.0.2"
picomatch "^2.2.1"
fast-json-stable-stringify@^2.0.0:
fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
@ -9748,7 +9755,7 @@ jest-snapshot@^26.6.2:
pretty-format "^26.6.2"
semver "^7.3.2"
jest-util@^26.6.2:
jest-util@^26.1.0, jest-util@^26.6.2:
version "26.6.2"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1"
integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==
@ -9961,6 +9968,13 @@ json3@^3.3.2:
resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81"
integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==
json5@2.x, json5@^2.1.2, json5@^2.1.3:
version "2.1.3"
resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43"
integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==
dependencies:
minimist "^1.2.5"
json5@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
@ -9968,13 +9982,6 @@ json5@^1.0.1:
dependencies:
minimist "^1.2.0"
json5@^2.1.2, json5@^2.1.3:
version "2.1.3"
resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43"
integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==
dependencies:
minimist "^1.2.5"
jsonfile@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
@ -10282,7 +10289,7 @@ lodash.maxby@^4.6.0:
resolved "https://registry.yarnpkg.com/lodash.maxby/-/lodash.maxby-4.6.0.tgz#082240068f3c7a227aa00a8380e4f38cf0786e3d"
integrity sha1-CCJABo88eiJ6oAqDgOTzjPB4bj0=
lodash.memoize@^4.1.2:
lodash.memoize@4.x, lodash.memoize@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
@ -10494,7 +10501,7 @@ make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0:
dependencies:
semver "^6.0.0"
make-error@^1, make-error@^1.1.1:
make-error@1.x, make-error@^1, make-error@^1.1.1:
version "1.3.6"
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
@ -10908,6 +10915,11 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3:
resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
mkdirp@1.x, mkdirp@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1:
version "0.5.5"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
@ -10915,11 +10927,6 @@ mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1:
dependencies:
minimist "^1.2.5"
mkdirp@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
modern-normalize@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/modern-normalize/-/modern-normalize-1.0.0.tgz#539d84a1e141338b01b346f3e27396d0ed17601e"
@ -13958,18 +13965,18 @@ semver@7.0.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
semver@^7.2.1, semver@^7.3.2:
semver@7.x, semver@^7.2.1, semver@^7.3.2:
version "7.3.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97"
integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==
dependencies:
lru-cache "^6.0.0"
semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
send@0.17.1:
version "0.17.1"
resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"
@ -15415,6 +15422,23 @@ trough@^1.0.0:
resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf"
integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==
ts-jest@^26.4.4:
version "26.4.4"
resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.4.4.tgz#61f13fb21ab400853c532270e52cc0ed7e502c49"
integrity sha512-3lFWKbLxJm34QxyVNNCgXX1u4o/RV0myvA2y2Bxm46iGIjKlaY0own9gIckbjZJPn+WaJEnfPPJ20HHGpoq4yg==
dependencies:
"@types/jest" "26.x"
bs-logger "0.x"
buffer-from "1.x"
fast-json-stable-stringify "2.x"
jest-util "^26.1.0"
json5 "2.x"
lodash.memoize "4.x"
make-error "1.x"
mkdirp "1.x"
semver "7.x"
yargs-parser "20.x"
ts-node@^9:
version "9.1.1"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d"
@ -16722,6 +16746,11 @@ yaml@^1.7.2, yaml@^1.8.3:
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e"
integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==
yargs-parser@20.x, yargs-parser@^20.2.2:
version "20.2.4"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54"
integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==
yargs-parser@^13.1.2:
version "13.1.2"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
@ -16738,11 +16767,6 @@ yargs-parser@^18.1.2:
camelcase "^5.0.0"
decamelize "^1.2.0"
yargs-parser@^20.2.2:
version "20.2.4"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54"
integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==
yargs@^13.3.2:
version "13.3.2"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"