From f795e4b14fb56fb3d12b26a2bae729bed90bc868 Mon Sep 17 00:00:00 2001 From: Mohan29997 Date: Wed, 19 Apr 2023 14:07:50 +0530 Subject: [PATCH 1/5] ui test case format --- package.json | 3 +- packages/mobile/__tests__/App-test.tsx | 14 -- .../__snapshots__/first-screen-test.tsx.snap | 143 ++++++++++++++++++ .../mobile/__tests__/first-screen-test.tsx | 29 ++++ packages/mobile/jestSetup.ts | 6 + packages/mobile/package.json | 4 +- .../src/feature/firstscreen/first_screen.tsx | 8 +- .../src/widgets/app_button/app_button.tsx | 6 +- .../src/widgets/app_input/app_input.tsx | 4 +- packages/shared/__tests__/shared.test.ts | 12 +- 10 files changed, 197 insertions(+), 32 deletions(-) delete mode 100644 packages/mobile/__tests__/App-test.tsx create mode 100644 packages/mobile/__tests__/__snapshots__/first-screen-test.tsx.snap create mode 100644 packages/mobile/__tests__/first-screen-test.tsx create mode 100644 packages/mobile/jestSetup.ts diff --git a/package.json b/package.json index 984151e..47b7f14 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,8 @@ "lint:quiet": "eslint . --ext js,jsx,mjs,ts,tsx --quiet", "prepare": "husky install", "precommit": "npm run lint:fix && npm run format", - "prepush": "npm run lint" + "prepush": "npm run lint", + "test": "yarn workspace mobile test" }, "workspaces": { "packages": [ diff --git a/packages/mobile/__tests__/App-test.tsx b/packages/mobile/__tests__/App-test.tsx deleted file mode 100644 index 351e770..0000000 --- a/packages/mobile/__tests__/App-test.tsx +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @format - */ - -import 'react-native' -import React from 'react' -import App from '../App' - -// Note: test renderer must be required after react-native. -import renderer from 'react-test-renderer' - -it('renders correctly', () => { - renderer.create() -}) diff --git a/packages/mobile/__tests__/__snapshots__/first-screen-test.tsx.snap b/packages/mobile/__tests__/__snapshots__/first-screen-test.tsx.snap new file mode 100644 index 0000000..59881ac --- /dev/null +++ b/packages/mobile/__tests__/__snapshots__/first-screen-test.tsx.snap @@ -0,0 +1,143 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`renders correctly 1`] = ` + + + + Hello + + + MY APP + + + + + + + + getStarted + + + + + +`; diff --git a/packages/mobile/__tests__/first-screen-test.tsx b/packages/mobile/__tests__/first-screen-test.tsx new file mode 100644 index 0000000..201626f --- /dev/null +++ b/packages/mobile/__tests__/first-screen-test.tsx @@ -0,0 +1,29 @@ +import renderer, { act, create } from 'react-test-renderer' +import FirstScreen from '../src/feature/firstscreen/first_screen' + +// for rendering of screen + +// creating tree for test case of that file + +let tree: any +act(() => { + tree = create() +}) + +// test case to see that app is render correctly +test('renders correctly', () => { + const tree = renderer.create().toJSON() + expect(tree).toMatchSnapshot() +}) +// test case for render without crashing +test('render without crashing', () => { + const res = tree.root.children + expect(res).toBeTruthy() +}) + +// test case to see if text is present there +test('on render of the app there should be a text hello on top', () => { + const res = tree.root.children + expect(res).toBeTruthy() +}) + diff --git a/packages/mobile/jestSetup.ts b/packages/mobile/jestSetup.ts new file mode 100644 index 0000000..ea13251 --- /dev/null +++ b/packages/mobile/jestSetup.ts @@ -0,0 +1,6 @@ +import React from "react"; +import { useTheme } from "./src/theme/themeprovider"; +jest.mock('react-native-linear-gradient', () => 'LinearGradient'); +jest.mock('./src/theme/themeprovider',()=>({ + useTheme:()=>({state:'mocked_value'}) +})) \ No newline at end of file diff --git a/packages/mobile/package.json b/packages/mobile/package.json index d345048..0c90871 100644 --- a/packages/mobile/package.json +++ b/packages/mobile/package.json @@ -26,7 +26,6 @@ "@react-navigation/native-stack": "^6.9.7", "babel-plugin-parameter-decorator": "^1.0.16", "foundation": "^0.0.1", - "jest": "^29.4.2", "localisation": "^0.0.1", "lodash": "^4.17.21", "presentation": "^0.0.1", @@ -53,7 +52,7 @@ "@typescript-eslint/parser": "^5.51.0", "babel-jest": "^29.4.2", "eslint": "^8.31.0", - "jest": "^29.4.2", + "jest": "^29.5.0", "metro-react-native-babel-preset": "0.75.0", "react-test-renderer": "18.2.0", "typescript": "^4.8.3" @@ -73,6 +72,7 @@ }, "jest": { "preset": "react-native", + "setupFiles": ["./jestSetup.ts"], "moduleFileExtensions": [ "ts", "tsx", diff --git a/packages/mobile/src/feature/firstscreen/first_screen.tsx b/packages/mobile/src/feature/firstscreen/first_screen.tsx index b37fc1d..146f6ca 100644 --- a/packages/mobile/src/feature/firstscreen/first_screen.tsx +++ b/packages/mobile/src/feature/firstscreen/first_screen.tsx @@ -9,13 +9,13 @@ const FirstScreen = () => { const { theme, isDark } = useTheme() return ( - - {`${i18n.t('anotherString')}`} - {i18n.t('appName')} + + {`${i18n.t('anotherString')}`} + {i18n.t('appName')} - + ) diff --git a/packages/mobile/src/widgets/app_button/app_button.tsx b/packages/mobile/src/widgets/app_button/app_button.tsx index a0dabb8..7d4f26e 100644 --- a/packages/mobile/src/widgets/app_button/app_button.tsx +++ b/packages/mobile/src/widgets/app_button/app_button.tsx @@ -16,12 +16,12 @@ export type AppButtonProps = { const AppButton = ({ loadingState, value, saveData }: AppButtonProps) => { const { theme } = useTheme() return ( - + {loadingState ? ( - + ) : ( - {i18n.t(value)} + {i18n.t(value)} )} diff --git a/packages/mobile/src/widgets/app_input/app_input.tsx b/packages/mobile/src/widgets/app_input/app_input.tsx index dde51be..34315a0 100644 --- a/packages/mobile/src/widgets/app_input/app_input.tsx +++ b/packages/mobile/src/widgets/app_input/app_input.tsx @@ -15,9 +15,9 @@ const AppInput = ({ placeholderText, value, setData, secure }: AppInputProps) => const { theme } = useTheme() return ( setData(e)} secureTextEntry={secure} diff --git a/packages/shared/__tests__/shared.test.ts b/packages/shared/__tests__/shared.test.ts index eff8885..d0ae325 100644 --- a/packages/shared/__tests__/shared.test.ts +++ b/packages/shared/__tests__/shared.test.ts @@ -1,8 +1,8 @@ -'use strict' +// 'use strict' -import shared from '../lib/shared' -import { expect, test } from '@jest/globals' +// import shared from '../lib/shared' +// import { expect, test } from '@jest/globals' -test('Hello from shared', () => { - expect(shared()).toBe('Hello from shared') -}) +// test('Hello from shared', () => { +// expect(shared()).toBe('Hello from shared') +// }) From 957e84686088fbc46c467d595dda6767f46fadfe Mon Sep 17 00:00:00 2001 From: Mohan29997 Date: Wed, 19 Apr 2023 14:08:34 +0530 Subject: [PATCH 2/5] ui test case format eslint --- packages/mobile/__tests__/first-screen-test.tsx | 1 - packages/mobile/jestSetup.ts | 12 ++++++------ packages/mobile/package.json | 4 +++- .../mobile/src/feature/firstscreen/first_screen.tsx | 6 ++++-- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/packages/mobile/__tests__/first-screen-test.tsx b/packages/mobile/__tests__/first-screen-test.tsx index 201626f..95ad899 100644 --- a/packages/mobile/__tests__/first-screen-test.tsx +++ b/packages/mobile/__tests__/first-screen-test.tsx @@ -26,4 +26,3 @@ test('on render of the app there should be a text hello on top', () => { const res = tree.root.children expect(res).toBeTruthy() }) - diff --git a/packages/mobile/jestSetup.ts b/packages/mobile/jestSetup.ts index ea13251..8927c75 100644 --- a/packages/mobile/jestSetup.ts +++ b/packages/mobile/jestSetup.ts @@ -1,6 +1,6 @@ -import React from "react"; -import { useTheme } from "./src/theme/themeprovider"; -jest.mock('react-native-linear-gradient', () => 'LinearGradient'); -jest.mock('./src/theme/themeprovider',()=>({ - useTheme:()=>({state:'mocked_value'}) -})) \ No newline at end of file +import React from 'react' +import { useTheme } from './src/theme/themeprovider' +jest.mock('react-native-linear-gradient', () => 'LinearGradient') +jest.mock('./src/theme/themeprovider', () => ({ + useTheme: () => ({ state: 'mocked_value' }) +})) diff --git a/packages/mobile/package.json b/packages/mobile/package.json index 0c90871..5f02815 100644 --- a/packages/mobile/package.json +++ b/packages/mobile/package.json @@ -72,7 +72,9 @@ }, "jest": { "preset": "react-native", - "setupFiles": ["./jestSetup.ts"], + "setupFiles": [ + "./jestSetup.ts" + ], "moduleFileExtensions": [ "ts", "tsx", diff --git a/packages/mobile/src/feature/firstscreen/first_screen.tsx b/packages/mobile/src/feature/firstscreen/first_screen.tsx index 146f6ca..cb0bd4b 100644 --- a/packages/mobile/src/feature/firstscreen/first_screen.tsx +++ b/packages/mobile/src/feature/firstscreen/first_screen.tsx @@ -10,12 +10,14 @@ const FirstScreen = () => { return ( - {`${i18n.t('anotherString')}`} + {`${i18n.t( + 'anotherString' + )}`} {i18n.t('appName')} - + ) From a09398cbee7cd7f10dc99b5fbc1eda5651b3c881 Mon Sep 17 00:00:00 2001 From: Mohan29997 Date: Thu, 20 Apr 2023 13:46:42 +0530 Subject: [PATCH 3/5] verify method use case --- packages/domain/__tests__/domain.test.ts | 31 ++++++++++++++++--- packages/domain/jest.config.js | 11 +++++++ packages/domain/package.json | 12 +++++-- .../domain/src/usecases/your_first_usecase.ts | 11 ++++--- 4 files changed, 52 insertions(+), 13 deletions(-) create mode 100644 packages/domain/jest.config.js diff --git a/packages/domain/__tests__/domain.test.ts b/packages/domain/__tests__/domain.test.ts index b355ded..c839082 100644 --- a/packages/domain/__tests__/domain.test.ts +++ b/packages/domain/__tests__/domain.test.ts @@ -1,8 +1,29 @@ -'use strict' +import { act, create } from 'react-test-renderer' +import { DomainModule, YourFirstUseCase, YourFirstUseCaseParams } from 'domain-layer' +import { Obsidian } from 'di' +import { FirstModel } from 'shared' -import data from '../lib/domain' -import { expect, test } from '@jest/globals' +describe('YourFirstUseCase', () => { + + describe('Testing verify method', () => { + it('should return true if emailOrPhone and password are provided', () => { + const params = new YourFirstUseCaseParams({ emailOrPhone: 'mailto:test@example.com', password: 'password' }) + expect(params.verify()).toBe(true) + }) -test('Hello from domain', () => { - expect(data()).toBe('Hello from domain') + it('should return false if emailOrPhone is not provided', () => { + const params = new YourFirstUseCaseParams({ emailOrPhone: '', password: 'password' }) + expect(params.verify()).toBe(false) + }) + + it('should return false if password is not provided', () => { + const params = new YourFirstUseCaseParams({ emailOrPhone: 'mailto:test@example.com', password: '' }) + expect(params.verify()).toBe(false) + }) + + it('should return false if both emailOrPhone and password are not provided', () => { + const params = new YourFirstUseCaseParams({ emailOrPhone: '', password: '' }) + expect(params.verify()).toBe(false) + }) + }) }) diff --git a/packages/domain/jest.config.js b/packages/domain/jest.config.js new file mode 100644 index 0000000..f58aa80 --- /dev/null +++ b/packages/domain/jest.config.js @@ -0,0 +1,11 @@ +/** @type {import('ts-jest').JestConfigWithTsJest} */ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node', + setupFiles: [ + "../database-watermelon/jest_setup.ts" + ], + "transformIgnorePatterns": [ + "../../node_modules/@nozbe" + ] +}; \ No newline at end of file diff --git a/packages/domain/package.json b/packages/domain/package.json index 0627048..beb9d7c 100644 --- a/packages/domain/package.json +++ b/packages/domain/package.json @@ -19,7 +19,7 @@ }, "scripts": { "tsc": "tsc", - "test": "jest --verbose ./__tests__/domain.test.ts" + "test": "jest" }, "bugs": { "url": "https://github.com/NeoSOFT-Technologies/mobile-react-native/issues" @@ -27,7 +27,13 @@ "dependencies": { "@jest/globals": "^29.4.2", "di": "^0.0.1", - "jest": "^29.4.2", - "shared": "^0.0.1" + "react-test-renderer": "^18.2.0", + "shared": "^0.0.1", + "typescript": "^5.0.4" + }, + "devDependencies": { + "@types/jest": "^29.5.1", + "jest": "^29.5.0", + "ts-jest": "^29.1.0" } } diff --git a/packages/domain/src/usecases/your_first_usecase.ts b/packages/domain/src/usecases/your_first_usecase.ts index 08aac04..fa2f610 100644 --- a/packages/domain/src/usecases/your_first_usecase.ts +++ b/packages/domain/src/usecases/your_first_usecase.ts @@ -12,7 +12,7 @@ export class YourFirstUseCase extends FutureUseCase { - if (params.verify) { + if (params.verify()) { return await this.yourFirstRepository.yourFirstFunction({ userName: params.emailOrPhone, password: params.password @@ -25,18 +25,19 @@ export class YourFirstUseCaseParams extends Params { readonly emailOrPhone: string readonly password: string - constructor(params: IYourFirstParams) { + constructor(params?: IYourFirstParams) { super({}) this.emailOrPhone = params.emailOrPhone this.password = params.password } verify(): boolean { - return true + if (this.emailOrPhone == '' || this.password == '') return false + else return true } } export interface IYourFirstParams { - emailOrPhone: string - password: string + emailOrPhone?: string + password?: string } From 146fbb83bac07bcc49df8094f117ccc790afde60 Mon Sep 17 00:00:00 2001 From: Mohan29997 Date: Thu, 20 Apr 2023 13:47:08 +0530 Subject: [PATCH 4/5] verify method use case format --- packages/domain/__tests__/domain.test.ts | 1 - packages/domain/jest.config.js | 11 ++++------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/packages/domain/__tests__/domain.test.ts b/packages/domain/__tests__/domain.test.ts index c839082..a2efe8c 100644 --- a/packages/domain/__tests__/domain.test.ts +++ b/packages/domain/__tests__/domain.test.ts @@ -4,7 +4,6 @@ import { Obsidian } from 'di' import { FirstModel } from 'shared' describe('YourFirstUseCase', () => { - describe('Testing verify method', () => { it('should return true if emailOrPhone and password are provided', () => { const params = new YourFirstUseCaseParams({ emailOrPhone: 'mailto:test@example.com', password: 'password' }) diff --git a/packages/domain/jest.config.js b/packages/domain/jest.config.js index f58aa80..cc3c051 100644 --- a/packages/domain/jest.config.js +++ b/packages/domain/jest.config.js @@ -1,11 +1,8 @@ /** @type {import('ts-jest').JestConfigWithTsJest} */ +// eslint-disable-next-line no-undef module.exports = { preset: 'ts-jest', testEnvironment: 'node', - setupFiles: [ - "../database-watermelon/jest_setup.ts" - ], - "transformIgnorePatterns": [ - "../../node_modules/@nozbe" - ] -}; \ No newline at end of file + setupFiles: ['../database-watermelon/jest_setup.ts'], + transformIgnorePatterns: ['../../node_modules/@nozbe'] +} From 80201c9cc5419605c6ce43b2f3efbfabe9925c3a Mon Sep 17 00:00:00 2001 From: Mohan29997 Date: Thu, 20 Apr 2023 13:47:46 +0530 Subject: [PATCH 5/5] verify method use case format eslint --- package.json | 2 +- packages/database-watermelon/jest_setup.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 packages/database-watermelon/jest_setup.ts diff --git a/package.json b/package.json index 47b7f14..5be5861 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,6 @@ "@types/react": "^18.0.27", "eslint-plugin-prettier": "^4.2.1", "husky": "^8.0.3", - "lerna": "^6.5.1" + "lerna": "^6.6.1" } } diff --git a/packages/database-watermelon/jest_setup.ts b/packages/database-watermelon/jest_setup.ts new file mode 100644 index 0000000..4fba9c4 --- /dev/null +++ b/packages/database-watermelon/jest_setup.ts @@ -0,0 +1 @@ +jest.mock('@nozbe/watermelondb/adapters/sqlite', () => '@nozbe/watermelondb/adapters/sqlite')