From 0f651671fadb2680c25cff0c59ddc5fae6ba1442 Mon Sep 17 00:00:00 2001 From: Ivan Stasiuk Date: Fri, 20 Sep 2024 11:48:38 +0100 Subject: [PATCH] ci: tests --- .github/workflows/ci.yml | 13 +++++++ .github/workflows/coverage.yml | 1 - packages/time/src/__tests__/index.test.ts | 27 +++++++++++++ packages/use-form/package.json | 11 +++--- packages/use-form/src/__tests__/index.test.ts | 12 ++++++ packages/use-get/src/__tests__/index.test.ts | 10 +++++ packages/uuid/.eslintignore | 4 ++ packages/uuid/.npmignore | 3 ++ packages/uuid/README.md | 23 +++++++++++ packages/uuid/package.json | 38 +++++++++++++++++++ packages/uuid/src/__tests__/index.test.ts | 17 +++++++++ packages/uuid/src/index.ts | 7 ++++ packages/uuid/tsconfig.build.json | 16 ++++++++ packages/uuid/tsconfig.json | 4 ++ packages/uuid/vite.config.ts | 8 ++++ pnpm-lock.yaml | 16 ++++++++ 16 files changed, 204 insertions(+), 6 deletions(-) create mode 100644 packages/time/src/__tests__/index.test.ts create mode 100644 packages/use-form/src/__tests__/index.test.ts create mode 100644 packages/use-get/src/__tests__/index.test.ts create mode 100644 packages/uuid/.eslintignore create mode 100644 packages/uuid/.npmignore create mode 100644 packages/uuid/README.md create mode 100644 packages/uuid/package.json create mode 100644 packages/uuid/src/__tests__/index.test.ts create mode 100644 packages/uuid/src/index.ts create mode 100644 packages/uuid/tsconfig.build.json create mode 100644 packages/uuid/tsconfig.json create mode 100644 packages/uuid/vite.config.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 687fe97..097192d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,3 +17,16 @@ jobs: - run: pnpm install - run: pnpm run build - run: pnpm run typecheck + + unit-tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + - uses: actions/setup-node@v4 + with: + node-version: 20 + check-latest: true + cache: 'pnpm' + - run: pnpm install + - run: pnpm run test:unit diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index be8cbeb..598ad55 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -17,7 +17,6 @@ jobs: check-latest: true cache: 'pnpm' - run: pnpm install - - run: pnpm run build - uses: paambaati/codeclimate-action@v5 continue-on-error: true diff --git a/packages/time/src/__tests__/index.test.ts b/packages/time/src/__tests__/index.test.ts new file mode 100644 index 0000000..5f5e75c --- /dev/null +++ b/packages/time/src/__tests__/index.test.ts @@ -0,0 +1,27 @@ +import { describe, expect, it } from 'vitest' +import { + getMonthOptions, + getYearOptions, + parseAndFormatDate, + parseAndFormatTime, + formatDateOnly, +} from '../index' + +describe('time', () => { + it('can generate month options', () => { + expect(getMonthOptions()).toHaveLength(12) + }) + it('can generate year options', () => { + const currentYear = new Date().getFullYear() + expect(getYearOptions(currentYear)).toHaveLength(1) + }) + it('can parse date', () => { + expect(parseAndFormatDate('2024-09-20T11:16:49.96+01:00')).toEqual('20/09/2024 11:16:49') + }) + it('can parse time', () => { + expect(parseAndFormatTime('2024-09-20T11:16:49.96+01:00')).toEqual('11:16') + }) + it('can format date only', () => { + expect(formatDateOnly(new Date('2024-09-20T11:16:49.96+01:00'))).toEqual('2024-09-20') + }) +}) diff --git a/packages/use-form/package.json b/packages/use-form/package.json index bb1dd3c..092d4f3 100644 --- a/packages/use-form/package.json +++ b/packages/use-form/package.json @@ -37,18 +37,19 @@ }, "license": "MIT", "peerDependencies": { - "next": ">=14.0", - "react": ">=18.0", "axios": ">=1.7", "js-cookie": ">=3.0", - "swr": ">=2.0", "lodash.isequal": ">=4.0", - "react-hot-toast": ">=2.0" + "next": ">=14.0", + "react": ">=18.0", + "react-hot-toast": ">=2.0", + "swr": ">=2.0" }, "devDependencies": { "@testing-library/jest-dom": "^6.5.0", "@testing-library/react": "^16.0.1", "@types/js-cookie": "^3.0.6", - "@types/lodash.isequal": "^4.5.8" + "@types/lodash.isequal": "^4.5.8", + "next-router-mock": "^0.9.13" } } diff --git a/packages/use-form/src/__tests__/index.test.ts b/packages/use-form/src/__tests__/index.test.ts new file mode 100644 index 0000000..4ae49ea --- /dev/null +++ b/packages/use-form/src/__tests__/index.test.ts @@ -0,0 +1,12 @@ +import { renderHook } from '@testing-library/react' +import { describe, expect, it, vi } from 'vitest' +import {useForm} from '..' + +vi.mock('next/router', () => require('next-router-mock')); + +describe('useForm', () => { + it('useForm should not be undefined', () => { + const { result } = renderHook(() => useForm()) + expect(result.current).not.toBeUndefined() + }) +}) diff --git a/packages/use-get/src/__tests__/index.test.ts b/packages/use-get/src/__tests__/index.test.ts new file mode 100644 index 0000000..6a640c4 --- /dev/null +++ b/packages/use-get/src/__tests__/index.test.ts @@ -0,0 +1,10 @@ +import { renderHook } from '@testing-library/react' +import { describe, expect, it } from 'vitest' +import {useGet} from '..' + +describe('useGet', () => { + it('useGet isLoading should be true', () => { + const { result } = renderHook(() => useGet('https://jsonplaceholder.typicode.com/todos/1')) + expect(result.current.isLoading).toBeTruthy() + }) +}) diff --git a/packages/uuid/.eslintignore b/packages/uuid/.eslintignore new file mode 100644 index 0000000..3a0b347 --- /dev/null +++ b/packages/uuid/.eslintignore @@ -0,0 +1,4 @@ +dist/ +coverage/ +node_modules +.reports/ diff --git a/packages/uuid/.npmignore b/packages/uuid/.npmignore new file mode 100644 index 0000000..d1811b8 --- /dev/null +++ b/packages/uuid/.npmignore @@ -0,0 +1,3 @@ +**/__tests__/** +src +!.npmignore diff --git a/packages/uuid/README.md b/packages/uuid/README.md new file mode 100644 index 0000000..59e79eb --- /dev/null +++ b/packages/uuid/README.md @@ -0,0 +1,23 @@ +# `@glocurrency/uuid` + +UUID Helpers + +--- + +## Install + +```bash +$ pnpm add @glocurrency/uuid +``` + +## Usage + +```js +import { first8 } from '@glocurrency/uuid' + +first8('c4e4b3e4-4b3e-4c4e-b3e4-c4e4b3e4b3e4') // c4e4b3e4 +``` + +## Authors + +- [Ivan Stasiuk](https://github.com/brokeyourbike) | [Twitter](https://twitter.com/brokeyourbike) | [LinkedIn](https://www.linkedin.com/in/brokeyourbike) | [stasi.uk](https://stasi.uk) diff --git a/packages/uuid/package.json b/packages/uuid/package.json new file mode 100644 index 0000000..5e55173 --- /dev/null +++ b/packages/uuid/package.json @@ -0,0 +1,38 @@ +{ + "name": "@glocurrency/uuid", + "description": "UUID Helpers", + "version": "0.0.3", + "type": "module", + "engines": { + "node": ">=20.x" + }, + "main": "./dist/index.cjs", + "sideEffects": false, + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "require": "./dist/index.cjs", + "default": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "scripts": { + "prebuild": "shx rm -rf dist", + "typecheck": "tsc --noEmit", + "type:generate": "tsc --declaration -p tsconfig.build.json", + "build": "vite build --config vite.config.ts && pnpm run type:generate", + "build:profile": "npx vite-bundle-visualizer -c vite.config.ts", + "test:unit": "vitest --run --config vite.config.ts", + "test:unit:coverage": "pnpm test:unit --coverage" + }, + "repository": { + "type": "git", + "url": "https://github.com/glocurrency/commons.ts", + "directory": "packages/uuid" + }, + "license": "MIT" +} diff --git a/packages/uuid/src/__tests__/index.test.ts b/packages/uuid/src/__tests__/index.test.ts new file mode 100644 index 0000000..a3d76a8 --- /dev/null +++ b/packages/uuid/src/__tests__/index.test.ts @@ -0,0 +1,17 @@ +import { describe, expect, it } from 'vitest' +import { + first8, + slim, +} from '../index' + +describe('uuid', () => { + it('can get first 8 chars', () => { + expect(first8('a322523d-2a01-407f-8d28-4fbcbc011370')).toBe('a322523d') + }) + it('can work with empty string', () => { + expect(first8('')).toBe('') + }) + it('can slim uuid', () => { + expect(slim('a322523d-2a01-407f-8d28-4fbcbc011370')).toBe('a322523d2a01407f8d284fbcbc011370') + }) +}) diff --git a/packages/uuid/src/index.ts b/packages/uuid/src/index.ts new file mode 100644 index 0000000..74de0cf --- /dev/null +++ b/packages/uuid/src/index.ts @@ -0,0 +1,7 @@ +export const first8 = (value: string): string => { + return value.slice(0, 8) +} + +export const slim = (value: string): string => { + return value.replace(/-/g, ''); +} diff --git a/packages/uuid/tsconfig.build.json b/packages/uuid/tsconfig.build.json new file mode 100644 index 0000000..744c167 --- /dev/null +++ b/packages/uuid/tsconfig.build.json @@ -0,0 +1,16 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "noEmit": false, + "emitDeclarationOnly": true, + "rootDir": "src", + "outDir": "dist" + }, + "exclude": [ + "*.config.ts", + "*.setup.ts", + "**/__tests__", + "**/__mocks__", + "src/**/*.test.tsx" + ] +} diff --git a/packages/uuid/tsconfig.json b/packages/uuid/tsconfig.json new file mode 100644 index 0000000..7c2b075 --- /dev/null +++ b/packages/uuid/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.json", + "include": ["src/**/*.ts", "src/**/*.tsx", "*.config.ts"] +} diff --git a/packages/uuid/vite.config.ts b/packages/uuid/vite.config.ts new file mode 100644 index 0000000..432a4e7 --- /dev/null +++ b/packages/uuid/vite.config.ts @@ -0,0 +1,8 @@ +import { defineConfig, mergeConfig } from 'vite' +import { defaultConfig } from '../../vite.config' + +export default mergeConfig(defineConfig(defaultConfig), { + build: { + target: ['node20'], + }, +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fbc650a..3438892 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -205,6 +205,9 @@ importers: '@types/lodash.isequal': specifier: ^4.5.8 version: 4.5.8 + next-router-mock: + specifier: ^0.9.13 + version: 0.9.13(next@14.2.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) packages/use-get: dependencies: @@ -231,6 +234,8 @@ importers: specifier: ^3.0.6 version: 3.0.6 + packages/uuid: {} + packages: '@adobe/css-tools@4.4.0': @@ -3047,6 +3052,12 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + next-router-mock@0.9.13: + resolution: {integrity: sha512-906n2RRaE6Y28PfYJbaz5XZeJ6Tw8Xz1S6E31GGwZ0sXB6/XjldD1/2azn1ZmBmRk5PQRkzjg+n+RHZe5xQzWA==} + peerDependencies: + next: '>=10.0.0' + react: '>=17.0.0' + next@14.2.11: resolution: {integrity: sha512-8MDFqHBhdmR2wdfaWc8+lW3A/hppFe1ggQ9vgIu/g2/2QEMYJrPoQP6b+VNk56gIug/bStysAmrpUKtj3XN8Bw==} engines: {node: '>=18.17.0'} @@ -7318,6 +7329,11 @@ snapshots: natural-compare@1.4.0: {} + next-router-mock@0.9.13(next@14.2.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1): + dependencies: + next: 14.2.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + next@14.2.11(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 14.2.11