Commit e21973dd20862eb2f68335de131463038d7aacc8
compile edits of a post
Kieran committed on 5/22/2018, 12:37:07 AMParent: 1914c3d4f82b0ae0cfd2f8087d24bde52803668c
Files changed
3_compileSequentialEdits.test.js | added |
3_compileSequentialEdits.test.js | ||
---|---|---|
@@ -1,0 +1,61 @@ | ||
1 … | +const test = require('tape') | |
2 … | +const Server = require('scuttle-testbot') | |
3 … | +const pull = require('pull-stream') | |
4 … | + | |
5 … | +test('edit a post', t => { | |
6 … | + var server = Server() | |
7 … | + | |
8 … | + t.plan(1) | |
9 … | + | |
10 … | + var content = { | |
11 … | + type: "post", | |
12 … | + text: "hello wolard!" | |
13 … | + } | |
14 … | + | |
15 … | + var edit = { | |
16 … | + type: "post-edit", | |
17 … | + text: "hello world!" | |
18 … | + // root: ??? - this will be the message id of the first post when we know it | |
19 … | + } | |
20 … | + | |
21 … | + server.publish(content, (err, first) => { | |
22 … | + // now we know the key / root id | |
23 … | + edit.root = first.key | |
24 … | + | |
25 … | + server.publish(edit, (err, second) => { | |
26 … | + // now we recompile the message using the key of the root | |
27 … | + | |
28 … | + compilePost(first.key, (err, compiledPost) => { | |
29 … | + t.equal(edit.text, compiledPost.compiledText) | |
30 … | + | |
31 … | + // Make sure you close the server or tests will hang | |
32 … | + server.close() | |
33 … | + }) | |
34 … | + }) | |
35 … | + | |
36 … | + }) | |
37 … | + | |
38 … | + function compilePost (key, cb) { | |
39 … | + // This implemention is hella naive | |
40 … | + // - createFeedStream will stream the ENTIRE database | |
41 … | + // - filters are super brittle, recommend json schema | |
42 … | + // - assumes arriving in correct order | |
43 … | + | |
44 … | + pull( | |
45 … | + server.createFeedStream(), | |
46 … | + pull.filter(msg => { | |
47 … | + // its a post and key is the same as the key | |
48 … | + // its a post-edit and root is the same as the key | |
49 … | + if (msg.value.content.type === "post" && msg.key === key) return true | |
50 … | + if (msg.value.content.type === "post-edit" && msg.value.content.root && msg.value.content.root === key) return true | |
51 … | + }), | |
52 … | + pull.collect((err, msgs) => { | |
53 … | + var compiledText = msgs.reduce((state, msg) => { | |
54 … | + return msg.value.content.text | |
55 … | + }, "") | |
56 … | + | |
57 … | + cb(null, { compiledText }) | |
58 … | + }) | |
59 … | + ) | |
60 … | + } | |
61 … | +}) |
Built with git-ssb-web