sbot/api/test/names.js

221 lines
6.5 KiB
JavaScript

var multicb = require('multicb')
var tape = require('tape')
var u = require('./util')
tape('names default to self-assigned', function (t) {
var sbot = u.newserver()
u.makeusers(sbot, {
alice: { follows: ['bob', 'charlie'] },
bob: {},
charlie: {}
}, function (err, users) {
if (err) throw err
sbot.patchwork.getNamesById(function (err, names) {
if (err) throw err
t.equal(names[users.alice.id], 'alice')
t.equal(names[users.bob.id], 'bob')
t.equal(names[users.charlie.id], 'charlie')
sbot.patchwork.getIdsByName(function (err, ids) {
if (err) throw err
t.equal(ids.alice, users.alice.id)
t.equal(ids.bob, users.bob.id)
t.equal(ids.charlie, users.charlie.id)
t.end()
sbot.close()
})
})
})
})
tape('the local users name assignments take precedence', function (t) {
var sbot = u.newserver()
u.makeusers(sbot, {
alice: { follows: ['bob', 'charlie'] },
bob: {},
charlie: {}
}, function (err, users) {
if (err) throw err
var done = multicb()
users.alice.add({ type: 'about', about: users.bob.id, name: 'robert' }, done())
users.alice.add({ type: 'about', about: users.charlie.id, name: 'chuck' }, done())
done(function (err) {
if (err) throw err
sbot.patchwork.getNamesById(function (err, names) {
if (err) throw err
t.equal(names[users.alice.id], 'alice')
t.equal(names[users.bob.id], 'robert')
t.equal(names[users.charlie.id], 'chuck')
sbot.patchwork.getIdsByName(function (err, ids) {
if (err) throw err
t.equal(ids.alice, users.alice.id)
t.equal(ids.robert, users.bob.id)
t.equal(ids.chuck, users.charlie.id)
t.end()
sbot.close()
})
})
})
})
})
tape('conflicting names between followeds are tracked as action items', function (t) {
var sbot = u.newserver()
u.makeusers(sbot, {
alice: { follows: ['bob', 'charlie'] },
bob: {},
charlie: {}
}, function (err, users) {
if (err) throw err
users.charlie.add({ type: 'about', about: users.charlie.id, name: 'bob' }, function (err) {
if (err) throw err
sbot.patchwork.getNamesById(function (err, names) {
if (err) throw err
t.equal(names[users.alice.id], 'alice')
t.equal(names[users.bob.id], 'bob')
t.equal(names[users.charlie.id], 'bob')
sbot.patchwork.getIdsByName(function (err, ids) {
if (err) throw err
t.equal(ids.alice, users.alice.id)
t.equal(ids.bob.length, 2)
sbot.patchwork.getActionItems(function (err, items) {
if (err) throw err
t.equal(items.bob.type, 'name-conflict')
t.equal(items.bob.name, 'bob')
t.equal(items.bob.ids.length, 2)
t.end()
sbot.close()
})
})
})
})
})
})
tape('conflicting names are resolved by unfollowing', function (t) {
var sbot = u.newserver()
u.makeusers(sbot, {
alice: { follows: ['bob', 'charlie'] },
bob: {},
charlie: {}
}, function (err, users) {
if (err) throw err
users.charlie.add({ type: 'about', about: users.charlie.id, name: 'bob' }, function (err) {
if (err) throw err
users.alice.add({ type: 'contact', contact: users.bob.id, following: false }, function (err) {
if (err) throw err
sbot.patchwork.getNamesById(function (err, names) {
if (err) throw err
t.equal(names[users.alice.id], 'alice')
t.equal(names[users.bob.id], 'bob')
t.equal(names[users.charlie.id], 'bob')
sbot.patchwork.getIdsByName(function (err, ids) {
if (err) throw err
t.equal(ids.alice, users.alice.id)
t.equal(ids.bob, users.charlie.id)
sbot.patchwork.getActionItems(function (err, items) {
if (err) throw err
t.equal(Object.keys(items).length, 0)
t.end()
sbot.close()
})
})
})
})
})
})
})
tape('conflicting names are resolved by one of the users self-assigning a new name', function (t) {
var sbot = u.newserver()
u.makeusers(sbot, {
alice: { follows: ['bob', 'charlie'] },
bob: {},
charlie: {}
}, function (err, users) {
if (err) throw err
users.charlie.add({ type: 'about', about: users.charlie.id, name: 'bob' }, function (err) {
if (err) throw err
users.bob.add({ type: 'about', about: users.bob.id, name: 'robert' }, function (err) {
if (err) throw err
sbot.patchwork.getNamesById(function (err, names) {
if (err) throw err
t.equal(names[users.alice.id], 'alice')
t.equal(names[users.bob.id], 'robert')
t.equal(names[users.charlie.id], 'bob')
sbot.patchwork.getIdsByName(function (err, ids) {
if (err) throw err
t.equal(ids.alice, users.alice.id)
t.equal(ids.robert, users.bob.id)
t.equal(ids.bob, users.charlie.id)
sbot.patchwork.getActionItems(function (err, items) {
if (err) throw err
t.equal(Object.keys(items).length, 0)
t.end()
sbot.close()
})
})
})
})
})
})
})
tape('conflicting names are resolved by the local user assigning a new name', function (t) {
var sbot = u.newserver()
u.makeusers(sbot, {
alice: { follows: ['bob', 'charlie'] },
bob: {},
charlie: {}
}, function (err, users) {
if (err) throw err
users.charlie.add({ type: 'about', about: users.charlie.id, name: 'bob' }, function (err) {
if (err) throw err
users.alice.add({ type: 'about', about: users.bob.id, name: 'robert' }, function (err) {
if (err) throw err
sbot.patchwork.getNamesById(function (err, names) {
if (err) throw err
t.equal(names[users.alice.id], 'alice')
t.equal(names[users.bob.id], 'robert')
t.equal(names[users.charlie.id], 'bob')
sbot.patchwork.getIdsByName(function (err, ids) {
if (err) throw err
t.equal(ids.alice, users.alice.id)
t.equal(ids.robert, users.bob.id)
t.equal(ids.bob, users.charlie.id)
sbot.patchwork.getActionItems(function (err, items) {
if (err) throw err
t.equal(Object.keys(items).length, 0)
t.end()
sbot.close()
})
})
})
})
})
})
})