Commit 0bebd57e201531188e6d1b2b1b4f586d2000fa1b
test invite flumeView
Kieran committed on 4/17/2018, 2:35:26 AMParent: 68c5144682ae892eea922813d3a9926745a0dda3
Files changed
index.js | changed |
test/index.js | changed |
index.js | |||
---|---|---|---|
@@ -3,9 +3,9 @@ | |||
3 | 3 … | const get = require('lodash/get') | |
4 | 4 … | const extend = require('xtend') | |
5 | 5 … | const pry = require('pryjs') | |
6 | 6 … | ||
7 | -const FLUME_VIEW_VERSION = 1.311223122 | ||
7 … | +const FLUME_VIEW_VERSION = 1.3112231222 | ||
8 | 8 … | const FLUME_VIEW_NAME = "secrets" | |
9 | 9 … | ||
10 | 10 … | const MODULE_NAME = "secrets" | |
11 | 11 … | const MSG_TYPES = ["root", "invite", "response", "contract", "secret", "announcement"] | |
@@ -14,29 +14,36 @@ | |||
14 | 14 … | name: FLUME_VIEW_NAME, | |
15 | 15 … | version: '1.0.0', | |
16 | 16 … | manifest: { | |
17 | 17 … | root: { | |
18 … | + publish: 'async', | ||
18 | 19 … | get: 'async', | |
19 | 20 … | stream: 'source' | |
20 | 21 … | }, | |
21 | 22 … | invites: { | |
23 … | + publish: 'async', | ||
22 | 24 … | get: 'async', | |
23 | 25 … | stream: 'source' | |
24 | 26 … | }, | |
27 … | + response: { | ||
28 … | + publish: 'async' | ||
29 … | + }, | ||
25 | 30 … | secrets: { | |
31 … | + publish: 'async', | ||
26 | 32 … | get: 'async', | |
27 | 33 … | stream: 'source' | |
28 | 34 … | } | |
29 | 35 … | }, | |
30 | 36 … | init: function (server, config) { | |
31 | 37 … | const root = server._flumeUse("root", flumeView(FLUME_VIEW_VERSION, (accumulator, content) => { | |
38 … | + accumulator = accumulator || {} | ||
32 | 39 … | var roots = accumulator[content.author] || [] | |
33 | 40 … | if (!(roots.filter(root => root.id === content.id).length > 0)) roots.push(content.id) | |
34 | 41 … | accumulator[content.author] = roots | |
35 | 42 … | return accumulator | |
36 | 43 … | }, (msg) => { | |
37 | 44 … | var { author, content } = msg.value | |
38 | - content = server.private.unbox(content, config.keys.private) | ||
45 … | + content = server.private.unbox(content) | ||
39 | 46 … | if (!(content && content.module && content.module === MODULE_NAME && content.type === "root")) return null | |
40 | 47 … | return { | |
41 | 48 … | id: msg.key, | |
42 | 49 … | author: author | |
@@ -47,17 +54,13 @@ | |||
47 | 54 … | var invites = accumulator[content.root] || [] | |
48 | 55 … | var invite = invites.filter(invite => invite.id === content.id)[0] | |
49 | 56 … | if (!invite) { | |
50 | 57 … | if (isResponse()) { | |
51 | - console.log("Hit the response") | ||
52 | 58 … | var inviteIndex = invites.findIndex(invite => invite.id === content.invite) | |
53 | - console.log("Index: ", inviteIndex) | ||
54 | 59 … | if (inviteIndex !== -1) { | |
55 | 60 … | invites[inviteIndex].accepted = content.accepted | |
56 | - console.log("Invites: ", invites) | ||
57 | 61 … | } | |
58 | 62 … | } else { | |
59 | - console.log("Seems to think its a new invite") | ||
60 | 63 … | invites.push({ | |
61 | 64 … | id: content.id, | |
62 | 65 … | recps: content.recps | |
63 | 66 … | }) | |
@@ -70,16 +73,10 @@ | |||
70 | 73 … | return true && content.invite | |
71 | 74 … | } | |
72 | 75 … | }, (msg) => { | |
73 | 76 … | var { author, content } = msg.value | |
74 | - content = server.private.unbox(content, config.keys.private) | ||
75 | - console.log(content) | ||
76 | - console.log("\n") | ||
77 … | + content = server.private.unbox(content) | ||
77 | 78 … | if (!(content && isSecretsModule() && inviteOrResponse())) return null | |
78 | - console.log("Invite: ", msg.key) | ||
79 | - console.log("Author: ", author) | ||
80 | - console.log("Invitees: ", content.recps) | ||
81 | - console.log("Type: ", content.type) | ||
82 | 79 … | return { | |
83 | 80 … | id: msg.key, | |
84 | 81 … | root: content.root, | |
85 | 82 … | recps: content.recps, | |
@@ -113,16 +110,44 @@ | |||
113 | 110 … | }, null, {})) | |
114 | 111 … | ||
115 | 112 … | return { | |
116 | 113 … | root: { | |
114 … | + publish: (opts, cb) => { | ||
115 … | + server.private.publish(extend({ | ||
116 … | + module: 'secrets', | ||
117 … | + type: 'root' | ||
118 … | + }, opts)) | ||
119 … | + }, | ||
117 | 120 … | get: root.get, | |
118 | 121 … | stream: root.stream | |
119 | 122 … | }, | |
120 | 123 … | invites: { | |
124 … | + publish: (opts, cb) => { | ||
125 … | + server.private.publish(extend({ | ||
126 … | + module: 'secrets', | ||
127 … | + type: 'invite' | ||
128 … | + }, opts)) | ||
129 … | + }, | ||
121 | 130 … | get: invites.get, | |
122 | 131 … | stream: invites.stream | |
123 | 132 … | }, | |
133 … | + response: { | ||
134 … | + publish: (opts, cb) => { | ||
135 … | + server.private.publish(extend({ | ||
136 … | + module: 'secrets', | ||
137 … | + type: 'response' | ||
138 … | + })) | ||
139 … | + } | ||
140 … | + }, | ||
124 | 141 … | secrets: { | |
142 … | + publish: (opts, cb) => { | ||
143 … | + servder.private.publish(extend({ | ||
144 … | + module: 'secrets', | ||
145 … | + type: 'secret' | ||
146 … | + }), [ | ||
147 … | + | ||
148 … | + ], cb) | ||
149 … | + }, | ||
125 | 150 … | get: secrets.get, | |
126 | 151 … | stream: secrets.stream | |
127 | 152 … | } | |
128 | 153 … | } |
test/index.js | ||
---|---|---|
@@ -1,43 +1,77 @@ | ||
1 | 1 … | const Server = require('scuttle-testbot') |
2 | 2 … | const Keys = require('ssb-keys') |
3 | -const test = require('tape') | |
3 … | +const Test = require('tape') | |
4 … | + | |
5 … | +const pull = require('pull-stream') | |
4 | 6 … | const get = require('lodash/get') |
7 … | + | |
5 | 8 … | const pry = require('pryjs') |
6 | 9 … | |
7 | -Server | |
8 | - .use(require('ssb-private')) | |
9 | - .use(require('../index.js')) | |
10 … | +// Generate two identities and start two test servers | |
10 | 11 … | |
11 | 12 … | const alice = Keys.generate() |
12 | 13 … | const bob = Keys.generate() |
13 | 14 … | |
14 | -console.log("*** Generating Keys ***", "\n") | |
15 | -console.log("Alice: ", alice, "\n") | |
16 | -console.log("Bob: ", bob, "\n") | |
15 … | +Server | |
16 … | + .use(require('ssb-private')) | |
17 … | + .use(require('../index.js')) | |
17 | 18 … | |
18 | -console.log("*** Starting Alice's Server ***", "\n") | |
19 | 19 … | const aliceConfig = { name: "alicetestbot", keys: alice } |
20 | -const aliceServer = Server(aliceConfig) | |
21 | -console.log(aliceServer) | |
20 … | +const aliceServer = new Server(aliceConfig) | |
22 | 21 … | |
23 | -test("it should publish an encrypted secret root", t => { | |
22 … | +Server | |
23 … | + .use(require('ssb-private')) | |
24 … | + .use(require('../index.js')) | |
25 … | + | |
26 … | +const bobConfig = { name: "bobtestbot", keys: bob } | |
27 … | +const bobServer = new Server(bobConfig) | |
28 … | + | |
29 … | +var root | |
30 … | + | |
31 … | +Test("it publishes an encrypted secret root that is only visible to Alice", t => { | |
24 | 32 … | aliceServer.private.publish({ |
25 | - module: "secret", | |
33 … | + module: "secrets", | |
26 | 34 … | type: "root" |
27 | 35 … | }, [ |
28 | 36 … | aliceConfig.keys.id |
29 | 37 … | ], (err, msg) => { |
30 | 38 … | var { author, content } = msg.value |
31 | - var decrypt = aliceServer.private.unbox(content, alice.private) | |
39 … | + root = msg.key | |
32 | 40 … | |
33 | - t.equal(author, alice.id) | |
34 | - t.equal("secret", decrypt.module) | |
35 | - t.equal("root", decrypt.type) | |
41 … | + // Author is Alice | |
42 … | + t.equal(alice.id, author) | |
43 … | + t.notEqual(bob.id, author) | |
44 … | + | |
45 … | + // Decrypt | |
46 … | + var decryptByAlice = aliceServer.private.unbox(content) | |
47 … | + var decryptByBob = bobServer.private.unbox(content) | |
48 … | + | |
49 … | + t.equal(get(decryptByAlice, "module"), "secrets") | |
50 … | + t.notEqual(get(decryptByBob, "module"), "secrets") | |
51 … | + | |
52 … | + t.equal(get(decryptByAlice, "type"), "root") | |
53 … | + t.notEqual(get(decryptByBob, "type"), "root") | |
54 … | + | |
36 | 55 … | t.end() |
37 | 56 … | }) |
38 | 57 … | }) |
39 | 58 … | |
40 | -test("it should return a collection of root IDs", t => { | |
41 | - t.equal(0, 0) | |
42 | - t.end() | |
59 … | +Test("it returns a collection of invites", t => { | |
60 … | + aliceServer.private.publish({ | |
61 … | + module: "secrets", | |
62 … | + type: "invite", | |
63 … | + root: root | |
64 … | + }, [ | |
65 … | + aliceConfig.keys.id, | |
66 … | + bobConfig.keys.id | |
67 … | + ], (err, invite) => { | |
68 … | + pull( | |
69 … | + aliceServer.secrets.invites.stream(), | |
70 … | + pull.drain(msg => { | |
71 … | + t.equal(msg[root].length, 1) | |
72 … | + t.equal(msg[root][0].id, invite.key) | |
73 … | + t.end() | |
74 … | + }) | |
75 … | + ) | |
76 … | + }) | |
43 | 77 … | }) |
Built with git-ssb-web