From bc3195da0a44170eabfde6b6d601381345bf818a Mon Sep 17 00:00:00 2001 From: Eric Eastwood Date: Mon, 16 Oct 2017 10:58:55 -0500 Subject: Add lazy option to UserAvatarImage --- .../components/user_avatar/user_avatar_image.vue | 31 +++++++--- ...-lazy-option-to-user-avatar-image-component.yml | 5 ++ .../user_avatar/user_avatar_image_spec.js | 70 +++++++++++++++------- 3 files changed, 78 insertions(+), 28 deletions(-) create mode 100644 changelogs/unreleased/add-lazy-option-to-user-avatar-image-component.yml diff --git a/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_image.vue b/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_image.vue index dd9a2ebb184..1ac61a3c39b 100644 --- a/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_image.vue +++ b/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_image.vue @@ -7,6 +7,7 @@ Sample configuration: @@ -76,11 +86,16 @@ export default { { + UserAvatarImage = Vue.extend(userAvatarImage); + }); + describe('Initialization', function () { beforeEach(function () { - this.propsData = { - size: 99, - imgSrc: 'myavatarurl.com', - imgAlt: 'mydisplayname', - cssClasses: 'myextraavatarclass', - tooltipText: 'tooltip text', - tooltipPlacement: 'bottom', - }; - - this.userAvatarImage = new UserAvatarImageComponent({ - propsData: this.propsData, + vm = mountComponent(UserAvatarImage, { + ...DEFAULT_PROPS, }).$mount(); }); it('should return a defined Vue component', function () { - expect(this.userAvatarImage).toBeDefined(); + expect(vm).toBeDefined(); }); it('should have as a child element', function () { - expect(this.userAvatarImage.$el.tagName).toBe('IMG'); + expect(vm.$el.tagName).toBe('IMG'); + expect(vm.$el.getAttribute('src')).toBe(DEFAULT_PROPS.imgSrc); + expect(vm.$el.getAttribute('data-src')).toBe(DEFAULT_PROPS.imgSrc); + expect(vm.$el.getAttribute('alt')).toBe(DEFAULT_PROPS.imgAlt); }); it('should properly compute tooltipContainer', function () { - expect(this.userAvatarImage.tooltipContainer).toBe('body'); + expect(vm.tooltipContainer).toBe('body'); }); it('should properly render tooltipContainer', function () { - expect(this.userAvatarImage.$el.getAttribute('data-container')).toBe('body'); + expect(vm.$el.getAttribute('data-container')).toBe('body'); }); it('should properly compute avatarSizeClass', function () { - expect(this.userAvatarImage.avatarSizeClass).toBe('s99'); + expect(vm.avatarSizeClass).toBe('s99'); }); it('should properly render img css', function () { - const classList = this.userAvatarImage.$el.classList; + const classList = vm.$el.classList; const containsAvatar = classList.contains('avatar'); const containsSizeClass = classList.contains('s99'); - const containsCustomClass = classList.contains('myextraavatarclass'); + const containsCustomClass = classList.contains(DEFAULT_PROPS.cssClasses); + const lazyClass = classList.contains('lazy'); expect(containsAvatar).toBe(true); expect(containsSizeClass).toBe(true); expect(containsCustomClass).toBe(true); + expect(lazyClass).toBe(false); + }); + }); + + describe('Initialization when lazy', function () { + beforeEach(function () { + vm = mountComponent(UserAvatarImage, { + ...DEFAULT_PROPS, + lazy: true, + }).$mount(); + }); + + it('should add lazy attributes', function () { + const classList = vm.$el.classList; + const lazyClass = classList.contains('lazy'); + + expect(lazyClass).toBe(true); + expect(vm.$el.getAttribute('src')).toBe(placeholderImage); + expect(vm.$el.getAttribute('data-src')).toBe(DEFAULT_PROPS.imgSrc); }); }); }); -- cgit v1.2.1