Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import { BehaviorSubject, forkJoin } from 'rxjs'
- export const tableConfig: any[] = [{
- tableName: 'TableOne'
- },
- {
- tableName: 'TableTwo'
- },
- {
- tableName: 'TableThree'
- }];
- const exampleApiTableData: any = {
- TableOne: [],
- TableTwo: [],
- TableThree: [],
- }
- export const pullTableData = (tableName: string): Promise<any[]> => { //async Promise function 1
- return new Promise((resolve, reject) => {
- // Here is a async api call with some more logic but to make it simple and short giving such an example
- setTimeout(() => {
- resolve(exampleApiTableData[tableName]);
- }, 1000);
- })
- }
- export const buildNewTable = (tableOne: any[], tableTwo: any []): Promise<any[]> => { // Promise function 2
- return new Promise((resolve, reject) => {
- //simplified example
- resolve(tableOne.concat(tableTwo));
- })
- }
- export const getTables = (): Promise<any> => { // Master
- return new Promise((resolve, reject) => {
- const errors: string[] = [];
- const allTableData$: any[] = [];
- const observableNames: any = {};
- tableConfig.forEach(table => {
- observableNames[table.tableName + 'Source'] = new BehaviorSubject<string[]>([]);
- observableNames[table.tableName] = observableNames[table.tableName + 'Source'].asObservable();
- allTableData$.push(observableNames[table.tableName]);
- pullTableData(table.tableName).then((result: any[]) => {
- observableNames[table.tableName + 'Source'].next(result);
- observableNames[table.tableName + 'Source'].complete();
- }).catch((error: any) => {
- errors.push(error);
- observableNames[table.tableName + 'Source'].next(error);
- observableNames[table.tableName + 'Source'].complete();
- })
- });
- forkJoin(allTableData$).subscribe((results: any) => {
- if (errors.length > 0) reject(errors);
- buildNewTable(observableNames.TableOneSource.value, observableNames.TableTableTwoSource.value).then((result: any[]) => {
- // console.log(result);
- resolve(result);
- }).catch((error: any) => {
- // console.log(error);
- reject(error);
- });
- });
- });
- }
- import * as tableMethods from './index'
- describe(`Test the Table methods`, () => {
- test(`it should return and error`, () => {
- const expectedError = `I'm an error`
- jest.fn(tableMethods.pullTableData).mockRejectedValue(expectedError);
- return tableMethods.getTables().then((data: any) => {
- }).catch((error: any) => {
- expect(error).toBe(expectedError);
- })
- })
- })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement