hackernews2nntp
Version:
Post Hacker News Stories & Comments to an NNTP Server
90 lines (70 loc) • 3.35 kB
text/coffeescript
assert = require 'assert'
fs = require 'fs'
require './helper'
Message = require '../src/message'
mbox = require '../src/mbox'
suite 'Message', ->
setup ->
test 'headers', ->
story = new Message(JSON.parse fs.readFileSync('data/stories/8863.json'))
headers = story.headers()
assert headers.boundary.match /^[0-9a-z]+$/
assert headers.permalink.match /^https:\/\/news.ycombinator.com\/item\?id=\d+/
assert headers.from.match /^.+ <.+@example.com>$/
assert headers.profile.match /^https:\/\/news.ycombinator.com\/user\?id=.+/
assert headers.message_id.match /^<\d+@news.ycombinator.com>$/
assert.equal '', headers.parent_msgid
assert headers.date.match /^[A-Za-z]+, [0-9]+ [A-Za-z]+ \d+ \d+:\d+:\d+ GMT$/
assert headers.content_id.global.match /^<\d+_[0-9a-z]+@.+>$/
assert headers.content_id.text.match /^<text_\d+_[0-9a-z]+@.+>$/
assert headers.content_id.html.match /^<html_\d+_[0-9a-z]+@.+>$/
assert headers.subject.match /^=\?UTF-8\?Q\?.+\?=$/
test 'comment text filtered by w3m', (iamdone) ->
comment = new Message(JSON.parse fs.readFileSync('data/comments/2921983.json'))
results = {}
comment.render results
.then ->
assert.equal "Aw shucks, guys ... you make me blush with your compliments.\n\nTell you what, Ill make a deal: I'll keep writing if you keep reading.\nK?", results.body_text
iamdone()
.done()
test 'poll parts filtered by w3m', (iamdone) ->
json_data = (JSON.parse fs.readFileSync('data/polls/126809/126809.json'))
parts = []
for idx in json_data.parts
file = "data/polls/126809/#{idx}.json"
parts.push JSON.parse fs.readFileSync(file).toString()
poll = new Message json_data, parts
results = {}
poll.render results
.then ->
assert.deepEqual [
"Users would create too many, and new arrivals would think News.YC was a\npoll site.",
"Users would create fewer polls, because the main reason they do it now\nis to get karma from people voting up the poll choices.",
"We'd have the same number of polls, but they wouldn't look as ugly."
], results.polparts
iamdone()
.done()
test 'TemplateGet', ->
assert.equal 'Newsgroups: {{ mail.newsgroup }}', Message.TemplateGet('story', 'template/dumb').trim()
assert.notEqual 'Newsgroups: {{ mail.newsgroup }}', Message.TemplateGet('story').trim()
# no user template, return a system one
assert Message.TemplateGet('story', 'DOES NOT EXIST').length > 500
# invalid template name
assert.throws ->
Message.TemplateGet('omglol', 'template/dumb')
, Error
assert.throws ->
Message.TemplateGet('omglol')
, Error
test 'render user template', (iamdone) ->
story = new Message(JSON.parse(fs.readFileSync('data/stories/8863.json')), [])
story.opt.alt_dir = 'template/dumb'
story.render()
.then (r) ->
assert.equal 'Newsgroups: news.ycombinator', r.trim()
iamdone()
.done()
test 'mbox', ->
assert.equal 'From user@example.com Fri Nov 21 14:32:12 2014', mbox.prefix {time: 1416580332, by: 'user'}
assert.equal 'From user@example.com Fri Nov 21 14:32:07 2014', mbox.prefix {time: 1416580327, by: 'user'}
assert.equal 'From user@example.com Sun Apr 08 19:05:04 2012', mbox.prefix {time: 1333911904, by: 'user'}