becca_mocking.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. const BNote = require('../../src/becca/entities/bnote');
  2. const BBranch = require('../../src/becca/entities/bbranch');
  3. const BAttribute = require('../../src/becca/entities/battribute');
  4. const becca = require('../../src/becca/becca');
  5. const randtoken = require('rand-token').generator({source: 'crypto'});
  6. /** @returns {BNote} */
  7. function findNoteByTitle(searchResults, title) {
  8. return searchResults
  9. .map(sr => becca.notes[sr.noteId])
  10. .find(note => note.title === title);
  11. }
  12. class NoteBuilder {
  13. constructor(note) {
  14. this.note = note;
  15. }
  16. label(name, value = '', isInheritable = false) {
  17. new BAttribute({
  18. attributeId: id(),
  19. noteId: this.note.noteId,
  20. type: 'label',
  21. isInheritable,
  22. name,
  23. value
  24. });
  25. return this;
  26. }
  27. relation(name, targetNote) {
  28. new BAttribute({
  29. attributeId: id(),
  30. noteId: this.note.noteId,
  31. type: 'relation',
  32. name,
  33. value: targetNote.noteId
  34. });
  35. return this;
  36. }
  37. child(childNoteBuilder, prefix = "") {
  38. new BBranch({
  39. branchId: id(),
  40. noteId: childNoteBuilder.note.noteId,
  41. parentNoteId: this.note.noteId,
  42. prefix,
  43. notePosition: 10
  44. });
  45. return this;
  46. }
  47. }
  48. function id() {
  49. return randtoken.generate(10);
  50. }
  51. function note(title, extraParams = {}) {
  52. const row = Object.assign({
  53. noteId: id(),
  54. title: title,
  55. type: 'text',
  56. mime: 'text/html'
  57. }, extraParams);
  58. const note = new BNote(row);
  59. return new NoteBuilder(note);
  60. }
  61. module.exports = {
  62. NoteBuilder,
  63. findNoteByTitle,
  64. note
  65. };