import {
  getEmbedSizeParams,
  getUrlWithoutEmbedParams,
} from './index.selectors';


describe(`index selectors`, () => {

  describe(`getUrlWithoutEmbedParams`, () => {

    it(`should return a url without its embed params`, () => {
      const source = 'https://rest.api/resource?a=1&embed=2&b=3&embed=4/5&c=6&embed=7/8/9';
      const result = getUrlWithoutEmbedParams(source);
      expect(result).toBe('https://rest.api/resource?a=1&b=3&c=6');
    });

    it(`should return a url without embed params unmodified`, () => {
      const source = 'https://rest.api/resource?a=1&b=3&c=6';
      const result = getUrlWithoutEmbedParams(source);
      expect(result).toBe(source);
    });

    it(`should return a string that isn't a url unmodified`, () => {
      const source = 'a=1&embed=2&b=3&embed=4/5&c=6&embed=7/8/9';
      const result = getUrlWithoutEmbedParams(source);
      expect(result).toBe(source);
    });

    it(`should return undefined or null unmodified`, () => {
      expect(getUrlWithoutEmbedParams(undefined)).toBe(undefined);
      expect(getUrlWithoutEmbedParams(null)).toBe(null);
    });

  });

  describe(`getEmbedSizeParams`, () => {

    it(`url with single embed size param => should return list with ['subcommunities' - size]`, () => {
      const source = 'https://rest.api/core/communities/search/top?page=0&size=50&sort=dc.title,ASC&embed.size=subcommunities=5&embed=subcommunities';
      const result = getEmbedSizeParams(source);
      expect(result).toHaveSize(1);
      expect(result[0]).toEqual({ name: 'subcommunities', size: 5 });
    });

    it(`url with multiple embed size param => should return list with {name, size}`, () => {
      const source = 'https://rest.api/core/communities/search/top?page=0&size=50&sort=dc.title,ASC&embed.size=subcommunities=5&embed=subcommunities&embed.size=collections=1&embed=collections';
      const result = getEmbedSizeParams(source);
      expect(result).toHaveSize(2);
      expect(result[0]).toEqual({ name: 'subcommunities', size: 5 });
      expect(result[1]).toEqual({ name: 'collections', size: 1 });
    });

    it(`url without params => should return empty list`, () => {
      const source = 'https://rest.api/core/collections/uuid';
      expect(getEmbedSizeParams(source)).toHaveSize(0);
    });

    it(`url without embed size params => should return empty list`, () => {
      const source = 'https://rest.api/core/collections/uuid?page=0&size=50';
      expect(getEmbedSizeParams(source)).toHaveSize(0);
    });

    it(`undefined or null url => should return empty list`, () => {
      expect(getEmbedSizeParams(undefined)).toHaveSize(0);
      expect(getEmbedSizeParams(null)).toHaveSize(0);
    });

  });

});
