node package manager

creosote

creosote is a Reactive interface for an express server

i hope, probably in vain, that this test is good enough documentation for now

'use strict';
const Creosote = require('creosote');
const fetch = require('node-fetch');
const test = require('tape');
 
test('parses JSON from a post body', (t) => {
  t.plan(1);
  let creosote = Creosote({ port: process.env.PORT, expect: 'json' });
  creosote.posts('/repos/:name/:tag')
  .do(o => o.res.status(200).end())
  .reduce(
    (acc, c) => {
      let name = c.params.name;
      let tag = c.params.tag;
      let out = Object.assign({}, acc);
      out[name] = Object.assign({}, out[name]);
      out[name][tag] = c.req.body;
      return out;
    },
    {}
  ).subscribe((statuses) => {
    t.same(
      statuses,
      {
        sam: {
          '1.0.0': {
            buildStatus: 'failed'
          }
        },
        diane: {
          '1.2.1': {
            buildStatus: 'succeeded'
          }
        }
      },
      'json was parsed'
    );
  });
  fetch(`http://localhost:${port}/repos/sam/1.0.0`, {
    method: 'post',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      buildStatus: 'failed'
    })
  })
  .then(() => fetch(`http://localhost:${port}/repos/diane/1.2.1`, {
    method: 'post',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      buildStatus: 'succeeded'
    })
  }))
  .then(() => creosote.unmount())
  .catch(t.fail);
});
 
test('parses form data from a post body', (t) => {
  t.plan(1);
  let creosote = Creosote({ port: process.env.PORT, expect: 'urlencoded' });
  creosote.posts('/repos/:name/:tag')
  .do(o => o.res.status(200).end())
  .reduce(
    (acc, c) => {
      let name = c.params.name;
      let tag = c.params.tag;
      let out = Object.assign({}, acc);
      out[name] = Object.assign({}, out[name]);
      out[name][tag] = c.req.body;
      return out;
    },
    {}
  ).subscribe((statuses) => {
    t.same(
      statuses,
      {
        sam: {
          '1.0.0': {
            buildStatus: 'red',
            commit: '12345'
          },
          '1.2.1': {
            buildStatus: 'green',
            commit: '67890'
          }
        }
      },
      'form data was parsed'
    );
  });
  fetch(`http://localhost:${port}/repos/sam/1.0.0`, {
    method: 'post',
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
    body: 'buildStatus=red&commit=12345'
  })
  .then(() => fetch(`http://localhost:${port}/repos/sam/1.2.1`, {
    method: 'post',
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
    body: 'buildStatus=green&commit=67890'
  }))
  .then(() => creosote.unmount())
  .catch(t.fail);
});