Advertisement
Guest User

Untitled

a guest
Jun 24th, 2019
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.71 KB | None | 0 0
  1. import { BehaviorSubject, forkJoin } from 'rxjs'
  2.  
  3. export const tableConfig: any[] = [{
  4. tableName: 'TableOne'
  5. },
  6. {
  7. tableName: 'TableTwo'
  8. },
  9. {
  10. tableName: 'TableThree'
  11. }];
  12.  
  13. const exampleApiTableData: any = {
  14. TableOne: [],
  15. TableTwo: [],
  16. TableThree: [],
  17. }
  18.  
  19. export const pullTableData = (tableName: string): Promise<any[]> => { //async Promise function 1
  20. return new Promise((resolve, reject) => {
  21. // Here is a async api call with some more logic but to make it simple and short giving such an example
  22. setTimeout(() => {
  23. resolve(exampleApiTableData[tableName]);
  24. }, 1000);
  25. })
  26. }
  27.  
  28. export const buildNewTable = (tableOne: any[], tableTwo: any []): Promise<any[]> => { // Promise function 2
  29. return new Promise((resolve, reject) => {
  30. //simplified example
  31. resolve(tableOne.concat(tableTwo));
  32. })
  33. }
  34.  
  35. export const getTables = (): Promise<any> => { // Master
  36. return new Promise((resolve, reject) => {
  37. const errors: string[] = [];
  38. const allTableData$: any[] = [];
  39. const observableNames: any = {};
  40.  
  41. tableConfig.forEach(table => {
  42. observableNames[table.tableName + 'Source'] = new BehaviorSubject<string[]>([]);
  43. observableNames[table.tableName] = observableNames[table.tableName + 'Source'].asObservable();
  44. allTableData$.push(observableNames[table.tableName]);
  45. pullTableData(table.tableName).then((result: any[]) => {
  46. observableNames[table.tableName + 'Source'].next(result);
  47. observableNames[table.tableName + 'Source'].complete();
  48. }).catch((error: any) => {
  49. errors.push(error);
  50. observableNames[table.tableName + 'Source'].next(error);
  51. observableNames[table.tableName + 'Source'].complete();
  52. })
  53. });
  54.  
  55. forkJoin(allTableData$).subscribe((results: any) => {
  56. if (errors.length > 0) reject(errors);
  57. buildNewTable(observableNames.TableOneSource.value, observableNames.TableTableTwoSource.value).then((result: any[]) => {
  58. // console.log(result);
  59. resolve(result);
  60. }).catch((error: any) => {
  61. // console.log(error);
  62. reject(error);
  63. });
  64. });
  65. });
  66. }
  67.  
  68. import * as tableMethods from './index'
  69.  
  70. describe(`Test the Table methods`, () => {
  71. test(`it should return and error`, () => {
  72. const expectedError = `I'm an error`
  73. jest.fn(tableMethods.pullTableData).mockRejectedValue(expectedError);
  74.  
  75. return tableMethods.getTables().then((data: any) => {
  76.  
  77. }).catch((error: any) => {
  78. expect(error).toBe(expectedError);
  79. })
  80. })
  81. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement