diff --git a/package.json b/package.json index 984151e..5be5861 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": [ @@ -44,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') diff --git a/packages/domain/__tests__/domain.test.ts b/packages/domain/__tests__/domain.test.ts index b355ded..a2efe8c 100644 --- a/packages/domain/__tests__/domain.test.ts +++ b/packages/domain/__tests__/domain.test.ts @@ -1,8 +1,28 @@ -'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..cc3c051 --- /dev/null +++ b/packages/domain/jest.config.js @@ -0,0 +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'] +} 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 } 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..95ad899 --- /dev/null +++ b/packages/mobile/__tests__/first-screen-test.tsx @@ -0,0 +1,28 @@ +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..8927c75 --- /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' }) +})) diff --git a/packages/mobile/package.json b/packages/mobile/package.json index d345048..5f02815 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,9 @@ }, "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..cb0bd4b 100644 --- a/packages/mobile/src/feature/firstscreen/first_screen.tsx +++ b/packages/mobile/src/feature/firstscreen/first_screen.tsx @@ -9,9 +9,11 @@ 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') +// })