import './index';
import watcher from 'core/mocks/watcher';

describe('Client', () => {
    describe('Component vnClientAddressCreate', () => {
        let controller;
        let $componentController;
        let $state;

        beforeEach(ngModule('client'));

        beforeEach(angular.mock.inject((_$componentController_, _$state_) => {
            $componentController = _$componentController_;
            $state = _$state_;
            $state.params.id = '1234';
            controller = $componentController('vnClientAddressCreate', {$state});
            controller.$.watcher = watcher;
            controller.$.watcher.submit = () => {
                return {
                    then: callback => {
                        callback({data: {id: 124}});
                    }
                };
            };
            controller.client = {id: 101, defaultAddressFk: 121};
        }));

        it('should define and set address property', () => {
            expect(controller.data.address.clientFk).toBe(1234);
            expect(controller.data.address.isActive).toBe(true);
        });

        describe('onSubmit()', () => {
            it('should perform a PATCH and not set value to defaultAddressFk property', () => {
                spyOn(controller.$state, 'go');
                controller.data.isDefaultAddress = false;
                controller.onSubmit();

                expect(controller.client.defaultAddressFk).toEqual(121);
                expect(controller.$state.go).toHaveBeenCalledWith('client.card.address.index');
            });

            it('should perform a PATCH and set a value to defaultAddressFk property', () => {
                spyOn(controller.$state, 'go');
                controller.data.isDefaultAddress = true;
                controller.onSubmit();

                expect(controller.client.defaultAddressFk).toEqual(124);
                expect(controller.$state.go).toHaveBeenCalledWith('client.card.address.index');
            });
        });

        describe('postcodeSelection() setter', () => {
            it(`should set the town, province and contry properties`, () => {
                controller.postcodeSelection = {
                    townFk: 1,
                    code: 46001,
                    town: {
                        id: 1,
                        name: 'New York',
                        province: {
                            id: 1,
                            name: 'New york',
                            country: {
                                id: 2,
                                name: 'USA'
                            }
                        }
                    }
                };

                expect(controller.address.city).toEqual('New York');
                expect(controller.address.provinceFk).toEqual(1);
                expect(controller.address.countryFk).toEqual(2);
            });
        });
    });
});