import { makeUserMatcher } from '../user';

describe('User field parsing', () => {
  beforeEach(() => {
    /* eslint-disable camelcase */
    window.booru.interactions = [
      { image_id: 0, user_id: 0, interaction_type: 'faved', value: null },
      { image_id: 0, user_id: 0, interaction_type: 'voted', value: 'up' },
      { image_id: 1, user_id: 0, interaction_type: 'voted', value: 'down' },
      { image_id: 2, user_id: 0, interaction_type: 'hidden', value: null },
    ];
    /* eslint-enable camelcase */
  });

  it('should parse my:faves', () => {
    const matcher = makeUserMatcher('faves');

    expect(matcher('', 'my', 0)).toBe(true);
    expect(matcher('', 'my', 1)).toBe(false);
    expect(matcher('', 'my', 2)).toBe(false);
  });

  it('should parse my:upvotes', () => {
    const matcher = makeUserMatcher('upvotes');

    expect(matcher('', 'my', 0)).toBe(true);
    expect(matcher('', 'my', 1)).toBe(false);
    expect(matcher('', 'my', 2)).toBe(false);
  });

  it('should parse my:downvotes', () => {
    const matcher = makeUserMatcher('downvotes');

    expect(matcher('', 'my', 0)).toBe(false);
    expect(matcher('', 'my', 1)).toBe(true);
    expect(matcher('', 'my', 2)).toBe(false);
  });

  it('should not parse other my: fields', () => {
    const hiddenMatcher = makeUserMatcher('hidden');
    const watchedMatcher = makeUserMatcher('watched');

    expect(hiddenMatcher('', 'my', 0)).toBe(false);
    expect(hiddenMatcher('', 'my', 1)).toBe(false);
    expect(hiddenMatcher('', 'my', 2)).toBe(false);
    expect(watchedMatcher('', 'my', 0)).toBe(false);
    expect(watchedMatcher('', 'my', 1)).toBe(false);
    expect(watchedMatcher('', 'my', 2)).toBe(false);
  });
});
