import './index';

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

        beforeEach(ngModule('ticket'));

        beforeEach(inject(($componentController, $rootScope, _$httpBackend_) => {
            $httpBackend = _$httpBackend_;
            let $scope = $rootScope.$new();
            const $element = angular.element('<vn-dialog></vn-dialog>');
            controller = $componentController('vnTicketSms', {$element, $scope});
            controller.$.message = {
                input: {
                    value: 'My SMS'
                }
            };
        }));

        describe('onResponse()', () => {
            it('should perform a POST query and show a success snackbar', () => {
                let params = {ticketId: 11, destinationFk: 1101, destination: 111111111, message: 'My SMS'};
                controller.sms = {ticketId: 11, destinationFk: 1101, destination: 111111111, message: 'My SMS'};

                jest.spyOn(controller.vnApp, 'showMessage');
                $httpBackend.expect('POST', `Tickets/11/sendSms`, params).respond(200, params);

                controller.onResponse();
                $httpBackend.flush();

                expect(controller.vnApp.showMessage).toHaveBeenCalledWith('SMS sent!');
            });

            it('should call onResponse without the destination and show an error snackbar', () => {
                controller.sms = {destinationFk: 1101, message: 'My SMS'};

                jest.spyOn(controller.vnApp, 'showError');

                controller.onResponse();

                expect(controller.vnApp.showError).toHaveBeenCalledWith(`The destination can't be empty`);
            });

            it('should call onResponse without the message and show an error snackbar', () => {
                controller.sms = {destinationFk: 1101, destination: 222222222};

                jest.spyOn(controller.vnApp, 'showError');

                controller.onResponse();

                expect(controller.vnApp.showError).toHaveBeenCalledWith(`The message can't be empty`);
            });
        });

        describe('charactersRemaining()', () => {
            it('should return the characters remaining in a element', () => {
                controller.$.message = {
                    input: {
                        value: 'My message 0€'
                    }
                };

                let result = controller.charactersRemaining();

                expect(result).toEqual(145);
            });
        });
    });
});