Skip to content

Sergej-Popov/event-store-projection-testing

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Test utility for Event Store projections

Usage

Add utility to projection

var fromAll = fromAll || require('event-store-projection-testing').scope.fromAll;
var emit = emit || require('event-store-projection-testing').scope.emit;

fromAll()
  .when({...});

sample projection

Start testing

require('chai').should();
var projection = require('event-store-projection-testing');
require('./projection');

describe('Projection tests', function () {
  beforeEach(function () {
    projection.initialize();
  });

  it('should increment balance on cashDeposited event when initial balance is set', function () {
    projection.setState({ balance: 10 });
    projection.processEvent('stream-123', 'cashDeposited', { deposit: 10 });
    projection.getState().balance.should.equal(20);
  });

  it('should increment balance on cashDeposited event without initial balance', function () {
    projection.processEvent('stream-123', 'cashDeposited', { deposit: 10 });
    projection.getState().balance.should.equal(10);
  });

  it('should not increment balance on unregistered event', function () {
    projection.processEvent('stream-123', 'NON_EXISTING_EVENT_TYPE', { deposit: 10 });
    projection.getState().balance.should.equal(0);
  });

  it('should increment counter for every event', function () {
    projection.processEvent('stream-123', 'cashDeposited', { deposit: 10 });
    projection.processEvent('stream-123', 'NON_EXISTING_EVENT_TYPE', { deposit: 10 });
    projection.getState().counter.should.equal(2);
  });

  it('should remember last correlationId from metadata', function () {
    expect(projection.getState().lastCorrelationId).to.be.null;
    projection.processEvent('stream-123', 'cashDeposited', { deposit: 10 }, { correlationId: 1 });
    projection.getState().lastCorrelationId.should.equal(1);
    projection.processEvent('stream-456', 'cashDeposited', { deposit: 20 }, { correlationId: 2 });
    projection.getState().lastCorrelationId.should.equal(2);
  });

  it('should re-emit all cashDeposited events', function () {
    projection.processEvent('stream-123', 'cashDeposited', { deposit: 10 });
    projection.processEvent('stream-123', 'cashDeposited', { deposit: 10 });
    projection.processEvent('stream-123', 'cashDeposited', { deposit: 10 });
    projection.emittedEvents.should.have.length(3);
  });

  it('should transformBy', function () {
    projection.processEvent('stream-123', 'cashDeposited', { deposit: 10 });
    projection.getState().balance.should.equal(10);
    projection.getTransform().transformed.should.true;
  });

});

About

Test utility for Event Store projections

Resources

Stars

Watchers

Forks

Packages

No packages published