import './index';

describe('Ticket', () => {
    describe('Component vnTicketSummary', () => {
        let controller;
        let $httpBackend;

        beforeEach(ngModule('ticket'));

        beforeEach(inject(($componentController, _$httpBackend_) => {
            $httpBackend = _$httpBackend_;
            const $element = angular.element('<vn-ticket-summary></vn-ticket-summary>');
            controller = $componentController('vnTicketSummary', {$element});
            controller.ticket = {id: 1};
        }));

        describe('ticket()', () => {
            it('should perform a GET query and define the summary property', () => {
                let res = {id: 1, nickname: 'Batman'};
                $httpBackend.when('GET', `Tickets/1/summary`).respond(200, res);
                controller.ticket = {id: 1};
                $httpBackend.flush();

                expect(controller.summary).toBeDefined();
                expect(controller.summary.nickname).toEqual('Batman');
            });
        });

        describe('formattedAddress()', () => {
            it('should return the full fromatted address with city and province', () => {
                controller.summary = {
                    address: {
                        province: {
                            name: 'Gotham'
                        },
                        street: '1007 Mountain Drive',
                        postalCode: 46060,
                        city: 'Gotham'
                    }
                };

                expect(controller.formattedAddress).toEqual('1007 Mountain Drive - 46060 - Gotham (Gotham)');
            });
        });

        describe('state()', () => {
            it('should change the state', () => {
                jest.spyOn(controller.vnApp, 'showSuccess');
                const value = 'myTicketState';

                let res = {id: 1, nickname: 'myNickname'};
                $httpBackend.when('GET', `Tickets/1/summary`).respond(200, res);
                $httpBackend.expectPOST(`Tickets/state`).respond(200, 'ok');
                controller.state(value);
                $httpBackend.flush();

                expect(controller.vnApp.showSuccess).toHaveBeenCalledWith('Data saved!');
            });
        });
    });
});