import * as cookieHelper from '@/helpers/cookie-helper';
import {
    isAnalyticsSessionStillActive,
    isSavedSessionStillActive,
    getDateForSavedSessionTimeout
} from '@/helpers/session-helper';
import applicationConfig from '@/constants/application-config';

describe('isAnalyticsSessionStillActive', () => {
    test('isAnalyticsSessionStillActive, should return true', () => {
        // Arrange
        const mockDate = new Date(new Date().toUTCString());
        mockDate.setDate(mockDate.getDate() + 1);

        cookieHelper.getISSCookie = jest
            .spyOn(cookieHelper, 'getISSCookie')
            .mockReturnValue({ LastTouched: mockDate });

        // Act
        const result = isAnalyticsSessionStillActive();

        // Assert
        expect(result).toBe(true);
    });

    test('isAnalyticsSessionStillActive, should return false', () => {
        // Arrange
        const mockDate = new Date(new Date().toUTCString());
        mockDate.setDate(mockDate.getDate() - 1);

        cookieHelper.getISSCookie = jest
            .spyOn(cookieHelper, 'getISSCookie')
            .mockReturnValue({ LastTouched: mockDate });

        // Act
        const result = isAnalyticsSessionStillActive();

        // Assert
        expect(result).toBe(false);
    });
});

describe('isSavedSessionStillActive', () => {
    test('isSavedSessionStillActive, should return true', () => {
        // Arrange
        const mockDate = new Date(new Date().toUTCString());
        mockDate.setDate(mockDate.getDate() + 1);

        cookieHelper.getISSCookie = jest
            .spyOn(cookieHelper, 'getISSCookie')
            .mockReturnValue({ SavedSessionTimeoutDate: mockDate });

        // Act
        const result = isSavedSessionStillActive();

        // Assert
        expect(result).toBe(true);
    });

    test('isSavedSessionStillActive, should return false', () => {
        // Arrange
        const mockDate = new Date(new Date().toUTCString());
        mockDate.setDate(mockDate.getDate() - 1);

        cookieHelper.getISSCookie = jest
            .spyOn(cookieHelper, 'getISSCookie')
            .mockReturnValue({ SavedSessionTimeoutDate: mockDate });

        // Act
        const result = isSavedSessionStillActive();

        // Assert
        expect(result).toBe(false);
    });
});

describe('getDateForSavedSessionTimeout', () => {
    test('getDateForSavedSessionTimeout, should equal application config setting', () => {
        // Arrange
        const currentDate = new Date(new Date().toUTCString());
        currentDate.setDate(currentDate.getDate() + applicationConfig.SAVED_SESSION_TIMEOUT_DAYS);

        // Act
        const result = getDateForSavedSessionTimeout();

        // Assert
        expect(result).toEqual(currentDate.toUTCString());
    });
});
