All files / src/services/tables/builders DriverEtasTableBuilder.js

96.3% Statements 26/27
75% Branches 3/4
100% Functions 3/3
96.3% Lines 26/27
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 74 75 76 77 78 79 80    1x 1x       1x       1x       1x   1x 3x     1x   1x 3x     1x       1x             1x 1x         1x 2x 1x 1x         3x             3x             3x 3x   3x 1x   2x 2x            
'use es6'
 
import emoji from 'node-emoji';
import {
  List,
  Map,
} from 'immutable';
import Table from 'cli-table2';
 
// import DistanceCalculator from '../../calculators/DistanceCalculator';
 
import DriverEtaFormatter from '../formatters/DriverEtaFormatter';
 
export default class DriverEtasTableBuilder {
  static build(driverEtas) {
    let table = DriverEtasTableBuilder.buildInitialTable(driverEtas.location.name);
 
    let driverEtaRows = driverEtas.driverEtas.map((driverEta) => {
      return DriverEtasTableBuilder.buildDriverEtaRow(driverEta);
    });
 
    driverEtaRows = driverEtaRows.sort(DriverEtasTableBuilder.sortByDisplayName);
 
    driverEtaRows.forEach((driverEtaRow) => {
      table.push(driverEtaRow);
    });
 
    return table.toString();
  }
 
  static getTableHeaders() {
    return List.of(
      emoji.get('red_car'),
      emoji.get('timer_clock')
    );
  }
 
  static buildInitialTable(locationName) {
    let table = new Table();
    table.push([{
      colSpan: 2,
      content: `${emoji.get('round_pushpin')} ${locationName}`,
      hAlign: 'center'
    }]);
    let formattedHeaders = List(DriverEtasTableBuilder.getTableHeaders()
                              .map(header => Map({ content: header, hAlign: 'center' })));
    table.push(formattedHeaders.toJS());
    return table;
  }
 
  static buildDriverEtaRow(driverEta) {
    // TODO: Check for driverEta.isValidEstimate
    return [
      driverEta.displayName,
      DriverEtasTableBuilder.buildDuration(DriverEtaFormatter.formatDuration(driverEta.etaSeconds)).toJS(),
    ];
  }
 
  static buildDuration(duration) {
    return Map({
      content: duration,
      hAlign: 'center',
    })
  }
 
  static sortByDisplayName(driverEta1, driverEta2) {
    const displayName1 = driverEta1[0].toLowerCase();
    const displayName2 = driverEta2[0].toLowerCase();
 
    if (displayName1 < displayName2) {
      return -1;
    }
    Eif (displayName1 > displayName2) {
      return 1;
    }
 
    return 0;
  }
}