import cloneDeep from 'lodash-es/cloneDeep';
import { contributorDetail } from 'src/__fixtures__/graphql/contributors';
import * as scheduleUtils from '../schedules';

describe('schedules utils', () => {
    describe('formatSchedulesList', () => {
        it('returns a list of formatted schedules', () => {
            const rawSchedules =
                contributorDetail.nrContributorById.abacusSchedules;
            const formattedList =
                scheduleUtils.formatSchedulesList(rawSchedules);

            expect(formattedList.length).toEqual(rawSchedules.length);
            for (let i = 0; i < formattedList.length; i++) {
                expect(formattedList[i].attachmentCount).toEqual(
                    rawSchedules[i].scheduleAttachments.totalCount
                );
                expect(formattedList[i].isAutoAdd).toEqual(
                    rawSchedules[i].conditions?.autoAdd
                );
                expect(formattedList[i].scheduleId).toEqual(
                    rawSchedules[i].scheduleId
                );
                expect(formattedList[i].scheduleName).toEqual(
                    rawSchedules[i].scheduleName
                );
            }
        });
    });

    describe('reorderSchedulesList', () => {
        it('returns a list of schedules with the autoAdd schedule listed first', () => {
            const rawSchedules =
                contributorDetail.nrContributorById.abacusSchedules;

            const reorderedSchedules =
                scheduleUtils.reorderSchedulesList(rawSchedules);

            expect(reorderedSchedules.length).toEqual(rawSchedules.length);
            expect(reorderedSchedules[0].conditions?.autoAdd).toBe(true);
        });

        it('returns the same list when there is no autoAdd schedule', () => {
            const rawSchedules = cloneDeep(
                contributorDetail.nrContributorById.abacusSchedules
            );
            rawSchedules[0].conditions = { autoAdd: false };

            const reorderedSchedules =
                scheduleUtils.reorderSchedulesList(rawSchedules);

            expect(reorderedSchedules.length).toEqual(rawSchedules.length);
            expect(reorderedSchedules[0].scheduleName).toEqual(
                rawSchedules[0].scheduleName
            );
            expect(reorderedSchedules[1].scheduleName).toEqual(
                rawSchedules[1].scheduleName
            );
            reorderedSchedules.forEach(schedule =>
                expect(schedule.conditions?.autoAdd).toBeFalsy()
            );
        });
    });
});
