Skip to content
Snippets Groups Projects
Unverified Commit 5d3c85ff authored by Guilherme Gazzo's avatar Guilherme Gazzo Committed by GitHub
Browse files

test: create mock package (#29765)

parent 359338a1
No related branches found
No related tags found
No related merge requests found
{
"extends": ["@rocket.chat/eslint-config"],
"ignorePatterns": ["**/dist"]
}
{
"name": "@rocket.chat/mock-providers",
"version": "0.0.1",
"private": true,
"devDependencies": {
"@rocket.chat/ui-contexts": "workspace:*",
"@tanstack/react-query": "^4.16.1",
"@types/jest": "^27.4.1",
"eslint": "^8.12.0",
"jest": "~29.5.0",
"react": "~17.0.2",
"ts-jest": "~29.0.5",
"typescript": "~5.0.2"
},
"peerDependencies": {
"@tanstack/react-query": "*",
"react": "*"
},
"scripts": {
"lint": "eslint --ext .js,.jsx,.ts,.tsx .",
"lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix",
"test": "jest",
"build": "rm -rf dist && tsc -p tsconfig.json",
"dev": "tsc -p tsconfig.json --watch --preserveWatchOutput"
},
"main": "./dist/index.js",
"typings": "./dist/index.d.ts",
"files": [
"/dist"
]
}
import React from 'react';
import { AuthorizationContext } from '@rocket.chat/ui-contexts';
export const MockedAuthorizationContext = ({ permissions = [], children }: { permissions: string[]; children: React.ReactNode }) => {
return (
<AuthorizationContext.Provider
value={{
queryPermission: (id: string) => [() => (): void => undefined, (): boolean => permissions.includes(id)],
queryAtLeastOnePermission: () => [() => (): void => undefined, (): boolean => false],
queryAllPermissions: () => [() => (): void => undefined, (): boolean => false],
queryRole: () => [() => (): void => undefined, (): boolean => false],
roleStore: {
roles: {},
emit: (): void => undefined,
on: () => (): void => undefined,
off: (): void => undefined,
events: (): 'change'[] => ['change'],
has: (): boolean => false,
once: () => (): void => undefined,
},
}}
>
{children}
</AuthorizationContext.Provider>
);
};
import React from 'react';
import type { Serialized } from '@rocket.chat/core-typings';
import type { Method, OperationParams, OperationResult, PathPattern, UrlParams } from '@rocket.chat/rest-typings';
import type { ServerMethodName, ServerMethodParameters } from '@rocket.chat/ui-contexts';
import { ServerContext } from '@rocket.chat/ui-contexts';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
export const MockedServerContext = ({
handleRequest,
children,
}: {
handleRequest: <TMethod extends Method, TPathPattern extends PathPattern>(args: {
method: TMethod;
pathPattern: TPathPattern;
keys: UrlParams<TPathPattern>;
params: OperationParams<TMethod, TPathPattern>;
}) => Promise<Serialized<OperationResult<TMethod, TPathPattern>>>;
children: React.ReactNode;
}): any => {
const [queryClient] = React.useState(() => new QueryClient());
return (
<ServerContext.Provider
value={
{
absoluteUrl: (path: string) => `http://localhost:3000/${path}`,
callMethod: <MethodName extends ServerMethodName>(_methodName: MethodName, ..._args: ServerMethodParameters<MethodName>) =>
Promise.reject('mock not implemented'),
callEndpoint: async <TMethod extends Method, TPathPattern extends PathPattern>(args: {
method: TMethod;
pathPattern: TPathPattern;
keys: UrlParams<TPathPattern>;
params: OperationParams<TMethod, TPathPattern>;
}) => {
return handleRequest(args);
},
} as any
}
>
<QueryClientProvider client={queryClient}>{children}</QueryClientProvider>
</ServerContext.Provider>
);
};
import React from 'react';
import type { ISetting } from '@rocket.chat/core-typings';
import { SettingsContext } from '@rocket.chat/ui-contexts';
import type { ContextType } from 'react';
const settingContextValue: ContextType<typeof SettingsContext> = {
hasPrivateAccess: true,
isLoading: false,
querySetting: (_id: string) => [() => () => undefined, () => undefined],
querySettings: () => [() => () => undefined, () => []],
dispatch: async () => undefined,
};
const createSettingContextValue = ({ settings }: { settings?: Record<string, ISetting['value']> }): ContextType<typeof SettingsContext> => {
const cache = new Map<string, ISetting['value']>();
return {
...settingContextValue,
...(settings && {
querySetting: (_id: string) => [
() => () => undefined,
() => {
if (cache.has(_id)) {
return cache.get(_id) as any;
}
cache.set(_id, { value: settings[_id] } as any);
return cache.get(_id) as any;
},
],
}),
};
};
export const MockedSettingsContext = ({
settings,
children,
}: {
children: React.ReactNode;
settings?: Record<string, ISetting['value']>;
}) => {
return <SettingsContext.Provider value={createSettingContextValue({ settings })}>{children}</SettingsContext.Provider>;
};
import React from 'react';
import type { LoginService } from '@rocket.chat/ui-contexts';
import { UserContext } from '@rocket.chat/ui-contexts';
import type { ContextType } from 'react';
const userContextValue: ContextType<typeof UserContext> = {
userId: 'john.doe',
user: {
_id: 'john.doe',
username: 'john.doe',
name: 'John Doe',
createdAt: new Date(),
active: true,
_updatedAt: new Date(),
roles: ['admin'],
type: 'user',
},
queryPreference: (<T,>(pref: string, defaultValue: T) => [
() => () => undefined,
() => (typeof pref === 'string' ? undefined : defaultValue),
]) as any,
querySubscriptions: () => [() => () => undefined, () => []],
querySubscription: () => [() => () => undefined, () => undefined],
queryRoom: () => [() => () => undefined, () => undefined],
queryAllServices: () => [() => (): void => undefined, (): LoginService[] => []],
loginWithService: () => () => Promise.reject('loginWithService not implemented'),
loginWithPassword: async () => Promise.reject('loginWithPassword not implemented'),
loginWithToken: async () => Promise.reject('loginWithToken not implemented'),
logout: () => Promise.resolve(),
};
const createUserContextValue = ({ userPreferences }: { userPreferences?: Record<string, unknown> }): ContextType<typeof UserContext> => {
return {
...userContextValue,
...(userPreferences && { queryPreference: (id) => [() => () => undefined, () => userPreferences[id as unknown as string] as any] }),
};
};
export const MockedUserContext = ({
userPreferences,
children,
}: {
children: React.ReactNode;
userPreferences?: Record<string, unknown>;
}) => {
return <UserContext.Provider value={createUserContextValue({ userPreferences })}>{children}</UserContext.Provider>;
};
{
"extends": "../../tsconfig.base.client.json",
"compilerOptions": {
"jsx": "react",
"rootDir": "./src",
"outDir": "./dist"
},
"include": ["./src/**/*"]
}
......@@ -5,6 +5,13 @@ __metadata:
version: 6
cacheKey: 8
 
"@aashutoshrathi/word-wrap@npm:^1.2.3":
version: 1.2.6
resolution: "@aashutoshrathi/word-wrap@npm:1.2.6"
checksum: ada901b9e7c680d190f1d012c84217ce0063d8f5c5a7725bb91ec3c5ed99bb7572680eb2d2938a531ccbaec39a95422fcd8a6b4a13110c7d98dd75402f66a0cd
languageName: node
linkType: hard
"@actions/core@npm:^1.10.0":
version: 1.10.0
resolution: "@actions/core@npm:1.10.0"
......@@ -5002,6 +5009,23 @@ __metadata:
languageName: node
linkType: hard
 
"@eslint/eslintrc@npm:^2.1.0":
version: 2.1.0
resolution: "@eslint/eslintrc@npm:2.1.0"
dependencies:
ajv: ^6.12.4
debug: ^4.3.2
espree: ^9.6.0
globals: ^13.19.0
ignore: ^5.2.0
import-fresh: ^3.2.1
js-yaml: ^4.1.0
minimatch: ^3.1.2
strip-json-comments: ^3.1.1
checksum: d5ed0adbe23f6571d8c9bb0ca6edf7618dc6aed4046aa56df7139f65ae7b578874e0d9c796df784c25bda648ceb754b6320277d828c8b004876d7443b8dc018c
languageName: node
linkType: hard
"@eslint/js@npm:8.43.0":
version: 8.43.0
resolution: "@eslint/js@npm:8.43.0"
......@@ -5009,6 +5033,13 @@ __metadata:
languageName: node
linkType: hard
 
"@eslint/js@npm:8.44.0":
version: 8.44.0
resolution: "@eslint/js@npm:8.44.0"
checksum: fc539583226a28f5677356e9f00d2789c34253f076643d2e32888250e509a4e13aafe0880cb2425139051de0f3a48d25bfc5afa96b7304f203b706c17340e3cf
languageName: node
linkType: hard
"@faker-js/faker@npm:~8.0.2":
version: 8.0.2
resolution: "@faker-js/faker@npm:8.0.2"
......@@ -10538,6 +10569,24 @@ __metadata:
languageName: unknown
linkType: soft
 
"@rocket.chat/mock-providers@workspace:packages/mock-providers":
version: 0.0.0-use.local
resolution: "@rocket.chat/mock-providers@workspace:packages/mock-providers"
dependencies:
"@rocket.chat/ui-contexts": "workspace:*"
"@tanstack/react-query": ^4.16.1
"@types/jest": ^27.4.1
eslint: ^8.12.0
jest: ~29.5.0
react: ~17.0.2
ts-jest: ~29.0.5
typescript: ~5.0.2
peerDependencies:
"@tanstack/react-query": "*"
react: "*"
languageName: unknown
linkType: soft
"@rocket.chat/model-typings@workspace:^, @rocket.chat/model-typings@workspace:packages/model-typings":
version: 0.0.0-use.local
resolution: "@rocket.chat/model-typings@workspace:packages/model-typings"
......@@ -11063,7 +11112,7 @@ __metadata:
languageName: unknown
linkType: soft
 
"@rocket.chat/ui-contexts@workspace:^, @rocket.chat/ui-contexts@workspace:packages/ui-contexts, @rocket.chat/ui-contexts@workspace:~":
"@rocket.chat/ui-contexts@workspace:*, @rocket.chat/ui-contexts@workspace:^, @rocket.chat/ui-contexts@workspace:packages/ui-contexts, @rocket.chat/ui-contexts@workspace:~":
version: 0.0.0-use.local
resolution: "@rocket.chat/ui-contexts@workspace:packages/ui-contexts"
dependencies:
......@@ -15684,6 +15733,15 @@ __metadata:
languageName: node
linkType: hard
 
"acorn@npm:^8.9.0":
version: 8.10.0
resolution: "acorn@npm:8.10.0"
bin:
acorn: bin/acorn
checksum: 538ba38af0cc9e5ef983aee196c4b8b4d87c0c94532334fa7e065b2c8a1f85863467bb774231aae91613fcda5e68740c15d97b1967ae3394d20faddddd8af61d
languageName: node
linkType: hard
"add-px-to-style@npm:1.0.0":
version: 1.0.0
resolution: "add-px-to-style@npm:1.0.0"
......@@ -22397,6 +22455,55 @@ __metadata:
languageName: node
linkType: hard
 
"eslint@npm:^8.12.0":
version: 8.44.0
resolution: "eslint@npm:8.44.0"
dependencies:
"@eslint-community/eslint-utils": ^4.2.0
"@eslint-community/regexpp": ^4.4.0
"@eslint/eslintrc": ^2.1.0
"@eslint/js": 8.44.0
"@humanwhocodes/config-array": ^0.11.10
"@humanwhocodes/module-importer": ^1.0.1
"@nodelib/fs.walk": ^1.2.8
ajv: ^6.10.0
chalk: ^4.0.0
cross-spawn: ^7.0.2
debug: ^4.3.2
doctrine: ^3.0.0
escape-string-regexp: ^4.0.0
eslint-scope: ^7.2.0
eslint-visitor-keys: ^3.4.1
espree: ^9.6.0
esquery: ^1.4.2
esutils: ^2.0.2
fast-deep-equal: ^3.1.3
file-entry-cache: ^6.0.1
find-up: ^5.0.0
glob-parent: ^6.0.2
globals: ^13.19.0
graphemer: ^1.4.0
ignore: ^5.2.0
import-fresh: ^3.0.0
imurmurhash: ^0.1.4
is-glob: ^4.0.0
is-path-inside: ^3.0.3
js-yaml: ^4.1.0
json-stable-stringify-without-jsonify: ^1.0.1
levn: ^0.4.1
lodash.merge: ^4.6.2
minimatch: ^3.1.2
natural-compare: ^1.4.0
optionator: ^0.9.3
strip-ansi: ^6.0.1
strip-json-comments: ^3.1.0
text-table: ^0.2.0
bin:
eslint: bin/eslint.js
checksum: d06309ce4aafb9d27d558c8e5e5aa5cba3bbec3ce8ceccbc7d4b7a35f2b67fd40189159155553270e2e6febeb69bd8a3b60d6241c8f5ddc2ef1702ccbd328501
languageName: node
linkType: hard
"eslint@npm:^8.43.0, eslint@npm:~8.43.0":
version: 8.43.0
resolution: "eslint@npm:8.43.0"
......@@ -22468,6 +22575,17 @@ __metadata:
languageName: node
linkType: hard
 
"espree@npm:^9.6.0":
version: 9.6.0
resolution: "espree@npm:9.6.0"
dependencies:
acorn: ^8.9.0
acorn-jsx: ^5.3.2
eslint-visitor-keys: ^3.4.1
checksum: 1287979510efb052a6a97c73067ea5d0a40701b29adde87bbe2d3eb1667e39ca55e8129e20e2517fed3da570150e7ef470585228459a8f3e3755f45007a1c662
languageName: node
linkType: hard
"esprima@npm:^4.0.0, esprima@npm:^4.0.1":
version: 4.0.1
resolution: "esprima@npm:4.0.1"
......@@ -32272,6 +32390,20 @@ __metadata:
languageName: node
linkType: hard
 
"optionator@npm:^0.9.3":
version: 0.9.3
resolution: "optionator@npm:0.9.3"
dependencies:
"@aashutoshrathi/word-wrap": ^1.2.3
deep-is: ^0.1.3
fast-levenshtein: ^2.0.6
levn: ^0.4.1
prelude-ls: ^1.2.1
type-check: ^0.4.0
checksum: 09281999441f2fe9c33a5eeab76700795365a061563d66b098923eb719251a42bdbe432790d35064d0816ead9296dbeb1ad51a733edf4167c96bd5d0882e428a
languageName: node
linkType: hard
"optipng-bin@npm:^7.0.0":
version: 7.0.1
resolution: "optipng-bin@npm:7.0.1"
......@@ -40251,6 +40383,16 @@ __metadata:
languageName: node
linkType: hard
 
"typescript@npm:~5.0.2":
version: 5.0.4
resolution: "typescript@npm:5.0.4"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 82b94da3f4604a8946da585f7d6c3025fff8410779e5bde2855ab130d05e4fd08938b9e593b6ebed165bda6ad9292b230984f10952cf82f0a0ca07bbeaa08172
languageName: node
linkType: hard
"typescript@patch:typescript@^5.1.3#~builtin<compat/typescript>, typescript@patch:typescript@~5.1.3#~builtin<compat/typescript>":
version: 5.1.3
resolution: "typescript@patch:typescript@npm%3A5.1.3#~builtin<compat/typescript>::version=5.1.3&hash=f456af"
......@@ -40261,6 +40403,16 @@ __metadata:
languageName: node
linkType: hard
 
"typescript@patch:typescript@~5.0.2#~builtin<compat/typescript>":
version: 5.0.4
resolution: "typescript@patch:typescript@npm%3A5.0.4#~builtin<compat/typescript>::version=5.0.4&hash=f456af"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 6a1fe9a77bb9c5176ead919cc4a1499ee63e46b4e05bf667079f11bf3a8f7887f135aa72460a4c3b016e6e6bb65a822cb8689a6d86cbfe92d22cc9f501f09213
languageName: node
linkType: hard
"ua-parser-js@npm:^1.0.35":
version: 1.0.35
resolution: "ua-parser-js@npm:1.0.35"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment