diff options
| author | Jesse Morgan <jesse@jesterpm.net> | 2015-08-16 15:27:15 -0700 | 
|---|---|---|
| committer | Jesse Morgan <jesse@jesterpm.net> | 2015-08-16 15:27:15 -0700 | 
| commit | 686cdf055174044cbd037327418efbe91beb7131 (patch) | |
| tree | 3eba0c0fc0c260705e0b966c8c9c7a4a772a2f4d /test | |
| parent | 3c453d2056a067aebb60d13987b4a3a2ea4a9f86 (diff) | |
Adding more tests for PodcastView.
Diffstat (limited to 'test')
| -rw-r--r-- | test/PodcastView.js | 214 | 
1 files changed, 202 insertions, 12 deletions
| diff --git a/test/PodcastView.js b/test/PodcastView.js index b1ef22a..24acef2 100644 --- a/test/PodcastView.js +++ b/test/PodcastView.js @@ -4,22 +4,49 @@ var sinon = require('sinon');  var PodcastView; // Subject of the test -var dynamoStub = { -  getItem: sinon.stub() +var dynamoStub; +var s3Stub; + +var view456 = { +  feedId: '123', +  viewId: '456', +  name: 'Test View', +  template: 'Hello World' +}; + +var view789 = { +  feedId: '123', +  viewId: '789', +  name: 'Test View 2', +  template: 'Goodbye World'  }; +var episodes = [ +  { title: 'Episode 1' }, +  { title: 'Episode 2' }, +]; +  describe('PodcastView', function() {    before(function() { -    mockery.enable(); +    mockery.enable({warnOnUnregistered: false});    });    beforeEach(function() {      mockery.registerAllowable('underscore'); +      mockery.registerMock('dynamodb-doc', { DynamoDB: function() { return dynamoStub } }); -    mockery.registerAllowable('../lib/PodcastView', true); +    dynamoStub = { +      getItem: sinon.stub(), +      query: sinon.stub(), +    }; -    PodcastView = require('../lib/PodcastView'); +    mockery.registerMock('aws-sdk', { S3: function() { return s3Stub } }); +    s3Stub = { +      putObject: sinon.stub(), +    }; +    mockery.registerAllowable('../lib/PodcastView', true); +    PodcastView = require('../lib/PodcastView');    });    it('calls the callback with a view when findById is called with a valid viewId', function() { @@ -31,12 +58,7 @@ describe('PodcastView', function() {          Key: { feedId: '123', viewId: '456' }        })        .callsArgWith(1, null, { -        Item: { -          feedId: '123', -          viewId: '456', -          name: 'Test View', -          template: 'Hello World' -        } +        Item: view456        });      var callback = sinon.spy(); @@ -56,8 +78,176 @@ describe('PodcastView', function() {      assert.equal(view.template, 'Hello World');    }); -  after(function() { +  it('calls the callback with each view when forEachView is called', function() { +    // Setup stubs +    dynamoStub +      .query  +      .withArgs( +      { +        TableName: 'podcast-views', +        KeyConditionExpression: "feedId = :feedId", +        ExpressionAttributeValues: { +          ':feedId': '123' +        } +      }) +      .callsArgWith(1, null, { +        Items: [view456, view789] +      }); + +    var callback = sinon.spy(); + +    // Call findById +    PodcastView.forEachView('123', callback); + +    // Assertions +    assert(callback.calledTwice); + +    var error = callback.getCall(0).args[0]; +    var view = callback.getCall(0).args[1]; +    var last = callback.getCall(0).args[2]; +    assert.equal(error, null); +    assert.equal(view.feedId, '123'); +    assert.equal(view.viewId, '456'); +    assert.equal(view.name, 'Test View'); +    assert.equal(view.template, 'Hello World'); +    assert(!last); + +    var error = callback.getCall(1).args[0]; +    var view = callback.getCall(1).args[1]; +    var last = callback.getCall(1).args[2]; +    assert.equal(error, null); +    assert.equal(view.feedId, '123'); +    assert.equal(view.viewId, '789'); +    assert.equal(view.name, 'Test View 2'); +    assert.equal(view.template, 'Goodbye World'); +    assert(last); +  }); + +  it("calls the callback with each view when forEachView's query is truncated", function() { +    // Setup stubs +    dynamoStub +      .query  +      .withArgs( +      { +        TableName: 'podcast-views', +        KeyConditionExpression: "feedId = :feedId", +        ExpressionAttributeValues: { +          ':feedId': '123' +        } +      }) +      .callsArgWith(1, null, { +        Items: [view456], +        LastEvaluatedKey: { feedId: '123', viewId: '456' } +      }); +    dynamoStub +      .query  +      .withArgs( +      { +        TableName: 'podcast-views', +        KeyConditionExpression: "feedId = :feedId", +        ExpressionAttributeValues: { +          ':feedId': '123' +        }, +        ExclusiveStartKey: { feedId: '123', viewId: '456' }, +      }) +      .callsArgWith(1, null, { +        Items: [view789], +      }); + +    var callback = sinon.spy(); + +    // Call findById +    PodcastView.forEachView('123', callback); + +    // Assertions +    assert(callback.calledTwice); + +    var error = callback.getCall(0).args[0]; +    var view = callback.getCall(0).args[1]; +    var last = callback.getCall(0).args[2]; +    assert.equal(error, null); +    assert.equal(view.feedId, '123'); +    assert.equal(view.viewId, '456'); +    assert.equal(view.name, 'Test View'); +    assert.equal(view.template, 'Hello World'); +    assert(!last); + +    var error = callback.getCall(1).args[0]; +    var view = callback.getCall(1).args[1]; +    var last = callback.getCall(1).args[2]; +    assert.equal(error, null); +    assert.equal(view.feedId, '123'); +    assert.equal(view.viewId, '789'); +    assert.equal(view.name, 'Test View 2'); +    assert.equal(view.template, 'Goodbye World'); +    assert(last); +  }); + +  it('uploads an artifact when render is called', function() { +    // Setup the test. +    s3Stub.putObject.onFirstCall().callsArgWith(1, null); + +    var view = new PodcastView({ +      bucket: 'test-bucket', +      filenameTemplate: 'episodes.html', +      template: '<% _.each(episodes, function(episode) { %><h1><%= episode.title %></h1><% }); %>', +    }); + +    var callback = sinon.stub(); + +    // Render +    view.render(episodes, callback); + +    // Verify the correct artifact was rendered. +    assert(s3Stub.putObject.calledOnce); +    var params = s3Stub.putObject.getCall(0).args[0]; +    assert.equal(params.Bucket, 'test-bucket'); +    assert.equal(params.Key, 'episodes.html'); +    assert.equal(params.Body, '<h1>Episode 1</h1><h1>Episode 2</h1>'); + +    // Verify the callback was called. +    assert(callback.calledOnce); +  }); + +  it('uploads multiple artifacts when render is called and renderEach is true', function() { +    // Setup the test. +    s3Stub.putObject.onFirstCall().callsArgWith(1, null); +    s3Stub.putObject.onSecondCall().callsArgWith(1, null); + +    var view = new PodcastView({ +      bucket: 'test-bucket', +      filenameTemplate: '<%= episode.title.toLowerCase().replace(/[^\w ]+/g,'').replace(/ +/g,'-') %>.html', +      template: '<h1><%= episode.title %></h1>', +      renderEach: true, +    }); + +    var callback = sinon.stub(); + +    // Render +    view.render(episodes, callback); + +    // Verify the correct artifact was rendered. +    assert.equal(s3Stub.putObject.callCount, 2); + +    var params = s3Stub.putObject.getCall(0).args[0]; +    assert.equal(params.Bucket, 'test-bucket'); +    assert.equal(params.Key, 'episode-1.html'); +    assert.equal(params.Body, '<h1>Episode 1</h1>'); + +    var params = s3Stub.putObject.getCall(1).args[0]; +    assert.equal(params.Bucket, 'test-bucket'); +    assert.equal(params.Key, 'episode-2.html'); +    assert.equal(params.Body, '<h1>Episode 2</h1>'); + +    // Verify the callback was called. +    assert(callback.calledOnce); +  }); + +  afterEach(function() {      mockery.deregisterAll(); +  }), + +  after(function() {      mockery.disable();    });  }); | 
