deserializer-manager-spec.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. const DeserializerManager = require('../src/deserializer-manager');
  2. describe('DeserializerManager', function() {
  3. let manager = null;
  4. class Foo {
  5. static deserialize({ name }) {
  6. return new Foo(name);
  7. }
  8. constructor(name) {
  9. this.name = name;
  10. }
  11. }
  12. beforeEach(() => (manager = new DeserializerManager()));
  13. describe('::add(deserializer)', () =>
  14. it('returns a disposable that can be used to remove the manager', function() {
  15. const disposable = manager.add(Foo);
  16. expect(
  17. manager.deserialize({ deserializer: 'Foo', name: 'Bar' })
  18. ).toBeDefined();
  19. disposable.dispose();
  20. spyOn(console, 'warn');
  21. expect(
  22. manager.deserialize({ deserializer: 'Foo', name: 'Bar' })
  23. ).toBeUndefined();
  24. }));
  25. describe('::deserialize(state)', function() {
  26. beforeEach(() => manager.add(Foo));
  27. it("calls deserialize on the manager for the given state object, or returns undefined if one can't be found", function() {
  28. spyOn(console, 'warn');
  29. const object = manager.deserialize({ deserializer: 'Foo', name: 'Bar' });
  30. expect(object.name).toBe('Bar');
  31. expect(manager.deserialize({ deserializer: 'Bogus' })).toBeUndefined();
  32. });
  33. describe('when the manager has a version', function() {
  34. beforeEach(() => (Foo.version = 2));
  35. describe('when the deserialized state has a matching version', () =>
  36. it('attempts to deserialize the state', function() {
  37. const object = manager.deserialize({
  38. deserializer: 'Foo',
  39. version: 2,
  40. name: 'Bar'
  41. });
  42. expect(object.name).toBe('Bar');
  43. }));
  44. describe('when the deserialized state has a non-matching version', () =>
  45. it('returns undefined', function() {
  46. expect(
  47. manager.deserialize({
  48. deserializer: 'Foo',
  49. version: 3,
  50. name: 'Bar'
  51. })
  52. ).toBeUndefined();
  53. expect(
  54. manager.deserialize({
  55. deserializer: 'Foo',
  56. version: 1,
  57. name: 'Bar'
  58. })
  59. ).toBeUndefined();
  60. expect(
  61. manager.deserialize({ deserializer: 'Foo', name: 'Bar' })
  62. ).toBeUndefined();
  63. }));
  64. });
  65. });
  66. });