JSFiddle - React, Tailwind, and code Playground

by Vladymyr Shevchuk

JavaScript

export default (fixturesPattern, options = { startTime: Date.now() }) => {
  const fixtures = [];

  checkExpectIndexes();

  fixturesPattern.events.forEach((interval, index) => {
    const currentIntervalMode = Object.keys(interval)[0];
    const prevInterval = fixturesPattern.events[index + 1] || { UNKNOWN: Infinity };
    const prevIntervalMode = Object.keys(prevInterval)[0];
    const prevIntervalDuration = prevInterval[prevIntervalMode];

    const obj = {
      ts: 0,
      event: currentIntervalMode,
      previous: prevIntervalMode,
      previousDuration: hoursToMiliseconds(prevIntervalDuration)
    };

    fixtures.push(obj);
  });

  fixtures.forEach((fixture, index) => {
    if (index === 0) {
      fixture.ts = options.startTime;
    } else {
      const prevFixture = fixtures[index - 1];

      fixture.ts = prevFixture.ts - prevFixture.previousDuration;
    }
  });

  function checkExpectIndexes() {
    const len = fixturesPattern.events.length - 1;

    if (fixturesPattern.expect) {
      fixturesPattern.expect.forEach(item => {
        if (item > len || item < 0) {
          throw Error(`Expect array has incorrect index: ${item}`);
        }
      });
    }
  }

  const expected = fixturesPattern.expect ?
    fixtures.filter((fixture, index) => fixturesPattern.expect.indexOf(index) >= 0) :
    [];

  return {
    fixtures,
    expected
  };
};