All files / src/context/directory/handlers organizations.ts

100% Statements 30/30
80% Branches 8/10
100% Functions 5/5
100% Lines 28/28

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 741x 1x   1x 1x               52x   52x   1x   1x 2x           2x     1x           2x     2x   1x 1x   1x 2x 2x   2x 2x   2x   2x         2x 2x   2x       2x       1x         1x  
import fs from 'fs-extra';
import path from 'path';
 
import log from '../../../logger';
import { getFiles, existsMustBeDir, dumpJSON, loadJSON, sanitize } from '../../../utils';
import { DirectoryHandler } from '.';
import DirectoryContext from '..';
import { Asset, ParsedAsset } from '../../../types';
 
type ParsedOrganizations = ParsedAsset<'organizations', Asset[]>;
 
function parse(context: DirectoryContext): ParsedOrganizations {
  const organizationsFolder = path.join(context.filePath, 'organizations');
 
  if (!existsMustBeDir(organizationsFolder)) return { organizations: null }; // Skip
 
  const files = getFiles(organizationsFolder, ['.json']);
 
  const organizations = files.map((f) => {
    const org = {
      ...loadJSON(f, {
        mappings: context.mappings,
        disableKeywordReplacement: context.disableKeywordReplacement,
      }),
    };
    return org;
  });
 
  return {
    organizations,
  };
}
 
async function dump(context: DirectoryContext): Promise<void> {
  const { organizations } = context.assets;
 
  // API returns an empty object if no grants are present
  if (!organizations || organizations.constructor === Object) return; // Skip, nothing to dump
 
  const organizationsFolder = path.join(context.filePath, 'organizations');
  fs.ensureDirSync(organizationsFolder);
 
  organizations.forEach((organization) => {
    const organizationFile = path.join(organizationsFolder, sanitize(`${organization.name}.json`));
    log.info(`Writing ${organizationFile}`);
 
    Eif (organization.connections.length > 0) {
      organization.connections = organization.connections.map((c) => {
        // connection is a computed field
        const name = c.connection && c.connection.name;
 
        const conn = {
          name,
          ...c,
        };
 
        delete conn.connection_id;
        delete conn.connection;
 
        return conn;
      });
    }
 
    dumpJSON(organizationFile, organization);
  });
}
 
const organizationsHandler: DirectoryHandler<ParsedOrganizations> = {
  parse,
  dump,
};
 
export default organizationsHandler;