import { sendToPaymentProvider } from './../../libs/paymentWrapper';
import { Request, Response } from 'express';
import { PaymentData } from '../../types/paymentdata';

describe('payment wrapper tests', () => {
   
    const res = { redirect: jest.fn() } as unknown as Response;
        const req = {
            session: { paymentData:{} as PaymentData } 
         
        } as unknown as Request

        beforeEach(()=>{
            req.session.paymentData.paymentstatus = 0;
            req.session.paymentData.servicecode = 'GWASTE';
            req.session.paymentData.serviceref = 'GW-100110668187';
        })

        afterEach(()=>{
            jest.clearAllMocks();
        })

    test('redirect to payment provider with servicecode and serviceref', () => {
        
        sendToPaymentProvider(req, res);

        expect(res.redirect).toHaveBeenCalledWith('http://paymentportaldev.northumberland.gov.uk/Payment/CheckDetails.aspx?s=GWASTE&r=GW-100110668187');
    });

    test('expect payment status on attempt to be changed to 50', () => {
        
        sendToPaymentProvider(req, res);

        expect(req.session.paymentData.paymentstatus).toBe(50);
    });

    //test servicecode only - keep tests independant
    test('redirect to payment provider with servicecode ctax', () => {
        
        req.session.paymentData.servicecode = 'CTAX';

        sendToPaymentProvider(req, res);

        expect(res.redirect).toHaveBeenCalledWith('http://paymentportaldev.northumberland.gov.uk/Payment/CheckDetails.aspx?s=CTAX&r=GW-100110668187');
    });

    //test servicecode
    test('redirect to payment provider with service ref', () => {
        
      
        req.session.paymentData.serviceref = '100110668187';

        sendToPaymentProvider(req, res);

        expect(res.redirect).toHaveBeenCalledWith('http://paymentportaldev.northumberland.gov.uk/Payment/CheckDetails.aspx?s=GWASTE&r=100110668187');
    });

   /* test('empty page param throws error', () => {
        const res = { render: jest.fn() } as unknown as Response;
        const req = {
            params: {},
            session: { id: '0', formErrors: [] },
            query: { hasError: false }
        } as unknown as Request

        expect(() => { pageController(req, res) }).toThrow();

    }); */
});