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

96.15% Statements 25/26
75% Branches 3/4
100% Functions 3/3
96.15% Lines 25/26
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    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';
 
export default class RideTypesTableBuilder {
  static build(rideTypes) {
    const table = RideTypesTableBuilder.buildInitialTable(rideTypes.location.name);
 
    let rideTypeRows = rideTypes.rideTypes.map((rideType) => {
      return RideTypesTableBuilder.buildRideTypeRow(rideType);
    });
 
    rideTypeRows = rideTypeRows.sort(RideTypesTableBuilder.sortByDisplayName);
 
    rideTypeRows.forEach((rideTypeRow) => {
      table.push(rideTypeRow);
    });
 
    return table.toString();
  }
 
  static getTableHeaders() {
    return List.of(
      emoji.get('red_car'),
      emoji.get('seat')
    );
  }
 
  static buildInitialTable(locationName) {
    const table = new Table();
    table.push([{
      colSpan: 2,
      content: `${emoji.get('round_pushpin')} ${locationName}`,
      hAlign: 'center'
    }]);
    const formattedHeaders = List(RideTypesTableBuilder.getTableHeaders()
                              .map(header => Map({ content: header, hAlign: 'center' })));
    table.push(formattedHeaders.toJS());
    return table;
  }
 
  static buildRideTypeRow(rideType) {
    return [
      rideType.displayName,
      RideTypesTableBuilder.buildSeats(rideType.seats).toJS(),
    ];
  }
 
  static buildSeats(seats) {
    return Map({
      content: seats,
      hAlign: 'center',
    });
  }
 
  static sortByDisplayName(rideType1, rideType2) {
    const displayName1 = rideType1[0].toLowerCase();
    const displayName2 = rideType2[0].toLowerCase();
 
    if (displayName1 < displayName2) {
      return -1;
    }
    Eif (displayName1 > displayName2) {
      return 1;
    }
 
    return 0;
  }
}