All files / lib/feature-operations/scripts analytics-ops.js

93.48% Statements 43/46
90.48% Branches 19/21
77.78% Functions 7/9
93.33% Lines 42/45
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 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105    1x 1x 1x 1x 1x   1x   6x   6x             6x 6x   6x       3x   6x 6x       1x 6x 6x 3x   6x             6x 6x 6x       1x   6x   2x     1x   1x   1x         4x     4x   2x       4x     6x 6x 6x   6x     1x 6x 6x 6x               1x       1x      
"use strict";
 
const inquirer = require('inquirer');
const fs = require('fs');
const yamlSchema = require('../../aws-operations/mobile-yaml-schema');
const yamlOps = require('../../aws-operations/mobile-yaml-ops');
const pathManager = require('../../utils/awsmobilejs-path-manager.js')
// save project info from 
var _projectInfo = {};
 
var startQuestionary = () => new Promise(
  function (resolve, reject) {
    var currentDefinition = {
      'analytics': {
        enabled: false
      }
    };
 
    // Read current analytics configuration
    let backendProjectYamlFilePath = pathManager.getBackendSpecProjectYmlFilePath(_projectInfo.ProjectPath);
    let yamlDefinition = yamlOps.readYamlFileSync(backendProjectYamlFilePath);
 
    if (yamlDefinition['features'] && 
      yamlDefinition['features']['mobile-analytics'] &&
      yamlDefinition['features']['mobile-analytics']['components'] &&
      yamlDefinition['features']['mobile-analytics']['components']['analytics']) {
      currentDefinition['analytics']['enabled'] = true;
    }
    currentDefinition.yamlDefinition = yamlDefinition;
    resolve(currentDefinition);
 
  });
 
var askEnableAnalytics = (currentDefinition) => {
  let defaultMessage = 'Currently Amazon Pinpoint analytics is disabled, do you want to enable it?'
  if (currentDefinition['analytics'].enabled) {
    defaultMessage = 'Currently Amazon Pinpoint analytics is enabled, do you want to keep it enabled?'
  }
  var enableQuestion = {
    type: 'confirm',
    name: 'enableAnalytics',
    message: defaultMessage,
    default: true
  }
 
  return inquirer.prompt(enableQuestion).then(answers => {
    currentDefinition['analytics']['enabled'] = answers.enableAnalytics;
    return currentDefinition;
  });
}
 
var saveSettings = (currentDefinition) => {
 
  if (!currentDefinition['analytics']['enabled']) {
    //Remove analytics
    if (currentDefinition.yamlDefinition['features'] && 
      currentDefinition.yamlDefinition['features']['mobile-analytics'] &&
      currentDefinition.yamlDefinition['features']['mobile-analytics']['components']) {
      delete currentDefinition.yamlDefinition['features']['mobile-analytics']['components']['analytics'];
      // Check if there is nothing else enabled on mobile-analytics
      Eif (Object.keys(currentDefinition.yamlDefinition['features']['mobile-analytics']['components']).length === 0) {
        // remove mobile-analytics
        delete currentDefinition.yamlDefinition['features']['mobile-analytics'];
      }
    }
 
  } else {
    Iif (!currentDefinition.yamlDefinition['features']) {
      currentDefinition.yamlDefinition['features'] = {}
    }
    if (!currentDefinition.yamlDefinition['features']['mobile-analytics']) {
      // mobile-analytics not created
      currentDefinition.yamlDefinition['features']['mobile-analytics'] =
        new yamlSchema.dressObject({ components: {}, 'backend-class': 'Pinpoint' });
 
    }
    currentDefinition.yamlDefinition['features']['mobile-analytics']['components']['analytics'] =
      new yamlSchema.dressObject({'backend-class': 'PinpointAnalytics' });
  }
  let yaml = currentDefinition.yamlDefinition;
  let backendProjectYamlFilePath = pathManager.getBackendSpecProjectYmlFilePath(_projectInfo.ProjectPath);
  yamlOps.writeYamlFileSync(yaml, backendProjectYamlFilePath);
 
  return Promise.resolve(currentDefinition);
}
 
exports.specify = (projectInfo) => {
  _projectInfo = JSON.parse(JSON.stringify(projectInfo)); // clone projectInfo
  return new Promise(function (resolve, reject) {
    startQuestionary()
      .then(askEnableAnalytics)
      .then(saveSettings)
      .then(resolve)
      .catch(reject);
  });
}
 
exports.onFeatureTurnOn = function (projectInfo, cloudProjectSpec) {
  _projectInfo = JSON.parse(JSON.stringify(projectInfo)); // clone projectInfo  
}
 
exports.onFeatureTurnOff = function (projectInfo, cloudProjectSpec) {
  _projectInfo = JSON.parse(JSON.stringify(projectInfo)); // clone projectInfo
 
}