react-antd-admin-panel
Version:
Modern TypeScript-first React admin panel builder with Ant Design 6
67 lines • 2.18 kB
JavaScript
import React from 'react';
import { MainContext } from '../main/MainContext';
import { GlobalStore } from '../main/Store';
import { UserState } from '../main/UserState';
import { createMockHttp } from './createMockHttp';
/**
* Create a mock Main context wrapper for testing
*/
export function createMockMain(options = {}) {
// Create instances
const store = new GlobalStore();
const userState = new UserState();
const mockHttp = createMockHttp();
// Initialize store with provided values
if (options.store) {
for (const [key, value] of Object.entries(options.store)) {
store.set(key, value);
}
}
// Initialize user with provided data
if (options.user) {
userState.set(options.user);
}
// Create mock navigate function with call tracking
const calls = [];
const mockNavigate = Object.assign((...args) => { calls.push(args); }, {
mock: { calls },
mockClear: () => { calls.length = 0; },
});
// Create the main instance
const config = options.config || {};
const mainInstance = {
User: () => userState,
Store: () => store,
config: {
pathToApi: config.pathToApi || '/api',
defaultRoute: config.defaultRoute || '/',
authRoute: config.authRoute || '/login',
...config,
},
navigate: mockNavigate,
canAccess: (route) => {
// Check required role
if (route.requiredRole && !userState.hasRole(route.requiredRole)) {
return false;
}
// Check required permissions
if (route.requiredPermissions && !userState.hasAllPermissions(route.requiredPermissions)) {
return false;
}
return true;
},
};
// Create the wrapper component
const wrapper = ({ children }) => {
return React.createElement(MainContext.Provider, { value: mainInstance }, children);
};
return {
wrapper,
mockNavigate,
mockHttp,
mainInstance,
userState,
store,
};
}
//# sourceMappingURL=createMockMain.js.map