/* eslint-disable @typescript-eslint/unbound-method */
// need it to test if is function

import axios from 'axios';
import { expect } from 'chai';

import { Shows } from '../src/shows';
import { Movies } from '../src/movies';

describe('Media', function () {
  describe('Shows', function () {
    describe('Class', function () {
      it('should be a function', function () {
        expect(Shows).to.be.a('function');
      });

      it('should be a Shows Class', function () {
        const shows = new Shows({
          client: axios.create(),
          apiUrl: '',
        });

        expect(shows).to.be.instanceOf(Shows);
      });
    });

    describe('#summary', function () {
      it('should be a function', function () {
        const shows = new Shows({
          client: axios.create(),
          apiUrl: '',
        });
        expect(shows.summary).to.be.a('function');
      });

      it('should throw a TypeError', function () {
        const shows = new Shows({
          client: axios.create(),
          apiUrl: '',
        });

        // eslint-disable-next-line @typescript-eslint/ban-ts-comment
        // @ts-ignore
        expect(shows.summary).to.throw(TypeError);
      });
    });

    describe('#people', function () {
      it('should be a function', function () {
        const shows = new Shows({
          client: axios.create(),
          apiUrl: '',
        });
        expect(shows.people).to.be.a('function');
      });

      it('should throw a TypeError', function () {
        const shows = new Shows({
          client: axios.create(),
          apiUrl: '',
        });

        // eslint-disable-next-line @typescript-eslint/ban-ts-comment
        // @ts-ignore
        expect(shows.people).to.throw(TypeError);
      });
    });
  });

  describe('Movies', function () {
    describe('Class', function () {
      it('should be a function', function () {
        expect(Movies).to.be.a('function');
      });

      it('should be a Movies Class', function () {
        const movies = new Movies({
          client: axios.create(),
          apiUrl: '',
        });

        expect(movies).to.be.instanceOf(Movies);
      });
    });

    describe('#summary', function () {
      it('should be a function', function () {
        const movies = new Movies({
          client: axios.create(),
          apiUrl: '',
        });
        expect(movies.summary).to.be.a('function');
      });

      it('should throw a TypeError', function () {
        const movies = new Movies({
          client: axios.create(),
          apiUrl: '',
        });

        // eslint-disable-next-line @typescript-eslint/ban-ts-comment
        // @ts-ignore
        expect(movies.summary).to.throw(TypeError);
      });
    });

    describe('#people', function () {
      it('should be a function', function () {
        const movies = new Movies({
          client: axios.create(),
          apiUrl: '',
        });
        expect(movies.people).to.be.a('function');
      });

      it('should throw a TypeError', function () {
        const movies = new Movies({
          client: axios.create(),
          apiUrl: '',
        });

        // eslint-disable-next-line @typescript-eslint/ban-ts-comment
        // @ts-ignore
        expect(movies.people).to.throw(TypeError);
      });
    });
  });
});
