import './index';

describe('Client', () => {
    describe('Component vnClientDmsEdit', () => {
        let controller;
        let $scope;
        let $httpBackend;

        beforeEach(ngModule('client'));

        beforeEach(inject(($componentController, $rootScope, _$httpBackend_) => {
            $scope = $rootScope.$new();
            $httpBackend = _$httpBackend_;
            const $element = angular.element('<vn-client-dms-edit></vn-client-dms-edit>');
            controller = $componentController('vnClientDmsEdit', {$element, $scope});
            controller._client = {id: 1};
            controller.$params = {dmsId: 1};
        }));

        describe('client() setter', () => {
            it('should set the client data and then call setDefaultParams() and getAllowedContentTypes()', () => {
                jest.spyOn(controller, 'setDefaultParams');
                jest.spyOn(controller, 'getAllowedContentTypes');
                controller._client = undefined;
                controller.client = {
                    id: 15
                };

                expect(controller.setDefaultParams).toHaveBeenCalledWith();
                expect(controller.client).toBeDefined();
                expect(controller.getAllowedContentTypes).toHaveBeenCalledWith();
            });
        });

        describe('setDefaultParams()', () => {
            it('should perform a GET query and define the dms property on controller', () => {
                const dmsId = 1;
                const expectedResponse = {
                    reference: 1101,
                    warehouseFk: 1,
                    companyFk: 442,
                    dmsTypeFk: 12,
                    description: 'Test',
                    hasFile: false,
                    hasFileAttached: false
                };

                $httpBackend.expect('GET', `Dms/${dmsId}`).respond(expectedResponse);
                controller.setDefaultParams();
                $httpBackend.flush();

                expect(controller.dms).toBeDefined();
                expect(controller.dms.reference).toEqual(1101);
                expect(controller.dms.dmsTypeId).toEqual(12);
            });
        });

        describe('onFileChange()', () => {
            it('should set dms hasFileAttached property to true if has any files', () => {
                const files = [{id: 1, name: 'MyFile'}];
                controller.dms = {hasFileAttached: false};
                controller.onFileChange(files);
                $scope.$apply();

                expect(controller.dms.hasFileAttached).toBeTruthy();
            });
        });

        describe('getAllowedContentTypes()', () => {
            it('should make an HTTP GET request to get the allowed content types', () => {
                const expectedResponse = ['image/png', 'image/jpg'];
                $httpBackend.expect('GET', `DmsContainers/allowedContentTypes`).respond(expectedResponse);
                controller.getAllowedContentTypes();
                $httpBackend.flush();

                expect(controller.allowedContentTypes).toBeDefined();
                expect(controller.allowedContentTypes).toEqual('image/png, image/jpg');
            });
        });
    });
});