aboutsummaryrefslogblamecommitdiffstats
path: root/test/caldav/request/resources_test.js
blob: 19bebba72f657bf471972c525df56ac340b93877 (plain) (tree)








































































                                                         
                                    



















                                                        



                                      

                                                           

                                                




       
requireRequest();
testSupport.lib('request/propfind');
testSupport.lib('request/resources');
testSupport.helper('mock_request');

suite('caldav/resource_finder', function() {

  var Connection;
  var MockRequest;
  var MockPropfind;
  var Propfind;
  var Finder;
  var subject;
  var con;

  var url = 'http://google.com',
      subject;

  suiteSetup(function() {
    Connection = Caldav.require('connection');
    Finder = Caldav.require('request/resources');
    Propfind = Caldav.require('request/propfind');
    MockRequest = Caldav.require('support/mock_request');
  });

  suiteSetup(function() {
    MockPropfind = MockRequest.create(['prop']);
  });

  setup(function() {
    MockPropfind.reset();

    con = new Connection();
    subject = new Finder(con, {
      url: url,
      Propfind: MockPropfind
    });

  });

  test('initializer', function() {
    assert.equal(subject.url, url);
    assert.equal(subject.connection, con);
    assert.deepEqual(subject._resources, {});
    assert.instanceOf(subject, Propfind);
    assert.equal(subject.depth, 1);
  });

  test('#addResource', function() {
    var fn = function() {};

    subject.addResource('foo', fn);

    assert.equal(subject._resources['foo'], fn);
  });

  suite('#_processResult', function() {

    var Handler = function() {
      this.args = arguments;
    };

    function status(value, status) {
      if (typeof(status) === 'undefined') {
        status = '200';
      }

      return { value: value, status: status };
    }

    function resource(name, type) {
      return {
        name: status(name),
        resourcetype: status([type])
      };
    }

    setup(function() {
      subject.addResource('calendar', Handler);
    });

    test('handled & unhandled resource', function() {
      var result;
      var input = {
        'a': resource('1', 'calendar'),
        'b': resource('2', 'other')
      };

      subject.sax.root = { multistatus: input };
      subject._processResult(null, function(err, data) {
        result = data;
      });

      assert.ok(result.calendar['a']);

      var cal = result.calendar['a'];

      assert.instanceOf(cal, Handler);
      assert.equal(Object.keys(result.calendar).length, 1);

      assert.equal(cal.args[1].name.value, '1');
      assert.equal(cal.url, 'a');
    });

  });

});