wkdhkr/dedupper

View on GitHub
__tests__/services/fs/contents/FFProbeService.test.js

Summary

Maintainability
A
0 mins
Test Coverage
/** @flow */

import { default as Subject } from "../../../../src/services/fs/contents/FFProbeService";
import TestHelper from "../../../../src/helpers/TestHelper";

describe(Subject.name, () => {
  beforeEach(() => {
    jest.resetModules();
  });

  const loadSubject = async () =>
    (await import("../../../../src/services/fs/contents/FFProbeService"))
      .default;

  describe("read", () => {
    it("get mkv file resolution", async () => {
      jest.doMock("child-process-promise", () => ({
        exec: () =>
          Promise.resolve({
            stdout: "streams_stream_0_width=320\nstreams_stream_0_height=240",
            stderr: ""
          })
      }));
      const FFProbeService = await loadSubject();
      const subject = new FFProbeService();
      expect(
        await subject.read(TestHelper.sampleFile.video.mkv.default)
      ).toMatchObject({
        width: 320,
        height: 240,
        ratio: 320 / 240,
        damaged: false
      });
    });

    it("fail with empty file", async () => {
      jest.doMock("child-process-promise", () => ({
        exec: () =>
          Promise.resolve({
            stdout: "",
            stderr: "ERROR"
          })
      }));
      const FFProbeService = await loadSubject();
      const subject = new FFProbeService();
      expect(
        await subject.read(TestHelper.sampleFile.video.mkv.empty)
      ).toMatchObject({
        width: 0,
        height: 0,
        ratio: 0,
        damaged: true
      });
    });

    it("fail with corrupt file", async () => {
      jest.doMock("child-process-promise", () => ({
        exec: () =>
          Promise.resolve({
            stdout: "streams_stream_0_width=320\nstreams_stream_0_height=240",
            stderr: "ERROR"
          })
      }));
      const FFProbeService = await loadSubject();
      const subject = new FFProbeService();
      expect(
        await subject.read(TestHelper.sampleFile.video.mkv.corrupt)
      ).toMatchObject({
        width: 320,
        height: 240,
        ratio: 320 / 240,
        damaged: true
      });
    });

    it("get mp3 file hash", async () => {
      jest.doMock("child-process-promise", () => ({
        exec: () =>
          Promise.resolve({
            stdout: JSON.stringify({ streams: [{ extradata_hash: "aaa" }] }),
            stderr: ""
          })
      }));
      const FFProbeService = await loadSubject();
      const subject = new FFProbeService();
      expect(
        await subject.readForAudio(TestHelper.sampleFile.audio.mp3.default)
      ).toMatchObject({
        extradata_hash: "aaa",
        damaged: false
      });
    });
  });
});