Code coverage report for spec/generic/joins.spec.js

Statements: 100% (30 / 30)      Branches: 50% (1 / 2)      Functions: 100% (8 / 8)      Lines: 100% (29 / 29)      Ignored: none     

All files » spec/generic/ » joins.spec.js
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 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 1251   1 1   1 1           1                           1                                                     1 1     1 1     1 6         1 1 1     1   6         1 1       1             3         1     1     1     1   6     4       1                    
Eif (typeof(window) === 'undefined') var loki = require('../../src/lokijs.js');
 
describe('joins', function () {
  var db, directors, films;
 
  beforeEach(function () {
    db = new loki('testJoins', {
        persistenceMethod: null
      }),
      directors = db.addCollection('directors'),
      films = db.addCollection('films');
 
    directors.insert([{
      name: 'Martin Scorsese',
      directorId: 1
    }, {
      name: 'Francis Ford Coppola',
      directorId: 2
    }, {
      name: 'Steven Spielberg',
      directorId: 3
    }, {
      name: 'Quentin Tarantino',
      directorId: 4
    }]);
 
    films.insert([{
      title: 'Taxi',
      filmId: 1,
      directorId: 1
    }, {
      title: 'Raging Bull',
      filmId: 2,
      directorId: 1
    }, {
      title: 'The Godfather',
      filmId: 3,
      directorId: 2
    }, {
      title: 'Jaws',
      filmId: 4,
      directorId: 3
    }, {
      title: 'ET',
      filmId: 5,
      directorId: 3
    }, {
      title: 'Raiders of the Lost Ark',
      filmId: 6,
      directorId: 3
    }]);
  })
 
  it('works', function () {
    var joined;
 
    //Basic non-mapped join
    joined = films.eqJoin(directors.data, 'directorId', 'directorId').data();
    expect(joined[0].left.title).toEqual('Taxi');
 
    //Basic join with map
    joined = films.eqJoin(directors.data, 'directorId', 'directorId', function (left, right) {
      return {
        filmTitle: left.title,
        directorName: right.name
      }
    }).data();
    expect(joined.length).toEqual(films.data.length);
    expect(joined[0].filmTitle).toEqual('Taxi');
    expect(joined[0].directorName).toEqual('Martin Scorsese');
 
    //Basic non-mapped join with chained map
    joined = films.eqJoin(directors.data, 'directorId', 'directorId')
      .map(function (obj) {
        return {
          filmTitle: obj.left.title,
          directorName: obj.right.name
        }
      }).data();
    expect(joined[0].filmTitle).toEqual('Taxi');
    expect(joined[0].directorName).toEqual('Martin Scorsese');
 
 
    //Test filtered join
    joined = films
      .chain()
      .find({
        directorId: 3
      })
      .simplesort('title')
      .eqJoin(directors.data, 'directorId', 'directorId', function (left, right) {
        return {
          filmTitle: left.title,
          directorName: right.name
        }
      })
    expect(joined.data().length).toEqual(3);
 
    //Test chaining after join
    joined.find({
      filmTitle: 'Jaws'
    });
    expect(joined.data()[0].filmTitle).toEqual('Jaws');
 
    //Test calculated keys
    joined = films.chain().eqJoin(directors.data,
        function (director) {
          return director.directorId + 1
        },
        function (film) {
          return film.directorId - 1
        })
      .data();
 
    expect(joined[0].right.name).toEqual('Steven Spielberg');
  });
});
// var Loki = require('../src/lokijs.js'),
//   gordian = require('gordian'),
//   suite = new gordian('testJoins'),
 
 
 
// suite.report();