mirror of
https://github.com/LightAir/turbo-rss.git
synced 2025-12-17 14:27:53 +00:00
rebuilt tests using tape, prova.
This commit is contained in:
parent
95de8eb395
commit
d0935730b8
4
.npmignore
Normal file
4
.npmignore
Normal file
@ -0,0 +1,4 @@
|
||||
/test/
|
||||
/.idea/
|
||||
/templates/
|
||||
*.log
|
||||
19
Gruntfile.js
19
Gruntfile.js
@ -15,15 +15,6 @@ module.exports = function(grunt) {
|
||||
require('time-grunt')(grunt);
|
||||
|
||||
grunt.initConfig({
|
||||
mochaTest: {
|
||||
notify: {
|
||||
src: 'test/**/*.test.js',
|
||||
options: {
|
||||
reporter: 'spec'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
jshint: {
|
||||
options: {
|
||||
jshintrc: '.jshintrc'
|
||||
@ -39,17 +30,17 @@ module.exports = function(grunt) {
|
||||
|
||||
require('load-grunt-tasks')(grunt);
|
||||
|
||||
grunt.registerTask('test', [
|
||||
'jshint',
|
||||
'mochaTest'
|
||||
grunt.registerTask('lint', [
|
||||
'jshint'
|
||||
]);
|
||||
|
||||
grunt.registerTask('default', [
|
||||
'test'
|
||||
'lint'
|
||||
]);
|
||||
|
||||
grunt.registerTask('pre-publish', [
|
||||
'test',
|
||||
'lint',
|
||||
'repos',
|
||||
'readme'
|
||||
]);
|
||||
};
|
||||
|
||||
@ -1,8 +1,9 @@
|
||||
'use strict';
|
||||
|
||||
var xml = require('xml'),
|
||||
mime = require('mime'),
|
||||
fs = require('fs');
|
||||
var mime = require('mime-types');
|
||||
var xml = require('xml');
|
||||
var fs = require('fs');
|
||||
|
||||
|
||||
function ifTruePush(bool, array, data) {
|
||||
if (bool) {
|
||||
@ -20,6 +21,13 @@ function ifTruePushArray(bool, array, dataArray) {
|
||||
});
|
||||
}
|
||||
|
||||
function getSize(filename) {
|
||||
if (typeof fs === 'undefined') {
|
||||
return 0;
|
||||
}
|
||||
return fs.statSync(filename).size;
|
||||
}
|
||||
|
||||
function generateXML (data){
|
||||
|
||||
var channel = [];
|
||||
@ -31,7 +39,7 @@ function generateXML (data){
|
||||
channel.push({ image: [ {url: data.image_url}, {title: data.title}, {link: data.site_url} ] });
|
||||
}
|
||||
channel.push({ generator: data.generator });
|
||||
channel.push({ lastBuildDate: new Date().toGMTString() });
|
||||
channel.push({ lastBuildDate: new Date().toUTCString() });
|
||||
|
||||
ifTruePush(data.feed_url, channel, { 'atom:link': { _attr: { href: data.feed_url, rel: 'self', type: 'application/rss+xml' } } });
|
||||
ifTruePush(data.author, channel, { 'author': { _cdata: data.author } });
|
||||
@ -72,13 +80,13 @@ function generateXML (data){
|
||||
ifTruePush(item.lat, item_values, {'geo:lat': item.lat});
|
||||
ifTruePush(item.long, item_values, {'geo:long': item.long});
|
||||
|
||||
if( item.enclosure && item.enclosure.url ) {
|
||||
if( item.enclosure && item.enclosure.url) {
|
||||
if( item.enclosure.file ) {
|
||||
item_values.push({
|
||||
enclosure : {
|
||||
_attr : {
|
||||
url : item.enclosure.url,
|
||||
length : fs.statSync(item.enclosure.file).size,
|
||||
length : item.enclosure.size || getSize(item.enclosure.file),
|
||||
type : mime.lookup(item.enclosure.file)
|
||||
}
|
||||
}
|
||||
35
package.json
35
package.json
@ -12,9 +12,11 @@
|
||||
"feed builder",
|
||||
"rss feed"
|
||||
],
|
||||
"main": "lib/rss.js",
|
||||
"main": "lib/index",
|
||||
"scripts": {
|
||||
"test": "grunt test"
|
||||
"test": "tape test",
|
||||
"lint": "jshint",
|
||||
"test:browser": "prova -b"
|
||||
},
|
||||
"homepage": "http://github.com/dylang/node-rss",
|
||||
"author": {
|
||||
@ -39,22 +41,43 @@
|
||||
"bugs": {
|
||||
"url": "http://github.com/dylang/node-rss/issues"
|
||||
},
|
||||
"testling": {
|
||||
"files": "test/*.js",
|
||||
"browsers": [
|
||||
"ie/9..latest",
|
||||
"chrome/latest",
|
||||
"firefox/latest",
|
||||
"safari/latest",
|
||||
"opera/latest",
|
||||
"iphone/latest",
|
||||
"ipad/latest",
|
||||
"android-browser/latest"
|
||||
]
|
||||
},
|
||||
"dependencies": {
|
||||
"mime": "^1.2.11",
|
||||
"folderify": "^0.6.0",
|
||||
"mime-types": "^2.0.3",
|
||||
"xml": "^1.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"chai": "^1.9.1",
|
||||
"folderify": "^0.6.0",
|
||||
"grunt": "^0.4.5",
|
||||
"grunt-contrib-jshint": "^0.10.0",
|
||||
"grunt-mocha-test": "^0.12.1",
|
||||
"grunt-release": "^0.9.0",
|
||||
"grunt-templates-dylang": "^1.0.0",
|
||||
"include-folder": "^0.7.0",
|
||||
"load-grunt-tasks": "^1.0.0",
|
||||
"mocha": "^2.0.1",
|
||||
"mockdate": "^1.0.0",
|
||||
"prova": "^2.0.3",
|
||||
"q": "^1.0.0",
|
||||
"tape": "^3.0.3",
|
||||
"time-grunt": "^1.0.0",
|
||||
"xml2js": "^0.4.1"
|
||||
},
|
||||
"browserify": {
|
||||
"transform": [
|
||||
"folderify"
|
||||
]
|
||||
},
|
||||
"licenses": "MIT"
|
||||
}
|
||||
|
||||
10
readme.md
10
readme.md
@ -70,13 +70,15 @@ feed.item(itemOptions);
|
||||
##### Feed XML
|
||||
|
||||
```js
|
||||
var xml = feed.xml(indent);
|
||||
var xml = feed.xml({indent: true});
|
||||
```
|
||||
|
||||
This returns the XML as a string.
|
||||
|
||||
`indent` _optional_ **string** What to use as a tab. Defaults to no tabs (compressed).
|
||||
For example you can use `'\t'` for tab character, or `' '` for two-space tabs.
|
||||
`indent` _optional_ **boolean or string** What to use as a tab. Defaults to no tabs (compressed).
|
||||
For example you can use `'\t'` for tab character, or `' '` for two-space tabs. If you set it to
|
||||
`true` it will use four spaces.
|
||||
|
||||
|
||||
|
||||
### Example Usage
|
||||
@ -215,5 +217,5 @@ Released under the [MIT license](https://tldrlegal.com/license/mit-license).
|
||||
Screenshots are [CC BY-SA](http://creativecommons.org/licenses/by-sa/4.0/) (Attribution-ShareAlike).
|
||||
|
||||
***
|
||||
_Generated using [grunt-readme](https://github.com/assemble/grunt-readme) with [grunt-templates-dylang](https://github.com/dylang/grunt-templates-dylang) on Monday, December 8, 2014._
|
||||
_Generated using [grunt-readme](https://github.com/assemble/grunt-readme) with [grunt-templates-dylang](https://github.com/dylang/grunt-templates-dylang) on Friday, December 19, 2014._
|
||||
|
||||
|
||||
@ -59,10 +59,11 @@ feed.item(itemOptions);
|
||||
#### Feed XML
|
||||
|
||||
```js
|
||||
var xml = feed.xml(indent);
|
||||
var xml = feed.xml({indent: true});
|
||||
```
|
||||
|
||||
This returns the XML as a string.
|
||||
|
||||
`indent` _optional_ **string** What to use as a tab. Defaults to no tabs (compressed).
|
||||
For example you can use `'\t'` for tab character, or `' '` for two-space tabs.
|
||||
`indent` _optional_ **boolean or string** What to use as a tab. Defaults to no tabs (compressed).
|
||||
For example you can use `'\t'` for tab character, or `' '` for two-space tabs. If you set it to
|
||||
`true` it will use four spaces.
|
||||
|
||||
38
test/expectedOutput/customElements.xml
Normal file
38
test/expectedOutput/customElements.xml
Normal file
@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
|
||||
<channel>
|
||||
<title><![CDATA[title]]></title>
|
||||
<description><![CDATA[description]]></description>
|
||||
<link>http://example.com</link>
|
||||
<generator>RSS for Node</generator>
|
||||
<lastBuildDate>Wed, 10 Dec 2014 19:04:57 GMT</lastBuildDate>
|
||||
<atom:link href="http://example.com/rss.xml" rel="self" type="application/rss+xml"/>
|
||||
<author><![CDATA[Dylan Greene]]></author>
|
||||
<pubDate>Sun, 20 May 2012 04:00:00 GMT</pubDate>
|
||||
<language><![CDATA[en]]></language>
|
||||
<ttl>60</ttl>
|
||||
<itunes:subtitle>A show about everything</itunes:subtitle>
|
||||
<itunes:author>John Doe</itunes:author>
|
||||
<itunes:summary>All About Everything is a show about everything. Each week we dive into any subject known to man and talk about it as much as we can. Look for our podcast in the Podcasts app or in the iTunes Store</itunes:summary>
|
||||
<itunes:owner>
|
||||
<itunes:name>John Doe</itunes:name>
|
||||
<itunes:email>john.doe@example.com</itunes:email>
|
||||
</itunes:owner>
|
||||
<itunes:image href="http://example.com/podcasts/everything/AllAboutEverything.jpg"/>
|
||||
<itunes:category text="Technology">
|
||||
<itunes:category text="Gadgets"/>
|
||||
</itunes:category>
|
||||
<item>
|
||||
<title><![CDATA[item 1]]></title>
|
||||
<description><![CDATA[description 1]]></description>
|
||||
<link>http://example.com/article1</link>
|
||||
<guid isPermaLink="true">http://example.com/article1</guid>
|
||||
<dc:creator><![CDATA[Dylan Greene]]></dc:creator>
|
||||
<pubDate>Thu, 24 May 2012 04:00:00 GMT</pubDate>
|
||||
<itunes:author>John Doe</itunes:author>
|
||||
<itunes:subtitle>A short primer on table spices</itunes:subtitle>
|
||||
<itunes:image href="http://example.com/podcasts/everything/AllAboutEverything/Episode1.jpg"/>
|
||||
<itunes:duration>7:04</itunes:duration>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
38
test/expectedOutput/customNamespaces.xml
Normal file
38
test/expectedOutput/customNamespaces.xml
Normal file
@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">
|
||||
<channel>
|
||||
<title><![CDATA[title]]></title>
|
||||
<description><![CDATA[description]]></description>
|
||||
<link>http://example.com</link>
|
||||
<generator>RSS for Node</generator>
|
||||
<lastBuildDate>Wed, 10 Dec 2014 19:04:57 GMT</lastBuildDate>
|
||||
<atom:link href="http://example.com/rss.xml" rel="self" type="application/rss+xml"/>
|
||||
<author><![CDATA[Dylan Greene]]></author>
|
||||
<pubDate>Sun, 20 May 2012 04:00:00 GMT</pubDate>
|
||||
<language><![CDATA[en]]></language>
|
||||
<ttl>60</ttl>
|
||||
<itunes:subtitle>A show about everything</itunes:subtitle>
|
||||
<itunes:author>John Doe</itunes:author>
|
||||
<itunes:summary>All About Everything is a show about everything. Each week we dive into any subject known to man and talk about it as much as we can. Look for our podcast in the Podcasts app or in the iTunes Store</itunes:summary>
|
||||
<itunes:owner>
|
||||
<itunes:name>John Doe</itunes:name>
|
||||
<itunes:email>john.doe@example.com</itunes:email>
|
||||
</itunes:owner>
|
||||
<itunes:image href="http://example.com/podcasts/everything/AllAboutEverything.jpg"/>
|
||||
<itunes:category text="Technology">
|
||||
<itunes:category text="Gadgets"/>
|
||||
</itunes:category>
|
||||
<item>
|
||||
<title><![CDATA[item 1]]></title>
|
||||
<description><![CDATA[description 1]]></description>
|
||||
<link>http://example.com/article1</link>
|
||||
<guid isPermaLink="true">http://example.com/article1</guid>
|
||||
<dc:creator><![CDATA[Dylan Greene]]></dc:creator>
|
||||
<pubDate>Thu, 24 May 2012 04:00:00 GMT</pubDate>
|
||||
<itunes:author>John Doe</itunes:author>
|
||||
<itunes:subtitle>A short primer on table spices</itunes:subtitle>
|
||||
<itunes:image href="http://example.com/podcasts/everything/AllAboutEverything/Episode1.jpg"/>
|
||||
<itunes:duration>7:04</itunes:duration>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
2
test/expectedOutput/default.xml
Normal file
2
test/expectedOutput/default.xml
Normal file
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Untitled RSS Feed]]></title><description><![CDATA[Untitled RSS Feed]]></description><link>http://github.com/dylang/node-rss</link><generator>RSS for Node</generator><lastBuildDate>Wed, 10 Dec 2014 19:04:57 GMT</lastBuildDate></channel></rss>
|
||||
2
test/expectedOutput/defaultOneItem.xml
Normal file
2
test/expectedOutput/defaultOneItem.xml
Normal file
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Untitled RSS Feed]]></title><description><![CDATA[Untitled RSS Feed]]></description><link>http://github.com/dylang/node-rss</link><generator>RSS for Node</generator><lastBuildDate>Wed, 10 Dec 2014 19:04:57 GMT</lastBuildDate><item><title><![CDATA[No title]]></title><guid isPermaLink="false">No title</guid></item></channel></rss>
|
||||
38
test/expectedOutput/enclosures.xml
Normal file
38
test/expectedOutput/enclosures.xml
Normal file
@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
|
||||
<channel>
|
||||
<title><![CDATA[title]]></title>
|
||||
<description><![CDATA[description]]></description>
|
||||
<link>http://example.com</link>
|
||||
<generator>RSS for Node</generator>
|
||||
<lastBuildDate>Wed, 10 Dec 2014 19:04:57 GMT</lastBuildDate>
|
||||
<atom:link href="http://example.com/rss.xml" rel="self" type="application/rss+xml"/>
|
||||
<author><![CDATA[Dylan Greene]]></author>
|
||||
<item>
|
||||
<title><![CDATA[item 1]]></title>
|
||||
<description><![CDATA[description 1]]></description>
|
||||
<link>http://example.com/article1</link>
|
||||
<guid isPermaLink="true">http://example.com/article1</guid>
|
||||
<dc:creator><![CDATA[Dylan Greene]]></dc:creator>
|
||||
<pubDate>Thu, 24 May 2012 04:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[item 2]]></title>
|
||||
<description><![CDATA[description 2]]></description>
|
||||
<link>http://example.com/article1</link>
|
||||
<guid isPermaLink="true">http://example.com/article1</guid>
|
||||
<dc:creator><![CDATA[Dylan Greene]]></dc:creator>
|
||||
<pubDate>Thu, 24 May 2012 04:00:00 GMT</pubDate>
|
||||
<enclosure url="/media/some-file.flv" length="0" type="video/x-flv"/>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[item 3]]></title>
|
||||
<description><![CDATA[description 3]]></description>
|
||||
<link>http://example.com/article1</link>
|
||||
<guid isPermaLink="true">http://example.com/article1</guid>
|
||||
<dc:creator><![CDATA[Dylan Greene]]></dc:creator>
|
||||
<pubDate>Thu, 24 May 2012 04:00:00 GMT</pubDate>
|
||||
<enclosure url="/media/image.png" length="16650" type="image/png"/>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
30
test/expectedOutput/latLong.xml
Normal file
30
test/expectedOutput/latLong.xml
Normal file
@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
|
||||
<channel>
|
||||
<title><![CDATA[title]]></title>
|
||||
<description><![CDATA[description]]></description>
|
||||
<link>http://example.com</link>
|
||||
<generator>RSS for Node</generator>
|
||||
<lastBuildDate>Wed, 10 Dec 2014 19:04:57 GMT</lastBuildDate>
|
||||
<atom:link href="http://example.com/rss.xml" rel="self" type="application/rss+xml"/>
|
||||
<author><![CDATA[Dylan Greene]]></author>
|
||||
<item>
|
||||
<title><![CDATA[item 1]]></title>
|
||||
<description><![CDATA[description 1]]></description>
|
||||
<link>http://example.com/article1</link>
|
||||
<guid isPermaLink="true">http://example.com/article1</guid>
|
||||
<dc:creator><![CDATA[Dylan Greene]]></dc:creator>
|
||||
<pubDate>Thu, 24 May 2012 04:00:00 GMT</pubDate>
|
||||
<geo:lat>12232</geo:lat>
|
||||
<geo:long>13333.23323</geo:long>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[item 2]]></title>
|
||||
<description><![CDATA[description 2]]></description>
|
||||
<link>http://example.com/article1</link>
|
||||
<guid isPermaLink="true">http://example.com/article1</guid>
|
||||
<dc:creator><![CDATA[Dylan Greene]]></dc:creator>
|
||||
<pubDate>Thu, 24 May 2012 04:00:00 GMT</pubDate>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
12
test/expectedOutput/pubSubHubbub.xml
Normal file
12
test/expectedOutput/pubSubHubbub.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
|
||||
<channel>
|
||||
<title><![CDATA[title]]></title>
|
||||
<description><![CDATA[description]]></description>
|
||||
<link>http://example.com</link>
|
||||
<generator>RSS for Node</generator>
|
||||
<lastBuildDate>Wed, 10 Dec 2014 19:04:57 GMT</lastBuildDate>
|
||||
<atom:link href="http://example.com/rss.xml" rel="self" type="application/rss+xml"/>
|
||||
<atom:link href="http://example.com/hub" rel="hub"/>
|
||||
</channel>
|
||||
</rss>
|
||||
2
test/expectedOutput/simpleFeed.xml
Normal file
2
test/expectedOutput/simpleFeed.xml
Normal file
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[title]]></title><description><![CDATA[description]]></description><link>http://example.com</link><image><url>http://example.com/icon.png</url><title>title</title><link>http://example.com</link></image><generator>Example Generator</generator><lastBuildDate>Wed, 10 Dec 2014 19:04:57 GMT</lastBuildDate><atom:link href="http://example.com/rss.xml" rel="self" type="application/rss+xml"/><author><![CDATA[Dylan Greene]]></author><pubDate>Sun, 20 May 2012 04:00:00 GMT</pubDate><copyright><![CDATA[2013 Dylan Green]]></copyright><language><![CDATA[en]]></language><managingEditor><![CDATA[Dylan Green]]></managingEditor><webMaster><![CDATA[Dylan Green]]></webMaster><docs>http://example.com/rss/docs.html</docs><ttl>60</ttl><category><![CDATA[Category 1]]></category><category><![CDATA[Category 2]]></category><category><![CDATA[Category 3]]></category><item><title><![CDATA[item 1]]></title><description><![CDATA[description 1]]></description><link>http://example.com/article1</link><guid isPermaLink="true">http://example.com/article1</guid><dc:creator><![CDATA[Dylan Greene]]></dc:creator><pubDate>Thu, 24 May 2012 04:00:00 GMT</pubDate></item><item><title><![CDATA[item 2]]></title><description><![CDATA[description 2]]></description><link>http://example.com/article2</link><guid isPermaLink="true">http://example.com/article2</guid><dc:creator><![CDATA[Dylan Greene]]></dc:creator><pubDate>Fri, 25 May 2012 04:00:00 GMT</pubDate></item><item><title><![CDATA[item 3]]></title><description><![CDATA[description 3]]></description><link>http://example.com/article3</link><guid isPermaLink="false">item3</guid><dc:creator><![CDATA[Dylan Greene]]></dc:creator><pubDate>Sat, 26 May 2012 04:00:00 GMT</pubDate></item><item><title><![CDATA[item 4 & html test with <strong>]]></title><description><![CDATA[description 4 uses some <strong>html</strong>]]></description><link>http://example.com/article4?this&that</link><guid isPermaLink="true">http://example.com/article4?this&that</guid><dc:creator><![CDATA[Guest Author]]></dc:creator><pubDate>Sun, 27 May 2012 04:00:00 GMT</pubDate></item><item><title><![CDATA[item 5 & test for categories]]></title><description><![CDATA[description 5]]></description><link>http://example.com/article5</link><guid isPermaLink="true">http://example.com/article5</guid><category><![CDATA[Category 1]]></category><category><![CDATA[Category 2]]></category><category><![CDATA[Category 3]]></category><category><![CDATA[Category 4]]></category><dc:creator><![CDATA[Guest Author]]></dc:creator><pubDate>Mon, 28 May 2012 04:00:00 GMT</pubDate></item></channel></rss>
|
||||
71
test/expectedOutput/simpleFeedFormated.xml
Normal file
71
test/expectedOutput/simpleFeedFormated.xml
Normal file
@ -0,0 +1,71 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
|
||||
<channel>
|
||||
<title><![CDATA[title]]></title>
|
||||
<description><![CDATA[description]]></description>
|
||||
<link>http://example.com</link>
|
||||
<image>
|
||||
<url>http://example.com/icon.png</url>
|
||||
<title>title</title>
|
||||
<link>http://example.com</link>
|
||||
</image>
|
||||
<generator>Example Generator</generator>
|
||||
<lastBuildDate>Wed, 10 Dec 2014 19:04:57 GMT</lastBuildDate>
|
||||
<atom:link href="http://example.com/rss.xml" rel="self" type="application/rss+xml"/>
|
||||
<author><![CDATA[Dylan Greene]]></author>
|
||||
<pubDate>Sun, 20 May 2012 04:00:00 GMT</pubDate>
|
||||
<copyright><![CDATA[2013 Dylan Green]]></copyright>
|
||||
<language><![CDATA[en]]></language>
|
||||
<managingEditor><![CDATA[Dylan Green]]></managingEditor>
|
||||
<webMaster><![CDATA[Dylan Green]]></webMaster>
|
||||
<docs>http://example.com/rss/docs.html</docs>
|
||||
<ttl>60</ttl>
|
||||
<category><![CDATA[Category 1]]></category>
|
||||
<category><![CDATA[Category 2]]></category>
|
||||
<category><![CDATA[Category 3]]></category>
|
||||
<item>
|
||||
<title><![CDATA[item 1]]></title>
|
||||
<description><![CDATA[description 1]]></description>
|
||||
<link>http://example.com/article1</link>
|
||||
<guid isPermaLink="true">http://example.com/article1</guid>
|
||||
<dc:creator><![CDATA[Dylan Greene]]></dc:creator>
|
||||
<pubDate>Thu, 24 May 2012 04:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[item 2]]></title>
|
||||
<description><![CDATA[description 2]]></description>
|
||||
<link>http://example.com/article2</link>
|
||||
<guid isPermaLink="true">http://example.com/article2</guid>
|
||||
<dc:creator><![CDATA[Dylan Greene]]></dc:creator>
|
||||
<pubDate>Fri, 25 May 2012 04:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[item 3]]></title>
|
||||
<description><![CDATA[description 3]]></description>
|
||||
<link>http://example.com/article3</link>
|
||||
<guid isPermaLink="false">item3</guid>
|
||||
<dc:creator><![CDATA[Dylan Greene]]></dc:creator>
|
||||
<pubDate>Sat, 26 May 2012 04:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[item 4 & html test with <strong>]]></title>
|
||||
<description><![CDATA[description 4 uses some <strong>html</strong>]]></description>
|
||||
<link>http://example.com/article4?this&that</link>
|
||||
<guid isPermaLink="true">http://example.com/article4?this&that</guid>
|
||||
<dc:creator><![CDATA[Guest Author]]></dc:creator>
|
||||
<pubDate>Sun, 27 May 2012 04:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[item 5 & test for categories]]></title>
|
||||
<description><![CDATA[description 5]]></description>
|
||||
<link>http://example.com/article5</link>
|
||||
<guid isPermaLink="true">http://example.com/article5</guid>
|
||||
<category><![CDATA[Category 1]]></category>
|
||||
<category><![CDATA[Category 2]]></category>
|
||||
<category><![CDATA[Category 3]]></category>
|
||||
<category><![CDATA[Category 4]]></category>
|
||||
<dc:creator><![CDATA[Guest Author]]></dc:creator>
|
||||
<pubDate>Mon, 28 May 2012 04:00:00 GMT</pubDate>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
302
test/index.js
Normal file
302
test/index.js
Normal file
@ -0,0 +1,302 @@
|
||||
// prova is a wrapper for tape
|
||||
// use npm run test:browser to run tests in a browser
|
||||
var test = require('prova');
|
||||
|
||||
var RSS = require('..');
|
||||
var xml2js = require('xml2js');
|
||||
var q = require('q');
|
||||
|
||||
var includeFolder = require('include-folder');
|
||||
var expectedOutput = includeFolder(__dirname + '/expectedOutput', /.*\.xml$/);
|
||||
|
||||
// Dates in XML files will always be this value.
|
||||
require('mockdate').set('Wed, 10 Dec 2014 19:04:57 GMT');
|
||||
|
||||
test('empty feed', function(t) {
|
||||
t.plan(2);
|
||||
var feed = new RSS();
|
||||
t.equal(feed.xml(), expectedOutput.default);
|
||||
feed.item();
|
||||
t.equal(feed.xml(), expectedOutput.defaultOneItem);
|
||||
});
|
||||
|
||||
test('indentation', function(t) {
|
||||
t.plan(4);
|
||||
var feed = new RSS({
|
||||
title: 'title',
|
||||
description: 'description',
|
||||
generator: 'Example Generator',
|
||||
feed_url: 'http://example.com/rss.xml',
|
||||
site_url: 'http://example.com',
|
||||
image_url: 'http://example.com/icon.png',
|
||||
author: 'Dylan Greene',
|
||||
categories: ['Category 1','Category 2','Category 3'],
|
||||
pubDate: 'May 20, 2012 04:00:00 GMT',
|
||||
docs: 'http://example.com/rss/docs.html',
|
||||
copyright: '2013 Dylan Green',
|
||||
language: 'en',
|
||||
managingEditor: 'Dylan Green',
|
||||
webMaster: 'Dylan Green',
|
||||
ttl: '60'
|
||||
});
|
||||
|
||||
feed.item({
|
||||
title: 'item 1',
|
||||
description: 'description 1',
|
||||
url: 'http://example.com/article1',
|
||||
date: 'May 24, 2012 04:00:00 GMT'
|
||||
})
|
||||
.item({
|
||||
title: 'item 2',
|
||||
description: 'description 2',
|
||||
url: 'http://example.com/article2',
|
||||
date: 'May 25, 2012 04:00:00 GMT'
|
||||
})
|
||||
.item({
|
||||
title: 'item 3',
|
||||
description: 'description 3',
|
||||
url: 'http://example.com/article3',
|
||||
guid: 'item3',
|
||||
date: 'May 26, 2012 04:00:00 GMT'
|
||||
})
|
||||
.item({
|
||||
title: 'item 4 & html test with <strong>',
|
||||
description: 'description 4 uses some <strong>html</strong>',
|
||||
url: 'http://example.com/article4?this&that',
|
||||
author: 'Guest Author',
|
||||
date: 'May 27, 2012 04:00:00 GMT'
|
||||
})
|
||||
.item({
|
||||
title: 'item 5 & test for categories',
|
||||
description: 'description 5',
|
||||
url: 'http://example.com/article5',
|
||||
categories: ['Category 1','Category 2','Category 3','Category 4'],
|
||||
author: 'Guest Author',
|
||||
date: 'May 28, 2012 04:00:00 GMT'
|
||||
});
|
||||
|
||||
var qParseXml = q.nbind(xml2js.parseString, xml2js);
|
||||
|
||||
var xmlWithoutIndents = feed.xml({indent: false});
|
||||
var xmlWithIndents = feed.xml({indent: true});
|
||||
|
||||
t.notEqual(xmlWithoutIndents, xmlWithIndents);
|
||||
t.equal(xmlWithoutIndents, expectedOutput.simpleFeed);
|
||||
t.equal(xmlWithIndents, expectedOutput.simpleFeedFormated);
|
||||
|
||||
q.all([
|
||||
qParseXml(xmlWithoutIndents),
|
||||
qParseXml(xmlWithIndents)
|
||||
])
|
||||
.spread(function (fromWithoutIndents, fromWithIndents){
|
||||
t.deepEqual(JSON.stringify(fromWithoutIndents), JSON.stringify(fromWithIndents));
|
||||
});
|
||||
});
|
||||
|
||||
test('enclosure', function(t) {
|
||||
//if (typeof window) return;
|
||||
|
||||
t.plan(1);
|
||||
|
||||
var feed = new RSS({
|
||||
title: 'title',
|
||||
description: 'description',
|
||||
feed_url: 'http://example.com/rss.xml',
|
||||
site_url: 'http://example.com',
|
||||
author: 'Dylan Greene'
|
||||
});
|
||||
|
||||
feed.item({
|
||||
title: 'item 1',
|
||||
description: 'description 1',
|
||||
url: 'http://example.com/article1',
|
||||
date: 'May 24, 2012 04:00:00 GMT',
|
||||
enclosure : 'incorrect value'
|
||||
});
|
||||
|
||||
feed.item({
|
||||
title: 'item 2',
|
||||
description: 'description 2',
|
||||
url: 'http://example.com/article1',
|
||||
date: 'May 24, 2012 04:00:00 GMT',
|
||||
enclosure : {url: '/media/some-file.flv'}
|
||||
});
|
||||
|
||||
feed.item({
|
||||
title: 'item 3',
|
||||
description: 'description 3',
|
||||
url: 'http://example.com/article1',
|
||||
date: 'May 24, 2012 04:00:00 GMT',
|
||||
enclosure : {
|
||||
url: '/media/image.png',
|
||||
file: __dirname + '/image.png',
|
||||
size: 16650 // this is optional
|
||||
}
|
||||
});
|
||||
|
||||
t.equal(feed.xml({indent: true}), expectedOutput.enclosures);
|
||||
});
|
||||
|
||||
|
||||
test('geoRSS', function(t) {
|
||||
t.plan(1);
|
||||
var feed = new RSS({
|
||||
title: 'title',
|
||||
description: 'description',
|
||||
feed_url: 'http://example.com/rss.xml',
|
||||
site_url: 'http://example.com',
|
||||
author: 'Dylan Greene'
|
||||
});
|
||||
|
||||
feed.item({
|
||||
title: 'item 1',
|
||||
description: 'description 1',
|
||||
url: 'http://example.com/article1',
|
||||
date: 'May 24, 2012 04:00:00 GMT',
|
||||
lat: 12232,
|
||||
long: 13333.23323
|
||||
});
|
||||
|
||||
feed.item({
|
||||
title: 'item 2',
|
||||
description: 'description 2',
|
||||
url: 'http://example.com/article1',
|
||||
date: 'May 24, 2012 04:00:00 GMT'
|
||||
});
|
||||
|
||||
t.equal(feed.xml({indent: true}), expectedOutput.latLong);
|
||||
});
|
||||
|
||||
test('PubSubHubbub hub', function(t) {
|
||||
t.plan(1);
|
||||
|
||||
var feed = new RSS({
|
||||
title: 'title',
|
||||
description: 'description',
|
||||
feed_url: 'http://example.com/rss.xml',
|
||||
site_url: 'http://example.com',
|
||||
hub: 'http://example.com/hub'
|
||||
});
|
||||
|
||||
t.equal(feed.xml({indent: true}), expectedOutput.pubSubHubbub);
|
||||
});
|
||||
|
||||
|
||||
test('custom elements', function(t) {
|
||||
t.plan(1);
|
||||
|
||||
var feed = new RSS({
|
||||
title: 'title',
|
||||
description: 'description',
|
||||
feed_url: 'http://example.com/rss.xml',
|
||||
site_url: 'http://example.com',
|
||||
author: 'Dylan Greene',
|
||||
pubDate: 'May 20, 2012 04:00:00 GMT',
|
||||
language: 'en',
|
||||
ttl: '60',
|
||||
custom_elements: [
|
||||
{'itunes:subtitle': 'A show about everything'},
|
||||
{'itunes:author': 'John Doe'},
|
||||
{'itunes:summary': 'All About Everything is a show about everything. Each week we dive into any subject known to man and talk about it as much as we can. Look for our podcast in the Podcasts app or in the iTunes Store'},
|
||||
{'itunes:owner': [
|
||||
{'itunes:name': 'John Doe'},
|
||||
{'itunes:email': 'john.doe@example.com'}
|
||||
]},
|
||||
{'itunes:image': {
|
||||
_attr: {
|
||||
href: 'http://example.com/podcasts/everything/AllAboutEverything.jpg'
|
||||
}
|
||||
}},
|
||||
{'itunes:category': [
|
||||
{_attr: {
|
||||
text: 'Technology'
|
||||
}},
|
||||
{'itunes:category': {
|
||||
_attr: {
|
||||
text: 'Gadgets'
|
||||
}
|
||||
}}
|
||||
]}
|
||||
]
|
||||
});
|
||||
|
||||
feed.item({
|
||||
title: 'item 1',
|
||||
description: 'description 1',
|
||||
url: 'http://example.com/article1',
|
||||
date: 'May 24, 2012 04:00:00 GMT',
|
||||
custom_elements: [
|
||||
{'itunes:author': 'John Doe'},
|
||||
{'itunes:subtitle': 'A short primer on table spices'},
|
||||
{'itunes:image': {
|
||||
_attr: {
|
||||
href: 'http://example.com/podcasts/everything/AllAboutEverything/Episode1.jpg'
|
||||
}
|
||||
}},
|
||||
{'itunes:duration': '7:04'}
|
||||
]
|
||||
});
|
||||
|
||||
t.equal(feed.xml({indent: true}), expectedOutput.customElements);
|
||||
});
|
||||
|
||||
test('custom namespaces', function(t) {
|
||||
t.plan(1);
|
||||
|
||||
var feed = new RSS({
|
||||
title: 'title',
|
||||
description: 'description',
|
||||
feed_url: 'http://example.com/rss.xml',
|
||||
site_url: 'http://example.com',
|
||||
author: 'Dylan Greene',
|
||||
pubDate: 'May 20, 2012 04:00:00 GMT',
|
||||
language: 'en',
|
||||
ttl: '60',
|
||||
custom_namespaces: {
|
||||
'itunes': 'http://www.itunes.com/dtds/podcast-1.0.dtd'
|
||||
},
|
||||
custom_elements: [
|
||||
{'itunes:subtitle': 'A show about everything'},
|
||||
{'itunes:author': 'John Doe'},
|
||||
{'itunes:summary': 'All About Everything is a show about everything. Each week we dive into any subject known to man and talk about it as much as we can. Look for our podcast in the Podcasts app or in the iTunes Store'},
|
||||
{'itunes:owner': [
|
||||
{'itunes:name': 'John Doe'},
|
||||
{'itunes:email': 'john.doe@example.com'}
|
||||
]},
|
||||
{'itunes:image': {
|
||||
_attr: {
|
||||
href: 'http://example.com/podcasts/everything/AllAboutEverything.jpg'
|
||||
}
|
||||
}},
|
||||
{'itunes:category': [
|
||||
{_attr: {
|
||||
text: 'Technology'
|
||||
}},
|
||||
{'itunes:category': {
|
||||
_attr: {
|
||||
text: 'Gadgets'
|
||||
}
|
||||
}}
|
||||
]}
|
||||
]
|
||||
});
|
||||
|
||||
feed.item({
|
||||
title: 'item 1',
|
||||
description: 'description 1',
|
||||
url: 'http://example.com/article1',
|
||||
date: 'May 24, 2012 04:00:00 GMT',
|
||||
custom_elements: [
|
||||
{'itunes:author': 'John Doe'},
|
||||
{'itunes:subtitle': 'A short primer on table spices'},
|
||||
{'itunes:image': {
|
||||
_attr: {
|
||||
href: 'http://example.com/podcasts/everything/AllAboutEverything/Episode1.jpg'
|
||||
}
|
||||
}},
|
||||
{'itunes:duration': '7:04'}
|
||||
]
|
||||
});
|
||||
|
||||
t.equal(feed.xml({indent: true}), expectedOutput.customNamespaces);
|
||||
});
|
||||
462
test/rss.test.js
462
test/rss.test.js
@ -1,462 +0,0 @@
|
||||
/*
|
||||
use `npm test` to run tests using mocha
|
||||
*/
|
||||
|
||||
var RSS = require('../lib/rss');
|
||||
var expect = require('chai').expect;
|
||||
var xml2js = require('xml2js');
|
||||
var Q = require('q');
|
||||
|
||||
describe('rss module', function(done) {
|
||||
|
||||
it('should work with an empty feed', function(done) {
|
||||
var feed = new RSS();
|
||||
expect(feed.xml()).to.equal('<?xml version="1.0" encoding="UTF-8"?>\n<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Untitled RSS Feed]]></title><description><![CDATA[Untitled RSS Feed]]></description><link>http://github.com/dylang/node-rss</link><generator>RSS for Node</generator><lastBuildDate>' + new Date().toUTCString() +'</lastBuildDate></channel></rss>');
|
||||
feed.item();
|
||||
expect(feed.xml()).to.equal('<?xml version="1.0" encoding="UTF-8"?>\n<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Untitled RSS Feed]]></title><description><![CDATA[Untitled RSS Feed]]></description><link>http://github.com/dylang/node-rss</link><generator>RSS for Node</generator><lastBuildDate>' + new Date().toUTCString() +'</lastBuildDate><item><title><![CDATA[No title]]></title><guid isPermaLink="false">No title</guid></item></channel></rss>');
|
||||
done();
|
||||
});
|
||||
|
||||
var simpleFeed = function() {
|
||||
var feed = new RSS({
|
||||
title: 'title',
|
||||
description: 'description',
|
||||
generator: 'Example Generator',
|
||||
feed_url: 'http://example.com/rss.xml',
|
||||
site_url: 'http://example.com',
|
||||
image_url: 'http://example.com/icon.png',
|
||||
author: 'Dylan Greene',
|
||||
categories: ['Category 1','Category 2','Category 3'],
|
||||
pubDate: 'May 20, 2012 04:00:00 GMT',
|
||||
docs: 'http://example.com/rss/docs.html',
|
||||
copyright: '2013 Dylan Green',
|
||||
language: 'en',
|
||||
managingEditor: 'Dylan Green',
|
||||
webMaster: 'Dylan Green',
|
||||
ttl: '60'
|
||||
});
|
||||
|
||||
feed.item({
|
||||
title: 'item 1',
|
||||
description: 'description 1',
|
||||
url: 'http://example.com/article1',
|
||||
date: 'May 24, 2012 04:00:00 GMT'
|
||||
})
|
||||
.item({
|
||||
title: 'item 2',
|
||||
description: 'description 2',
|
||||
url: 'http://example.com/article2',
|
||||
date: 'May 25, 2012 04:00:00 GMT'
|
||||
})
|
||||
.item({
|
||||
title: 'item 3',
|
||||
description: 'description 3',
|
||||
url: 'http://example.com/article3',
|
||||
guid: 'item3',
|
||||
date: 'May 26, 2012 04:00:00 GMT'
|
||||
})
|
||||
.item({
|
||||
title: 'item 4 & html test with <strong>',
|
||||
description: 'description 4 uses some <strong>html</strong>',
|
||||
url: 'http://example.com/article4?this&that',
|
||||
author: 'Guest Author',
|
||||
date: 'May 27, 2012 04:00:00 GMT'
|
||||
})
|
||||
.item({
|
||||
title: 'item 5 & test for categories',
|
||||
description: 'description 5',
|
||||
url: 'http://example.com/article5',
|
||||
categories: ['Category 1','Category 2','Category 3','Category 4'],
|
||||
author: 'Guest Author',
|
||||
date: 'May 28, 2012 04:00:00 GMT'
|
||||
});
|
||||
return feed;
|
||||
}
|
||||
|
||||
it('should work with indentation', function(done) {
|
||||
var feed = simpleFeed();
|
||||
var xml = feed.xml(true);
|
||||
var parseString = Q.nbind(xml2js.parseString,xml2js);
|
||||
|
||||
var feedToXml = parseString(feed.xml());
|
||||
var feedToXmlIndent = parseString(feed.xml(true));
|
||||
Q.all([feedToXml,feedToXmlIndent]).spread(function (xml,xmlIndent){
|
||||
expect(JSON.stringify(xml)).to.equal(JSON.stringify(xmlIndent));
|
||||
}).done(done());
|
||||
});
|
||||
|
||||
it('should work with an easy test', function(done) {
|
||||
var feed = simpleFeed();
|
||||
var expectedResult = '<?xml version="1.0" encoding="UTF-8"?>\n<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[title]]></title><description><![CDATA[description]]></description><link>http://example.com</link><image><url>http://example.com/icon.png</url><title>title</title><link>http://example.com</link></image><generator>Example Generator</generator><lastBuildDate>' + new Date().toUTCString() +'</lastBuildDate><atom:link href="http://example.com/rss.xml" rel="self" type="application/rss+xml"/><author><![CDATA[Dylan Greene]]></author><pubDate>Sun, 20 May 2012 04:00:00 GMT</pubDate><copyright><![CDATA[2013 Dylan Green]]></copyright><language><![CDATA[en]]></language><managingEditor><![CDATA[Dylan Green]]></managingEditor><webMaster><![CDATA[Dylan Green]]></webMaster><docs>http://example.com/rss/docs.html</docs><ttl>60</ttl><category><![CDATA[Category 1]]></category><category><![CDATA[Category 2]]></category><category><![CDATA[Category 3]]></category><item><title><![CDATA[item 1]]></title><description><![CDATA[description 1]]></description><link>http://example.com/article1</link><guid isPermaLink="true">http://example.com/article1</guid><dc:creator><![CDATA[Dylan Greene]]></dc:creator><pubDate>Thu, 24 May 2012 04:00:00 GMT</pubDate></item><item><title><![CDATA[item 2]]></title><description><![CDATA[description 2]]></description><link>http://example.com/article2</link><guid isPermaLink="true">http://example.com/article2</guid><dc:creator><![CDATA[Dylan Greene]]></dc:creator><pubDate>Fri, 25 May 2012 04:00:00 GMT</pubDate></item><item><title><![CDATA[item 3]]></title><description><![CDATA[description 3]]></description><link>http://example.com/article3</link><guid isPermaLink="false">item3</guid><dc:creator><![CDATA[Dylan Greene]]></dc:creator><pubDate>Sat, 26 May 2012 04:00:00 GMT</pubDate></item><item><title><![CDATA[item 4 & html test with <strong>]]></title><description><![CDATA[description 4 uses some <strong>html</strong>]]></description><link>http://example.com/article4?this&that</link><guid isPermaLink="true">http://example.com/article4?this&that</guid><dc:creator><![CDATA[Guest Author]]></dc:creator><pubDate>Sun, 27 May 2012 04:00:00 GMT</pubDate></item><item><title><![CDATA[item 5 & test for categories]]></title><description><![CDATA[description 5]]></description><link>http://example.com/article5</link><guid isPermaLink="true">http://example.com/article5</guid><category><![CDATA[Category 1]]></category><category><![CDATA[Category 2]]></category><category><![CDATA[Category 3]]></category><category><![CDATA[Category 4]]></category><dc:creator><![CDATA[Guest Author]]></dc:creator><pubDate>Mon, 28 May 2012 04:00:00 GMT</pubDate></item></channel></rss>';
|
||||
var result = feed.xml();
|
||||
|
||||
expect(result).to.equal(expectedResult);
|
||||
done();
|
||||
});
|
||||
|
||||
it('should work without image_url', function(done) {
|
||||
var feed = new RSS({
|
||||
title: 'title',
|
||||
description: 'description',
|
||||
feed_url: 'http://example.com/rss.xml',
|
||||
site_url: 'http://example.com',
|
||||
author: 'Dylan Greene',
|
||||
categories: ['Category 1','Category 2','Category 3'],
|
||||
pubDate: 'May 20, 2012 04:00:00 GMT',
|
||||
docs: 'http://example.com/rss/docs.html',
|
||||
copyright: '2013 Dylan Green',
|
||||
language: 'en',
|
||||
managingEditor: 'Dylan Green',
|
||||
webMaster: 'Dylan Green',
|
||||
ttl: '60'
|
||||
});
|
||||
|
||||
feed.item({
|
||||
title: 'item 1',
|
||||
description: 'description 1',
|
||||
url: 'http://example.com/article1',
|
||||
date: 'May 24, 2012 04:00:00 GMT'
|
||||
})
|
||||
.item({
|
||||
title: 'item 2',
|
||||
description: 'description 2',
|
||||
url: 'http://example.com/article2',
|
||||
date: 'May 25, 2012 04:00:00 GMT'
|
||||
})
|
||||
.item({
|
||||
title: 'item 3',
|
||||
description: 'description 3',
|
||||
url: 'http://example.com/article3',
|
||||
guid: 'item3',
|
||||
date: 'May 26, 2012 04:00:00 GMT'
|
||||
})
|
||||
.item({
|
||||
title: 'item 4 & html test with <strong>',
|
||||
description: 'description 4 uses some <strong>html</strong>',
|
||||
url: 'http://example.com/article4?this&that',
|
||||
author: 'Guest Author',
|
||||
date: 'May 27, 2012 04:00:00 GMT'
|
||||
})
|
||||
.item({
|
||||
title: 'item 5 & test for categories',
|
||||
description: 'description 5',
|
||||
url: 'http://example.com/article5',
|
||||
categories: ['Category 1','Category 2','Category 3','Category 4'],
|
||||
author: 'Guest Author',
|
||||
date: 'May 28, 2012 04:00:00 GMT'
|
||||
});
|
||||
|
||||
var expectedResult = '<?xml version="1.0" encoding="UTF-8"?>\n<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[title]]></title><description><![CDATA[description]]></description><link>http://example.com</link><generator>RSS for Node</generator><lastBuildDate>' + new Date().toUTCString() +'</lastBuildDate><atom:link href="http://example.com/rss.xml" rel="self" type="application/rss+xml"/><author><![CDATA[Dylan Greene]]></author><pubDate>Sun, 20 May 2012 04:00:00 GMT</pubDate><copyright><![CDATA[2013 Dylan Green]]></copyright><language><![CDATA[en]]></language><managingEditor><![CDATA[Dylan Green]]></managingEditor><webMaster><![CDATA[Dylan Green]]></webMaster><docs>http://example.com/rss/docs.html</docs><ttl>60</ttl><category><![CDATA[Category 1]]></category><category><![CDATA[Category 2]]></category><category><![CDATA[Category 3]]></category><item><title><![CDATA[item 1]]></title><description><![CDATA[description 1]]></description><link>http://example.com/article1</link><guid isPermaLink="true">http://example.com/article1</guid><dc:creator><![CDATA[Dylan Greene]]></dc:creator><pubDate>Thu, 24 May 2012 04:00:00 GMT</pubDate></item><item><title><![CDATA[item 2]]></title><description><![CDATA[description 2]]></description><link>http://example.com/article2</link><guid isPermaLink="true">http://example.com/article2</guid><dc:creator><![CDATA[Dylan Greene]]></dc:creator><pubDate>Fri, 25 May 2012 04:00:00 GMT</pubDate></item><item><title><![CDATA[item 3]]></title><description><![CDATA[description 3]]></description><link>http://example.com/article3</link><guid isPermaLink="false">item3</guid><dc:creator><![CDATA[Dylan Greene]]></dc:creator><pubDate>Sat, 26 May 2012 04:00:00 GMT</pubDate></item><item><title><![CDATA[item 4 & html test with <strong>]]></title><description><![CDATA[description 4 uses some <strong>html</strong>]]></description><link>http://example.com/article4?this&that</link><guid isPermaLink="true">http://example.com/article4?this&that</guid><dc:creator><![CDATA[Guest Author]]></dc:creator><pubDate>Sun, 27 May 2012 04:00:00 GMT</pubDate></item><item><title><![CDATA[item 5 & test for categories]]></title><description><![CDATA[description 5]]></description><link>http://example.com/article5</link><guid isPermaLink="true">http://example.com/article5</guid><category><![CDATA[Category 1]]></category><category><![CDATA[Category 2]]></category><category><![CDATA[Category 3]]></category><category><![CDATA[Category 4]]></category><dc:creator><![CDATA[Guest Author]]></dc:creator><pubDate>Mon, 28 May 2012 04:00:00 GMT</pubDate></item></channel></rss>';
|
||||
var result = feed.xml();
|
||||
|
||||
expect(result).to.equal(expectedResult);
|
||||
done();
|
||||
});
|
||||
|
||||
it('should work with an enclosure', function(done) {
|
||||
var feed = new RSS({
|
||||
title: 'title',
|
||||
description: 'description',
|
||||
feed_url: 'http://example.com/rss.xml',
|
||||
site_url: 'http://example.com',
|
||||
author: 'Dylan Greene'
|
||||
});
|
||||
|
||||
feed.item({
|
||||
title: 'item 1',
|
||||
description: 'description 1',
|
||||
url: 'http://example.com/article1',
|
||||
date: 'May 24, 2012 04:00:00 GMT',
|
||||
enclosure : 'incorrect value'
|
||||
});
|
||||
|
||||
feed.item({
|
||||
title: 'item 2',
|
||||
description: 'description 2',
|
||||
url: 'http://example.com/article1',
|
||||
date: 'May 24, 2012 04:00:00 GMT',
|
||||
enclosure : {url: '/media/some-file.flv'}
|
||||
});
|
||||
|
||||
feed.item({
|
||||
title: 'item 3',
|
||||
description: 'description 3',
|
||||
url: 'http://example.com/article1',
|
||||
date: 'May 24, 2012 04:00:00 GMT',
|
||||
enclosure : {url: '/media/image.png', file : __dirname+'/image.png'}
|
||||
});
|
||||
|
||||
var expectedResult = '<?xml version="1.0" encoding="UTF-8"?>\n<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[title]]></title><description><![CDATA[description]]></description><link>http://example.com</link><generator>RSS for Node</generator><lastBuildDate>' + new Date().toUTCString() +'</lastBuildDate><atom:link href="http://example.com/rss.xml" rel="self" type="application/rss+xml"/>'+
|
||||
'<author><![CDATA[Dylan Greene]]></author>' +
|
||||
'<item><title><![CDATA[item 1]]></title><description><![CDATA[description 1]]></description><link>http://example.com/article1</link><guid isPermaLink="true">http://example.com/article1</guid><dc:creator><![CDATA[Dylan Greene]]></dc:creator><pubDate>Thu, 24 May 2012 04:00:00 GMT</pubDate></item>'+
|
||||
'<item><title><![CDATA[item 2]]></title><description><![CDATA[description 2]]></description><link>http://example.com/article1</link><guid isPermaLink="true">http://example.com/article1</guid><dc:creator><![CDATA[Dylan Greene]]></dc:creator><pubDate>Thu, 24 May 2012 04:00:00 GMT</pubDate><enclosure url="/media/some-file.flv" length="0" type="video/x-flv"/></item>'+
|
||||
'<item><title><![CDATA[item 3]]></title><description><![CDATA[description 3]]></description><link>http://example.com/article1</link><guid isPermaLink="true">http://example.com/article1</guid><dc:creator><![CDATA[Dylan Greene]]></dc:creator><pubDate>Thu, 24 May 2012 04:00:00 GMT</pubDate><enclosure url="/media/image.png" length="16650" type="image/png"/></item>'+
|
||||
'</channel></rss>';
|
||||
var result = feed.xml();
|
||||
|
||||
expect(result).to.equal(expectedResult);
|
||||
done();
|
||||
});
|
||||
|
||||
|
||||
it('should work with geoRSS', function(done) {
|
||||
var feed = new RSS({
|
||||
title: 'title',
|
||||
description: 'description',
|
||||
feed_url: 'http://example.com/rss.xml',
|
||||
site_url: 'http://example.com',
|
||||
author: 'Dylan Greene'
|
||||
});
|
||||
|
||||
feed.item({
|
||||
title: 'item 1',
|
||||
description: 'description 1',
|
||||
url: 'http://example.com/article1',
|
||||
date: 'May 24, 2012 04:00:00 GMT',
|
||||
lat: 12232,
|
||||
long: 13333.23323
|
||||
});
|
||||
|
||||
feed.item({
|
||||
title: 'item 2',
|
||||
description: 'description 2',
|
||||
url: 'http://example.com/article1',
|
||||
date: 'May 24, 2012 04:00:00 GMT'
|
||||
});
|
||||
|
||||
var expectedResult = '<?xml version="1.0" encoding="UTF-8"?>\n<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"><channel><title><![CDATA[title]]></title><description><![CDATA[description]]></description><link>http://example.com</link><generator>RSS for Node</generator><lastBuildDate>' + new Date().toUTCString() +'</lastBuildDate><atom:link href="http://example.com/rss.xml" rel="self" type="application/rss+xml"/>'+
|
||||
'<author><![CDATA[Dylan Greene]]></author>' +
|
||||
'<item><title><![CDATA[item 1]]></title><description><![CDATA[description 1]]></description><link>http://example.com/article1</link><guid isPermaLink="true">http://example.com/article1</guid><dc:creator><![CDATA[Dylan Greene]]></dc:creator><pubDate>Thu, 24 May 2012 04:00:00 GMT</pubDate><geo:lat>12232</geo:lat><geo:long>13333.23323</geo:long></item>'+
|
||||
'<item><title><![CDATA[item 2]]></title><description><![CDATA[description 2]]></description><link>http://example.com/article1</link><guid isPermaLink="true">http://example.com/article1</guid><dc:creator><![CDATA[Dylan Greene]]></dc:creator><pubDate>Thu, 24 May 2012 04:00:00 GMT</pubDate></item>'+
|
||||
'</channel></rss>';
|
||||
var result = feed.xml();
|
||||
|
||||
expect(result).to.equal(expectedResult);
|
||||
done();
|
||||
});
|
||||
|
||||
it('should work with PubSubHubbub hub', function(done) {
|
||||
var feed = new RSS({
|
||||
title: 'title',
|
||||
description: 'description',
|
||||
feed_url: 'http://example.com/rss.xml',
|
||||
site_url: 'http://example.com',
|
||||
hub: 'http://example.com/hub'
|
||||
});
|
||||
|
||||
var expectedResult = '<?xml version="1.0" encoding="UTF-8"?>\n'+
|
||||
'<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">'+
|
||||
'<channel>'+
|
||||
'<title><![CDATA[title]]></title>'+
|
||||
'<description><![CDATA[description]]></description>'+
|
||||
'<link>http://example.com</link>'+
|
||||
'<generator>RSS for Node</generator>'+
|
||||
'<lastBuildDate>' + new Date().toUTCString() +'</lastBuildDate>'+
|
||||
'<atom:link href="http://example.com/rss.xml" rel="self" type="application/rss+xml"/>'+
|
||||
'<atom:link href="http://example.com/hub" rel="hub"/>'+
|
||||
'</channel>'+
|
||||
'</rss>';
|
||||
|
||||
var result = feed.xml();
|
||||
|
||||
expect(result).to.equal(expectedResult);
|
||||
done();
|
||||
});
|
||||
|
||||
it('should work with custom elements', function(done) {
|
||||
var feed = new RSS({
|
||||
title: 'title',
|
||||
description: 'description',
|
||||
feed_url: 'http://example.com/rss.xml',
|
||||
site_url: 'http://example.com',
|
||||
author: 'Dylan Greene',
|
||||
pubDate: 'May 20, 2012 04:00:00 GMT',
|
||||
language: 'en',
|
||||
ttl: '60',
|
||||
custom_elements: [
|
||||
{'itunes:subtitle': 'A show about everything'},
|
||||
{'itunes:author': 'John Doe'},
|
||||
{'itunes:summary': 'All About Everything is a show about everything. Each week we dive into any subject known to man and talk about it as much as we can. Look for our podcast in the Podcasts app or in the iTunes Store'},
|
||||
{'itunes:owner': [
|
||||
{'itunes:name': 'John Doe'},
|
||||
{'itunes:email': 'john.doe@example.com'}
|
||||
]},
|
||||
{'itunes:image': {
|
||||
_attr: {
|
||||
href: 'http://example.com/podcasts/everything/AllAboutEverything.jpg'
|
||||
}
|
||||
}},
|
||||
{'itunes:category': [
|
||||
{_attr: {
|
||||
text: 'Technology'
|
||||
}},
|
||||
{'itunes:category': {
|
||||
_attr: {
|
||||
text: 'Gadgets'
|
||||
}
|
||||
}}
|
||||
]}
|
||||
]
|
||||
});
|
||||
|
||||
feed.item({
|
||||
title: 'item 1',
|
||||
description: 'description 1',
|
||||
url: 'http://example.com/article1',
|
||||
date: 'May 24, 2012 04:00:00 GMT',
|
||||
custom_elements: [
|
||||
{'itunes:author': 'John Doe'},
|
||||
{'itunes:subtitle': 'A short primer on table spices'},
|
||||
{'itunes:image': {
|
||||
_attr: {
|
||||
href: 'http://example.com/podcasts/everything/AllAboutEverything/Episode1.jpg'
|
||||
}
|
||||
}},
|
||||
{'itunes:duration': '7:04'}
|
||||
]
|
||||
});
|
||||
|
||||
var expectedResult ='<?xml version="1.0" encoding="UTF-8"?>\n'+
|
||||
'<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">'+
|
||||
'<channel>' +
|
||||
'<title><![CDATA[title]]></title>' +
|
||||
'<description><![CDATA[description]]></description>' +
|
||||
'<link>http://example.com</link>' +
|
||||
'<generator>RSS for Node</generator>' +
|
||||
'<lastBuildDate>' + new Date().toUTCString() +'</lastBuildDate>' +
|
||||
'<atom:link href="http://example.com/rss.xml" rel="self" type="application/rss+xml"/>' +
|
||||
'<author><![CDATA[Dylan Greene]]></author>' +
|
||||
'<pubDate>Sun, 20 May 2012 04:00:00 GMT</pubDate>' +
|
||||
'<language><![CDATA[en]]></language>' +
|
||||
'<ttl>60</ttl>' +
|
||||
'<itunes:subtitle>A show about everything</itunes:subtitle>' +
|
||||
'<itunes:author>John Doe</itunes:author>' +
|
||||
'<itunes:summary>All About Everything is a show about everything. Each week we dive into any subject known to man and talk about it as much as we can. Look for our podcast in the Podcasts app or in the iTunes Store</itunes:summary>' +
|
||||
'<itunes:owner>' +
|
||||
'<itunes:name>John Doe</itunes:name>' +
|
||||
'<itunes:email>john.doe@example.com</itunes:email>' +
|
||||
'</itunes:owner>' +
|
||||
'<itunes:image href="http://example.com/podcasts/everything/AllAboutEverything.jpg"/>' +
|
||||
'<itunes:category text="Technology">' +
|
||||
'<itunes:category text="Gadgets"/>' +
|
||||
'</itunes:category>' +
|
||||
'<item>' +
|
||||
'<title><![CDATA[item 1]]></title>' +
|
||||
'<description><![CDATA[description 1]]></description>' +
|
||||
'<link>http://example.com/article1</link>' +
|
||||
'<guid isPermaLink="true">http://example.com/article1</guid>' +
|
||||
'<dc:creator><![CDATA[Dylan Greene]]></dc:creator>' +
|
||||
'<pubDate>Thu, 24 May 2012 04:00:00 GMT</pubDate>' +
|
||||
'<itunes:author>John Doe</itunes:author>' +
|
||||
'<itunes:subtitle>A short primer on table spices</itunes:subtitle>' +
|
||||
'<itunes:image href="http://example.com/podcasts/everything/AllAboutEverything/Episode1.jpg"/>' +
|
||||
'<itunes:duration>7:04</itunes:duration>' +
|
||||
'</item>' +
|
||||
'</channel>' +
|
||||
'</rss>';
|
||||
var result = feed.xml();
|
||||
|
||||
expect(result).to.equal(expectedResult);
|
||||
done();
|
||||
});
|
||||
|
||||
it('should work with custom namespaces', function(done) {
|
||||
var feed = new RSS({
|
||||
title: 'title',
|
||||
description: 'description',
|
||||
feed_url: 'http://example.com/rss.xml',
|
||||
site_url: 'http://example.com',
|
||||
author: 'Dylan Greene',
|
||||
pubDate: 'May 20, 2012 04:00:00 GMT',
|
||||
language: 'en',
|
||||
ttl: '60',
|
||||
custom_namespaces: {
|
||||
'itunes': 'http://www.itunes.com/dtds/podcast-1.0.dtd'
|
||||
},
|
||||
custom_elements: [
|
||||
{'itunes:subtitle': 'A show about everything'},
|
||||
{'itunes:author': 'John Doe'},
|
||||
{'itunes:summary': 'All About Everything is a show about everything. Each week we dive into any subject known to man and talk about it as much as we can. Look for our podcast in the Podcasts app or in the iTunes Store'},
|
||||
{'itunes:owner': [
|
||||
{'itunes:name': 'John Doe'},
|
||||
{'itunes:email': 'john.doe@example.com'}
|
||||
]},
|
||||
{'itunes:image': {
|
||||
_attr: {
|
||||
href: 'http://example.com/podcasts/everything/AllAboutEverything.jpg'
|
||||
}
|
||||
}},
|
||||
{'itunes:category': [
|
||||
{_attr: {
|
||||
text: 'Technology'
|
||||
}},
|
||||
{'itunes:category': {
|
||||
_attr: {
|
||||
text: 'Gadgets'
|
||||
}
|
||||
}}
|
||||
]}
|
||||
]
|
||||
});
|
||||
|
||||
feed.item({
|
||||
title: 'item 1',
|
||||
description: 'description 1',
|
||||
url: 'http://example.com/article1',
|
||||
date: 'May 24, 2012 04:00:00 GMT',
|
||||
custom_elements: [
|
||||
{'itunes:author': 'John Doe'},
|
||||
{'itunes:subtitle': 'A short primer on table spices'},
|
||||
{'itunes:image': {
|
||||
_attr: {
|
||||
href: 'http://example.com/podcasts/everything/AllAboutEverything/Episode1.jpg'
|
||||
}
|
||||
}},
|
||||
{'itunes:duration': '7:04'}
|
||||
]
|
||||
});
|
||||
|
||||
var expectedResult ='<?xml version="1.0" encoding="UTF-8"?>\n'+
|
||||
'<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">'+
|
||||
'<channel>' +
|
||||
'<title><![CDATA[title]]></title>' +
|
||||
'<description><![CDATA[description]]></description>' +
|
||||
'<link>http://example.com</link>' +
|
||||
'<generator>RSS for Node</generator>' +
|
||||
'<lastBuildDate>' + new Date().toUTCString() +'</lastBuildDate>' +
|
||||
'<atom:link href="http://example.com/rss.xml" rel="self" type="application/rss+xml"/>' +
|
||||
'<author><![CDATA[Dylan Greene]]></author>' +
|
||||
'<pubDate>Sun, 20 May 2012 04:00:00 GMT</pubDate>' +
|
||||
'<language><![CDATA[en]]></language>' +
|
||||
'<ttl>60</ttl>' +
|
||||
'<itunes:subtitle>A show about everything</itunes:subtitle>' +
|
||||
'<itunes:author>John Doe</itunes:author>' +
|
||||
'<itunes:summary>All About Everything is a show about everything. Each week we dive into any subject known to man and talk about it as much as we can. Look for our podcast in the Podcasts app or in the iTunes Store</itunes:summary>' +
|
||||
'<itunes:owner>' +
|
||||
'<itunes:name>John Doe</itunes:name>' +
|
||||
'<itunes:email>john.doe@example.com</itunes:email>' +
|
||||
'</itunes:owner>' +
|
||||
'<itunes:image href="http://example.com/podcasts/everything/AllAboutEverything.jpg"/>' +
|
||||
'<itunes:category text="Technology">' +
|
||||
'<itunes:category text="Gadgets"/>' +
|
||||
'</itunes:category>' +
|
||||
'<item>' +
|
||||
'<title><![CDATA[item 1]]></title>' +
|
||||
'<description><![CDATA[description 1]]></description>' +
|
||||
'<link>http://example.com/article1</link>' +
|
||||
'<guid isPermaLink="true">http://example.com/article1</guid>' +
|
||||
'<dc:creator><![CDATA[Dylan Greene]]></dc:creator>' +
|
||||
'<pubDate>Thu, 24 May 2012 04:00:00 GMT</pubDate>' +
|
||||
'<itunes:author>John Doe</itunes:author>' +
|
||||
'<itunes:subtitle>A short primer on table spices</itunes:subtitle>' +
|
||||
'<itunes:image href="http://example.com/podcasts/everything/AllAboutEverything/Episode1.jpg"/>' +
|
||||
'<itunes:duration>7:04</itunes:duration>' +
|
||||
'</item>' +
|
||||
'</channel>' +
|
||||
'</rss>';
|
||||
var result = feed.xml();
|
||||
|
||||
expect(result).to.equal(expectedResult);
|
||||
done();
|
||||
});
|
||||
});
|
||||
Loading…
Reference in New Issue
Block a user