Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
helper.js 9.32 KiB
"use strict";

require("./mocha-config");

var logger = require('./logger');

var Alias = require("../../main/js/map/data/Alias");
var AbstractCustomMap = require("../../main/js/map/AbstractCustomMap");
var ChemicalDbOverlay = require("../../main/js/map/overlay/ChemicalDbOverlay");
var Comment = require("../../main/js/map/data/Comment");
var CommentDbOverlay = require("../../main/js/map/overlay/CommentDbOverlay");
var CustomMap = require("../../main/js/map/CustomMap");
var CustomMapOptions = require("../../main/js/map/CustomMapOptions");
var DrugDbOverlay = require("../../main/js/map/overlay/DrugDbOverlay");
var IdentifiedElement = require("../../main/js/map/data/IdentifiedElement");
var LayoutAlias = require("../../main/js/map/data/LayoutAlias");
var LayoutData = require("../../main/js/map/data/LayoutData");
var LayoutReaction = require("../../main/js/map/data/LayoutReaction");
var MiRnaDbOverlay = require("../../main/js/map/overlay/MiRnaDbOverlay");
var Model = require("../../main/js/map/data/MapModel");
var AbstractDbOverlay = require("../../main/js/map/overlay/AbstractDbOverlay");
var Project = require("../../main/js/map/data/Project");
var Reaction = require("../../main/js/map/data/Reaction");
var SearchDbOverlay = require("../../main/js/map/overlay/SearchDbOverlay");
var User = require("../../main/js/map/data/User");

var Cookies = require('js-cookie');
var fs = require('fs');
var Promise = require('bluebird');

var GuiConnector = require('../../main/js/GuiConnector');

function Helper(configuration) {
  if (configuration === undefined) {
    throw new Error("Configuration must be defined");
  }
  this.setConfiguration(configuration);
  this.idCounter = 1000000;
}

Helper.prototype.setConfiguration = function (configuration) {
  this._configuration = configuration;
};
Helper.prototype.getConfiguration = function () {
  return this._configuration;
};

Helper.prototype.createCommentDbOverlay = function (map) {
  var result = new CommentDbOverlay({
    map: map,
    name: "comment",
    allowGeneralSearch: true
  });
  map.registerDbOverlay(result);
  return result;
};

Helper.prototype.createSearchDbOverlay = function (map) {
  var result = new SearchDbOverlay({
    map: map,
    name: "search",
  });
  map.registerDbOverlay(result);
  return result;
};

Helper.prototype.createDbOverlay = function (map) {
  var result = new AbstractDbOverlay({
    map: map,
    name: "search",
  });
  result.clear = function () {
    logger.debug("Clear mock");
  };
  map.registerDbOverlay(result);
  return result;
};

Helper.prototype.createDrugDbOverlay = function (map) {
  var result = new DrugDbOverlay({
    map: map,
    name: "drug",
    allowGeneralSearch: true,
    allowSearchById: true,
  });
  map.registerDbOverlay(result);
  return result;
};

Helper.prototype.createChemicalDbOverlay = function (map) {
  var result = new ChemicalDbOverlay({
    map: map,
    name: "chemical",
    allowGeneralSearch: true,
    allowSearchById: true,
  });
  map.registerDbOverlay(result);
  return result;
};

Helper.prototype.createMiRnaDbOverlay = function (map) {
  var result = new MiRnaDbOverlay({
    map: map,
    name: "mirna",
    allowGeneralSearch: true,
    allowSearchById: true,
  });
  map.registerDbOverlay(result);
  return result;
};

Helper.prototype.createComment = function (element) {
  var elementType = "ALIAS";
  var elementId = this.idCounter++;
  var id = this.idCounter++;
  var modelId = this.idCounter++;

  if (element !== undefined) {
    if (element instanceof Alias) {
      elementType = "ALIAS";
      elementId = element.getId();
      modelId = element.getModelId();
    } else {
      throw new Error("Unknown element type: " + element);
    }
  }

  var result = new Comment({
    elementId: elementId,
    type: elementType,
    modelId: modelId,
    icon: "icons/comment.png",
    id: id,
    pinned: true,
    coord: {
      x: 321.5,
      y: 289.0
    },
    removed: false,
    title: "title fo comment: " + id,
    content: "content of the comment # " + id
  });

  return result;
};

Helper.prototype.createProject = function () {
  var result = new Project();
  result.setProjectId("testId");
  result.setId(this.idCounter++);
  result.setModel(this.createModel());
  return result;
};

Helper.prototype.createUser = function () {
  var result = new User({
    login: "test_login",
    id: this.idCounter++,
    name: "some name",
    surname: "surname",
  });
  return result;
};

Helper.prototype.createAlias = function (map) {
  var mapId;
  if (map === undefined) {
    mapId = this.idCounter++;
  } else {
    mapId = map.getId();
  }
  var result = new Alias({
    idObject: this.idCounter++,
    name: "Test element",
    type: "RNA",
    modelId: mapId,
    bounds: {
      x: 10.0,
      y: 20.0,
      width: 30.0,
      height: 40.0,
    },
    references: [],
  });
  if (map !== undefined) {
    map.getModel().addAlias(result);
  }
  return result;
};

Helper.prototype.createLayoutAlias = function (alias) {
  var id;
  if (alias instanceof Alias) {
    id = alias.getId();
  } else {
    id = this.idCounter++;
  }
  var result = new LayoutAlias({
    idObject: id,
    value: 0.2,
    color: {
      a: 23
    },
    geneVariations: [{}]
  });
  return result;
};

Helper.prototype.createLayoutReaction = function (reaction) {
  var reactionId;
  if (reaction instanceof Reaction) {
    reactionId = reaction.getId();
  } else {
    reactionId = this.idCounter++;
  }

  var result = new LayoutReaction({
    idObject: reactionId,
    width: 3.4,
    color: {
      a: 24,
    },
    reverse: true
  });
  return result;
};

Helper.prototype.createIdentifiedElement = function (element) {
  if (element === undefined) {
    return new IdentifiedElement({
      type: "ALIAS",
      id: this.idCounter++,
      modelId: this.idCounter++,
    });
  }
  return new IdentifiedElement(element);
};

Helper.prototype.createReaction = function (map) {
  var mapId = null;
  if (map !== undefined) {
    mapId = map.getId();
  } else {
    mapId = this.idCounter++;
  }
  var result = new Reaction({
    idObject: this.idCounter++,
    lines: [{
      start: {
        x: 434.8904109589041,
        y: 85.0
      },
      end: {
        x: 410.8341500923087,
        y: 104.95576185524392
      },
      type: "START"
    }, {
      start: {
        x: 404.6769250286157,
        y: 110.06345991944379
      },
      end: {
        x: 380.62066416202026,
        y: 130.0192217746877
      },
      type: "END"
    }],
    centerPoint: new google.maps.Point(0, 0),
    modelId: mapId,
    references: [],
  });
  return result;
};

Helper.prototype.createOptions = function (project) {
  if (project === undefined) {
    project = this.createProject();
  }
  var options = {
    mapDiv: testDiv,
    element: testDiv,
    project: project,
  };
  return options;
};

Helper.prototype.createModel = function () {
  var result = new Model();
  result.setId(this.idCounter++);
  result.setTileSize(256);
  result.setWidth(26547.3333333333);
  result.setHeight(800);
  result.setMaxZoom(8);
  result.setMinZoom(2);
  result.setCenterLatLng({
    lat: 10,
    lng: 20
  });
  result.setTopLeftLatLng({
    lat: 8,
    lng: 8
  });
  result.setBottomRightLatLng({
    lat: 30,
    lng: 30
  });

  var layout = this.createLayout();
  result.addLayout(layout);
  return result;
};

Helper.prototype.createLayout = function () {
  var id = this.idCounter++;
  var layout = new LayoutData({
    idObject: id,
    name: "testLayout" + id,
  });
  return layout;
};

Helper.prototype.createGoogleMap = function () {
  var result = new google.maps.Map(testDiv, {
    center: {
      lat: -34.397,
      lng: 150.644
    },
    scrollwheel: false,
    zoom: 8
  });
  return result;
};

Helper.prototype.createCustomMapOptions = function (project) {
  if (project === undefined) {
    project = this.createProject();
  }

  var result = new CustomMapOptions({
    markerOptimization: true,
    project: project,
    element: testDiv,
    mapDiv: testDiv,
    configuration: this.getConfiguration(),
  });

  return result;
};

Helper.prototype.createAbstractCustomMap = function () {
  var options = this.createCustomMapOptions();
  var result = new AbstractCustomMap(options.getProject().getModel(), options);

  return result;
};

Helper.prototype.createCustomMap = function (project) {
  if (project === null) {
    throw new Error("Project cannot be null");
  }
  var options = this.createCustomMapOptions(project);
  var result = new CustomMap(options);
  return result;
};

/**
 * Changes url but saves the cookies.
 */
Helper.prototype.setUrl = function (url) {
  var cookies = Cookies.get();
  global.dom.reconfigure({
    url: url
  });
  for (var cookie in cookies) {
    Cookies.set(cookie, cookies[cookie]);
  }
  GuiConnector.init();
};

Helper.prototype.readFile = function (filename) {
  return new Promise(function (resolve, reject) {
    fs.readFile(filename, 'utf8', function (err, content) {
      if (err) {
        reject(err);
      } else {
        resolve(content);
      }
    });
  });
};

Helper.EPSILON = 1e-6;

module.exports = Helper;