matthsc/gigaset-elements-api

View on GitHub
test-data/load-and-merge.ts

Summary

Maintainability
A
0 mins
Test Coverage
/* eslint-disable no-console */
import "dotenv/config";
import { IBaseStationRoot, IElementRoot, IEventRoot } from "../src";
import { loadBaseStations, loadElements, loadEvents } from ".";
import {
  loadJsonFile,
  saveBaseStations,
  saveElements,
  saveEvents,
} from "./data-loader";
import { mergeTestData } from "./data-tools";
import { printStatsFromJson } from "./generate-tools";
import { resolve } from "path";

const runMe = async () => {
  // load new data
  const {
    bs: newBaseRoot,
    elements: newElementRoot,
    events: newEventRoot,
  } = await loadJsonFile<{
    bs: IBaseStationRoot;
    elements: IElementRoot;
    events: IEventRoot;
  }>(resolve(__dirname, "load-and-merge.json"), true);

  // load existing data
  const [oldBaseRoot, oldElementRoot, oldEventRoot] = await Promise.all([
    loadBaseStations(true),
    loadElements(true),
    loadEvents(true),
  ]);
  await printStatsFromJson("before");

  // merge data
  const [mergedBaseRoots, mergedElementRoots, mergedEventRoots] = mergeTestData(
    [oldBaseRoot, newBaseRoot],
    [oldElementRoot, newElementRoot],
    [oldEventRoot, newEventRoot],
  );

  // save data
  await saveBaseStations(mergedBaseRoots);
  await saveElements(mergedElementRoots);
  await saveEvents(mergedEventRoots);
  await printStatsFromJson("after");
};

// TODO: after dropping NodeJS 12, we might be able to use top level await and try/catch
runMe().catch((e) => console.error(e));