All files / classes configuration.ts

100% Statements 18/18
100% Branches 10/10
100% Functions 1/1
100% Lines 18/18

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 722x                                       2x               15x 15x 2x     13x   13x         13x 1x         12x   12x         12x 1x         11x   11x 1x         10x 10x      
import get = require("lodash.get");
 
import { EmailJSON } from "@sendgrid/helpers/classes/email-address";
 
export interface ConfigurationTemplate {
  filePath: string;
  data?: {
    [key: string]: string;
  };
  wrappers?: [string, string];
}
 
export interface ConfigurationData {
  apiKey?: string;
  from?: EmailJSON;
  to: EmailJSON;
  template: ConfigurationTemplate;
  subject?: string;
}
 
export default class Configuration {
  public apiKey: string;
  public from: EmailJSON;
  public to: EmailJSON;
  public template?: ConfigurationTemplate;
  public subject?: string;
 
  constructor(data?: ConfigurationData) {
    const apiKey = get(data, "apiKey", process.env.SENDGRID_API_KEY);
    if (!apiKey) {
      throw new Error("[ProductionConfiguration.constructor] apiKey required.");
    }
 
    this.apiKey = apiKey;
 
    const from = {
      email: get(data, ["from", "email"], process.env.SENDGRID_FROM_EMAIL),
      name: get(data, ["from", "name"], process.env.SENDGRID_FROM_NAME)
    };
 
    if (!from.email) {
      throw new Error(
        "[ProductionConfiguration.constructor] from email required."
      );
    }
 
    this.from = from;
 
    const to = {
      email: get(data, ["to", "email"], process.env.SENDGRID_FROM_EMAIL),
      name: get(data, ["to", "name"], process.env.SENDGRID_FROM_NAME)
    };
 
    if (!to.email) {
      throw new Error(
        "[ProductionConfiguration.constructor] to email required."
      );
    }
 
    this.to = to;
 
    if (get(data, "template") && !get(data, ["template", "filePath"])) {
      throw new Error(
        "[ProductionConfiguration.constructor] template filePath required."
      );
    }
 
    this.template = get(data, "template");
    this.subject = get(data, "subject");
  }
}