Commit bb483230 authored by Luke "Jared" Bennett's avatar Luke "Jared" Bennett

added specs for version check image

parent 7bf28a4a
(() => { class VersionCheckImage {
class VersionCheckImage {
static bindErrorEvent(imageElement) { static bindErrorEvent(imageElement) {
imageElement.off('error').on('error', () => imageElement.hide()); imageElement.off('error').on('error', () => imageElement.hide());
} }
} }
window.gl = window.gl || {};
gl.VersionCheckImage = VersionCheckImage;
window.gl = window.gl || {}; module.exports = VersionCheckImage;
gl.VersionCheckImage = VersionCheckImage;
})();
...@@ -33,4 +33,30 @@ describe 'Help Pages', feature: true do ...@@ -33,4 +33,30 @@ describe 'Help Pages', feature: true do
it_behaves_like 'help page', prefix: '/gitlab' it_behaves_like 'help page', prefix: '/gitlab'
end end
end end
context 'in a production environment with version check enabled', js: true do
before do
allow(Rails.env).to receive(:production?) { true }
allow(current_application_settings).to receive(:version_check_enabled) { true }
allow_any_instance_of(VersionCheck).to receive(:url) { '/version-check-url' }
login_as :user
visit help_path
end
it 'should display a version check image' do
expect(find('.js-version-status-badge')).to be_visible
end
it 'should have a src url' do
expect(find('.js-version-status-badge')['src']).to match(/\/version-check-url/)
end
it 'should hide the version check image if the image request fails' do
# We use '--load-images=no' with poltergeist so we must trigger manually
execute_script("$('.js-version-status-badge').trigger('error');")
expect(find('.js-version-status-badge', visible: false)).not_to be_visible
end
end
end end
require 'spec_helper'
describe VersionCheckHelper do
describe '#version_status_badge' do
it 'should return nil if not dev environment and not enabled' do
allow(Rails.env).to receive(:production?) { false }
allow(current_application_settings).to receive(:version_check_enabled) { false }
expect(helper.version_status_badge).to be(nil)
end
context 'when production and enabled' do
before do
allow(Rails.env).to receive(:production?) { true }
allow(current_application_settings).to receive(:version_check_enabled) { true }
allow_any_instance_of(VersionCheck).to receive(:url) { 'https://version.host.com/check.svg?gitlab_info=xxx' }
@image_tag = helper.version_status_badge
end
it 'should return an image tag' do
expect(@image_tag).to match(/^<img/)
end
it 'should have a js prefixed css class' do
expect(@image_tag).to match(/class="js-version-status-badge"/)
end
it 'should have a VersionCheck url as the src' do
expect(@image_tag).to match(/src="https:\/\/version\.host\.com\/check\.svg\?gitlab_info=xxx"/)
end
end
end
end
...@@ -18,7 +18,8 @@ ...@@ -18,7 +18,8 @@
"sandbox": false, "sandbox": false,
"setFixtures": false, "setFixtures": false,
"setStyleFixtures": false, "setStyleFixtures": false,
"spyOnEvent": false "spyOnEvent": false,
"ClassSpecHelper": false
}, },
"plugins": ["jasmine"], "plugins": ["jasmine"],
"rules": { "rules": {
......
...@@ -7,3 +7,5 @@ class ClassSpecHelper { ...@@ -7,3 +7,5 @@ class ClassSpecHelper {
} }
window.ClassSpecHelper = ClassSpecHelper; window.ClassSpecHelper = ClassSpecHelper;
module.exports = ClassSpecHelper;
const ClassSpecHelper = require('./helpers/class_spec_helper');
const VersionCheckImage = require('~/version_check_image');
require('jquery');
describe('VersionCheckImage', function () {
describe('.bindErrorEvent', function () {
ClassSpecHelper.itShouldBeAStaticMethod(VersionCheckImage, 'bindErrorEvent');
beforeEach(function () {
this.imageElement = $('<div></div>');
});
it('registers an error event', function () {
spyOn($.prototype, 'on');
spyOn($.prototype, 'off').and.callFake(function () { return this; });
VersionCheckImage.bindErrorEvent(this.imageElement);
expect($.prototype.off).toHaveBeenCalledWith('error');
expect($.prototype.on).toHaveBeenCalledWith('error', jasmine.any(Function));
});
it('hides the imageElement on error', function () {
spyOn($.prototype, 'hide');
VersionCheckImage.bindErrorEvent(this.imageElement);
this.imageElement.trigger('error');
expect($.prototype.hide).toHaveBeenCalled();
});
});
});
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment