jsdav-ext
Version:
jsDAV allows you to easily add WebDAV support to a NodeJS application. jsDAV is meant to cover the entire standard, and attempts to allow integration using an easy to understand API.
117 lines (75 loc) • 3.55 kB
JavaScript
var assert = require('assert'),
fs = require('fs'),
path = require('path'),
xmldom = require('xmldom'),
parser = new xmldom.DOMParser(),
events = [],
queries = {},
queryRoot = path.join(__dirname, '../assets/caldav/calendar-queries'),
eventsRoot = path.join(__dirname, '../assets/caldav/calendar-items'),
reader = require('../../lib/VObject/reader').new(),
CalendarQueryParser = require('../../lib/CalDAV/calendarQueryParser'),
validator = require('../../lib/CalDAV/calendarQueryValidator').new(),
Xml = require("../../lib/shared/xml");
require('../../lib/CalDAV/plugin');
describe("Calendar queries", function(){
before(function() {
var list = fs.readdirSync(queryRoot);
list.forEach(function(q){
queries[path.basename(q, '.xml')] =
parser.parseFromString(fs.readFileSync(path.join(queryRoot, q), 'utf-8'));
});
list = fs.readdirSync(eventsRoot);
list.forEach(function(q){
events.push(reader.read(fs.readFileSync(path.join(eventsRoot, q), 'utf-8')));
});
Xml.xmlNamespaces[this.NS_CALDAV] = "cal";
Xml.xmlNamespaces[this.NS_CALENDARSERVER] = "cs";
Xml.xmlNamespaces['urn:DAV'] = 'dav';
});
describe("CalendarQueryParser", function() {
it("Can parse calendar-query XML documents", function(){
assert.equal(Object.keys(queries).length, 4);
Object.keys(queries).forEach(function(qN){
var cqParser = CalendarQueryParser.new(queries[qN].documentElement);
cqParser.parse();
assert('filters' in cqParser, 'Parser has filters');
assert(cqParser.filters, 'Filters is not empty');
});
});
});
describe("CalendarQueryValidator", function() {
it("CalDAV Spec 7.8.1. Example: Partial Retrieval of Events by Time Range", function(){
var cqParser = CalendarQueryParser.new(queries.eventsByRange);
cqParser.parse();
var filtered = events.filter(function(event){
return validator.validate(event, cqParser.filters);
});
assert.equal(filtered.length, 2);
});
it("CalDAV Spec 7.8.6. Example: Retrieval of Event by UID", function(){
var cqParser = CalendarQueryParser.new(queries.eventByUID);
cqParser.parse();
var filtered = events.filter(function(event){
return validator.validate(event, cqParser.filters);
});
assert.equal(filtered.length, 1);
});
it("CalDAV Spec 7.8.7. Example: Retrieval of Events by PARTSTAT", function(){
var cqParser = CalendarQueryParser.new(queries.eventsByPartstat);
cqParser.parse();
var filtered = events.filter(function(event){
return validator.validate(event, cqParser.filters);
});
assert.equal(filtered.length, 1);
});
it("CalDAV Spec 7.8.8. Example: Retrieval of Events Only", function(){
var cqParser = CalendarQueryParser.new(queries.eventsOnly);
cqParser.parse();
var filtered = events.filter(function(event){
return validator.validate(event, cqParser.filters);
});
assert.equal(filtered.length, 3);
})
});
});