all files / lib/__tests__/ basic.test.js

100% Statements 43/43
100% Branches 0/0
100% Functions 14/14
100% Lines 39/39
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117                                                                                                                                                           
import assert from 'assert';
import React from 'react';
import { renderToStaticMarkup } from 'react-dom/server';
import DocumentMeta from '../';
 
describe('DocumentMeta', () => {
  before(() => {
    DocumentMeta.canUseDOM = false;
  });
 
  describe('.rewind()', () => {
    it('clears the mounted instances', () => {
      renderToStaticMarkup(
        React.createElement(DocumentMeta, {title: 'a'},
          React.createElement(DocumentMeta, {title: 'b'},
            React.createElement(DocumentMeta, {title: 'c'})
          )
        )
      );
      assert.deepEqual(DocumentMeta.peek(), {title: 'c'});
      DocumentMeta.rewind();
      assert.strictEqual(DocumentMeta.peek(), undefined);
    });
 
    it('returns the latest document meta', () => {
      const title = 'cheese';
      renderToStaticMarkup(
        React.createElement(DocumentMeta, {title: 'a'},
          React.createElement(DocumentMeta, {title: 'b'},
            React.createElement(DocumentMeta, {title})
          )
        )
      );
      assert.deepEqual(DocumentMeta.rewind(), { title });
    });
 
    it('returns undefined if no mounted instances exist', () => {
      renderToStaticMarkup(
        React.createElement(DocumentMeta, {title: 'a'},
          React.createElement(DocumentMeta, {title: 'b'},
            React.createElement(DocumentMeta, {title: 'c'})
          )
        )
      );
      DocumentMeta.rewind();
      assert.strictEqual(DocumentMeta.peek(), undefined);
    });
  });
 
  describe('.renderAsReact()', () => {
    it('returns an empty array if no meta data has been mounted', () => {
      React.createElement(DocumentMeta, {title: 'a'},
        React.createElement(DocumentMeta, {title: 'b'},
          React.createElement(DocumentMeta, {title: 'c'})
        )
      );
 
      const rendered = DocumentMeta.renderAsReact();
      assert.ok(Array.isArray(rendered));
      assert.strictEqual(rendered.length, 0);
    });
 
    it('returns the latest document meta as an array of React components', () => {
      renderToStaticMarkup(
        React.createElement(DocumentMeta, {title: 'a'},
          React.createElement(DocumentMeta, {title: 'b'},
            React.createElement(DocumentMeta, {title: 'c'})
          )
        )
      );
 
      const rendered = DocumentMeta.renderAsReact();
      assert.ok(Array.isArray(rendered));
      assert.strictEqual(rendered.length, 1);
      assert.strictEqual(rendered[0].type, 'title');
      assert.strictEqual(rendered[0].props.children, 'c');
    });
  });
 
  describe('.renderAsHTML()', () => {
    it('returns an empty string if no meta data has been mounted', () => {
      React.createElement(DocumentMeta, {title: 'a'},
        React.createElement(DocumentMeta, {title: 'b'},
          React.createElement(DocumentMeta, {title: 'c'})
        )
      );
      assert.strictEqual(DocumentMeta.renderAsHTML(), '');
    });
 
    it('returns the latest document meta as HTML', () => {
      renderToStaticMarkup(
        React.createElement(DocumentMeta, {title: 'a'},
          React.createElement(DocumentMeta, {title: 'b'},
            React.createElement(DocumentMeta, {title: 'c'})
          )
        )
      );
      assert.strictEqual(DocumentMeta.renderAsHTML(), '<title>c</title>');
    });
  });
 
 
  describe('container element with children', () => {
    it('renders the children', () => {
      const title = 'foo';
      const markup = renderToStaticMarkup(
        <DocumentMeta title={ title }>
          <div>Child element</div>
        </DocumentMeta>
      );
 
      assert.strictEqual(markup, '<div>Child element</div>');
      assert.deepEqual(DocumentMeta.rewind(), { title });
    });
  });
});