Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@ build
eslintrc.js
public
scripts
coverage
coverage/**
5 changes: 4 additions & 1 deletion jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ module.exports = {
'!src/**/*.d.ts',
'!src/index.tsx',
'!src/app/middleware/telemetryMiddleware.ts',
'!src/telemetry/telemetry.ts'
'!src/telemetry/telemetry.ts',
'!src/tests/**',
'!src/**/*.spec.{ts,tsx}',
'!src/**/*.test.{ts,tsx}'
],
resolver: `${__dirname}/src/tests/common/resolver.js`,
setupFiles: ['react-app-polyfill/jsdom'],
Expand Down
602 changes: 574 additions & 28 deletions package-lock.json

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@
"@axe-core/playwright": "4.10.1",
"@eslint/js": "9.23.0",
"@playwright/test": "1.51.1",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.2",
"@types/chromedriver": "81.0.1",
"@types/isomorphic-fetch": "0.0.39",
"@types/jest": "29.5.14",
Expand Down Expand Up @@ -119,6 +121,7 @@
"jest-sonar-reporter": "2.0.0",
"jest-watch-typeahead": "2.2.2",
"markdown-it": "14.1.0",
"monocart-reporter": "^2.10.0",
"node-notifier": "10.0.1",
"react-dev-utils": "12.0.1",
"redux-logger": "3.0.6",
Expand Down
51 changes: 51 additions & 0 deletions src/adaptivecards-templates/index.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import {
DirectReports, Files, FullPersonCard, Groups,
InsightsTrending, Messages, Profile, Site, Sites, User, Users
} from './index';

describe('adaptivecards-templates', () => {
it('exports DirectReports template', () => {
expect(DirectReports).toBeDefined();
expect(typeof DirectReports).toBe('object');
});

it('exports Files template', () => {
expect(Files).toBeDefined();
});

it('exports FullPersonCard template', () => {
expect(FullPersonCard).toBeDefined();
});

it('exports Groups template', () => {
expect(Groups).toBeDefined();
});

it('exports InsightsTrending template', () => {
expect(InsightsTrending).toBeDefined();
});

it('exports Messages template', () => {
expect(Messages).toBeDefined();
});

it('exports Profile template', () => {
expect(Profile).toBeDefined();
});

it('exports Site template', () => {
expect(Site).toBeDefined();
});

it('exports Sites template', () => {
expect(Sites).toBeDefined();
});

it('exports User template', () => {
expect(User).toBeDefined();
});

it('exports Users template', () => {
expect(Users).toBeDefined();
});
});
93 changes: 93 additions & 0 deletions src/app/middleware/localStorageMiddleware.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
import localStorageMiddleware from './localStorageMiddleware';

jest.mock('../../modules/cache/collections.cache', () => ({
collectionsCache: {
read: jest.fn(),
update: jest.fn(),
create: jest.fn()
}
}));

jest.mock('../../modules/cache/samples.cache', () => ({
samplesCache: {
saveSamples: jest.fn()
}
}));

jest.mock('../utils/local-storage', () => ({
saveToLocalStorage: jest.fn()
}));

jest.mock('../services/reducers/collections-reducer.util', () => ({
getUniquePaths: jest.fn((existing: any[], newPaths: any[]) => [...existing, ...newPaths])
}));

import { collectionsCache } from '../../modules/cache/collections.cache';
import { samplesCache } from '../../modules/cache/samples.cache';
import { saveToLocalStorage } from '../utils/local-storage';
import {
CHANGE_THEME_SUCCESS, SAMPLES_FETCH_SUCCESS,
RESOURCEPATHS_ADD_SUCCESS, RESOURCEPATHS_DELETE_SUCCESS,
COLLECTION_CREATE_SUCCESS
} from '../services/redux-constants';

describe('localStorageMiddleware', () => {
const next = jest.fn((action) => action);
const store = {} as any;
const middleware = localStorageMiddleware(store)(next);

beforeEach(() => {
jest.clearAllMocks();
});

it('should save theme to localStorage on CHANGE_THEME_SUCCESS', async () => {
await middleware({ type: CHANGE_THEME_SUCCESS, payload: 'dark' });
expect(saveToLocalStorage).toHaveBeenCalledWith('CURRENT_THEME', 'dark');
expect(next).toHaveBeenCalled();
});

it('should save samples to cache on SAMPLES_FETCH_SUCCESS', async () => {
const samples = [{ id: '1', humanName: 'Test' }];
await middleware({ type: SAMPLES_FETCH_SUCCESS, payload: samples });
expect(samplesCache.saveSamples).toHaveBeenCalledWith(samples);
expect(next).toHaveBeenCalled();
});

it('should update collection paths on RESOURCEPATHS_ADD_SUCCESS', async () => {
const mockCollection = { id: '1', isDefault: true, paths: [{ key: 'existing' }] };
(collectionsCache.read as jest.Mock).mockResolvedValue([mockCollection]);

const newPaths = [{ key: 'new-path' }];
await middleware({ type: RESOURCEPATHS_ADD_SUCCESS, payload: newPaths });

expect(collectionsCache.read).toHaveBeenCalled();
expect(collectionsCache.update).toHaveBeenCalled();
expect(next).toHaveBeenCalled();
});

it('should delete paths from collection on RESOURCEPATHS_DELETE_SUCCESS', async () => {
const mockCollection = { id: '1', isDefault: true, paths: [{ key: 'path1' }, { key: 'path2' }] };
(collectionsCache.read as jest.Mock).mockResolvedValue([mockCollection]);

await middleware({ type: RESOURCEPATHS_DELETE_SUCCESS, payload: [{ key: 'path1' }] });

expect(collectionsCache.read).toHaveBeenCalled();
expect(collectionsCache.update).toHaveBeenCalled();
expect(next).toHaveBeenCalled();
});

it('should create collection on COLLECTION_CREATE_SUCCESS', async () => {
const collection = { id: '1', name: 'Test Collection' };
await middleware({ type: COLLECTION_CREATE_SUCCESS, payload: collection });

expect(collectionsCache.create).toHaveBeenCalledWith(collection);
expect(next).toHaveBeenCalled();
});

it('should pass through unhandled actions', async () => {
await middleware({ type: 'UNKNOWN_ACTION', payload: null });
expect(next).toHaveBeenCalled();
expect(saveToLocalStorage).not.toHaveBeenCalled();
expect(samplesCache.saveSamples).not.toHaveBeenCalled();
});
});
Loading
Loading