diff options
author | Phil Hughes <me@iamphill.com> | 2017-11-15 15:35:59 +0300 |
---|---|---|
committer | Phil Hughes <me@iamphill.com> | 2017-11-21 14:27:56 +0300 |
commit | 315e1cf15caa2010eb03bd79a09d1a9559030360 (patch) | |
tree | 3c9d5a1fc9426a6aed8614f13c64fc12c2c9d989 | |
parent | eecd88dc84734ceab09af23e5542f24582f4bff2 (diff) |
ruby specs
fixed up karma specs
-rw-r--r-- | app/assets/javascripts/repo/stores/actions/file.js | 2 | ||||
-rw-r--r-- | app/controllers/concerns/renders_blob.rb | 2 | ||||
-rw-r--r-- | app/serializers/blob_basic_entity.rb | 4 | ||||
-rw-r--r-- | app/serializers/blob_entity.rb | 4 | ||||
-rw-r--r-- | app/serializers/blob_viewer_entity.rb | 2 | ||||
-rw-r--r-- | spec/controllers/projects/blob_controller_spec.rb | 76 | ||||
-rw-r--r-- | spec/javascripts/repo/components/repo_editor_spec.js | 3 | ||||
-rw-r--r-- | spec/javascripts/repo/components/viewers/html_spec.js | 6 | ||||
-rw-r--r-- | spec/javascripts/repo/stores/actions/file_spec.js | 8 | ||||
-rw-r--r-- | spec/serializers/blob_basic_entity_spec.rb | 18 | ||||
-rw-r--r-- | spec/serializers/blob_entity_spec.rb | 43 | ||||
-rw-r--r-- | spec/serializers/blob_viewer_entity_spec.rb | 25 |
12 files changed, 176 insertions, 17 deletions
diff --git a/app/assets/javascripts/repo/stores/actions/file.js b/app/assets/javascripts/repo/stores/actions/file.js index 6ae84d4adda..a602f338a8c 100644 --- a/app/assets/javascripts/repo/stores/actions/file.js +++ b/app/assets/javascripts/repo/stores/actions/file.js @@ -84,7 +84,7 @@ export const changeFileContent = ({ commit }, { file, content }) => { commit(types.UPDATE_FILE_CONTENT, { file, content }); }; -export const createTempFile = ({ state, commit, dispatch }, { tree, name, content = '', binary = '' }) => { +export const createTempFile = ({ state, commit, dispatch }, { tree, name, content = '', binary = false }) => { const file = createTemp({ name: name.replace(`${state.path}/`, ''), path: tree.path, diff --git a/app/controllers/concerns/renders_blob.rb b/app/controllers/concerns/renders_blob.rb index a0021cbf8c9..031b8d8098a 100644 --- a/app/controllers/concerns/renders_blob.rb +++ b/app/controllers/concerns/renders_blob.rb @@ -16,7 +16,7 @@ module RendersBlob return unless viewer - viewer_json = BlobViewerSerializer.new(params: params).represent(viewer) + viewer_json = BlobViewerSerializer.new(params: params, project: @project, ref: @ref).represent(viewer) viewer_json.merge(html: view_to_html_string("projects/blob/_viewer", viewer: viewer, load_async: false)) end diff --git a/app/serializers/blob_basic_entity.rb b/app/serializers/blob_basic_entity.rb index 3a630bbcca1..de4936dd0cb 100644 --- a/app/serializers/blob_basic_entity.rb +++ b/app/serializers/blob_basic_entity.rb @@ -3,10 +3,6 @@ class BlobBasicEntity < Grape::Entity expose :id, :path, :name, :mode - expose :last_commit do |blob| - request.project.repository.last_commit_for_path(blob.commit_id, blob.path) - end - expose :icon do |blob| IconsHelper.file_type_icon_class('file', blob.mode, blob.name) end diff --git a/app/serializers/blob_entity.rb b/app/serializers/blob_entity.rb index 0930d6d3526..8c5437f28fb 100644 --- a/app/serializers/blob_entity.rb +++ b/app/serializers/blob_entity.rb @@ -9,6 +9,10 @@ class BlobEntity < BlobBasicEntity expose :stored_externally?, as: :stored_externally expose :expanded?, as: :expanded + expose :last_commit do |blob| + request.project.repository.last_commit_for_path(blob.commit_id, blob.path) + end + expose :raw_path do |blob| project_raw_path(request.project, File.join(request.ref, blob.path)) end diff --git a/app/serializers/blob_viewer_entity.rb b/app/serializers/blob_viewer_entity.rb index 6dfa68d4435..21ffb678c45 100644 --- a/app/serializers/blob_viewer_entity.rb +++ b/app/serializers/blob_viewer_entity.rb @@ -14,6 +14,6 @@ class BlobViewerEntity < Grape::Entity end expose :path do |viewer| - url_for(request.params.merge(viewer: viewer.type, format: :json, only_path: true)) + project_blob_viewer_path(request.project, File.join(request.ref, viewer.blob.path), viewer: viewer.type, format: :json) end end diff --git a/spec/controllers/projects/blob_controller_spec.rb b/spec/controllers/projects/blob_controller_spec.rb index 91b5b8df3dd..324894f6802 100644 --- a/spec/controllers/projects/blob_controller_spec.rb +++ b/spec/controllers/projects/blob_controller_spec.rb @@ -102,6 +102,82 @@ describe Projects::BlobController do end end + describe 'GET viewer' do + render_views + + describe 'rich' do + context 'markup file' do + let(:id) { 'master/README.md' } + + before do + get(:viewer, + namespace_id: project.namespace, + project_id: project, + id: id, + viewer: 'rich', + format: :json) + end + + it do + expect(response).to be_ok + expect(json_response).to have_key 'html' + expect(json_response).to have_key 'name' + expect(json_response).to have_key 'switcher_icon' + expect(json_response).to have_key 'render_error' + expect(json_response).to have_key 'server_side' + expect(json_response['server_side']).to be_truthy + end + end + + context 'binary file' do + let(:id) { 'master/files/images/logo-black.png' } + + before do + get(:viewer, + namespace_id: project.namespace, + project_id: project, + id: id, + viewer: 'rich', + format: :json) + end + + it do + expect(response).to be_ok + expect(json_response).to have_key 'html' + expect(json_response).to have_key 'name' + expect(json_response).to have_key 'switcher_icon' + expect(json_response).to have_key 'render_error' + expect(json_response).to have_key 'server_side' + expect(json_response['server_side']).to be_falsy + end + end + end + + describe 'simple' do + let(:id) { 'master/README.md' } + + before do + get(:viewer, + namespace_id: project.namespace, + project_id: project, + id: id, + viewer: 'simple', + format: :json) + end + + it do + expect(response).to be_ok + expect(json_response).to have_key 'html' + expect(json_response).to have_key 'name' + expect(json_response).to have_key 'switcher_icon' + expect(json_response).to have_key 'render_error' + expect(json_response).to have_key 'server_side' + expect(json_response['server_side']).to be_truthy + expect(json_response['name']).to eq('text') + end + end + end + describe 'GET diff' do let(:user) { create(:user) } diff --git a/spec/javascripts/repo/components/repo_editor_spec.js b/spec/javascripts/repo/components/repo_editor_spec.js index 979d2185076..3e1b304422f 100644 --- a/spec/javascripts/repo/components/repo_editor_spec.js +++ b/spec/javascripts/repo/components/repo_editor_spec.js @@ -17,7 +17,6 @@ describe('RepoEditor', () => { f.active = true; f.tempFile = true; vm.$store.state.openFiles.push(f); - vm.$store.getters.activeFile.html = 'testing'; vm.monaco = true; vm.$mount(); @@ -50,7 +49,7 @@ describe('RepoEditor', () => { }); it('shows activeFile html', () => { - expect(vm.$el.textContent.trim()).toBe('testing'); + expect(vm.$el.textContent.trim()).toBe('This file can not be modified.'); }); }); }); diff --git a/spec/javascripts/repo/components/viewers/html_spec.js b/spec/javascripts/repo/components/viewers/html_spec.js index 664d4c76b35..fe7729e23c5 100644 --- a/spec/javascripts/repo/components/viewers/html_spec.js +++ b/spec/javascripts/repo/components/viewers/html_spec.js @@ -8,21 +8,19 @@ describe('Multi-file editor HTML viewer', () => { let vm; let f; - beforeEach((done) => { + beforeEach(() => { const Comp = Vue.extend(htmlPreview); f = file(); Object.assign(f, { active: true, - rich: Object.assign(f.rich, { html: 'richHTML' }), + rich: Object.assign(f.rich, { loading: true, html: 'richHTML' }), }); vm = createComponentWithStore(Comp, store); vm.$store.state.openFiles.push(f); vm.$mount(); - - Vue.nextTick(done); }); afterEach(() => { diff --git a/spec/javascripts/repo/stores/actions/file_spec.js b/spec/javascripts/repo/stores/actions/file_spec.js index 8eeae19755d..84ff0411a62 100644 --- a/spec/javascripts/repo/stores/actions/file_spec.js +++ b/spec/javascripts/repo/stores/actions/file_spec.js @@ -381,7 +381,7 @@ describe('Multi-file store file actions', () => { }).catch(done.fail); }); - it('enters edit mode if file is not base64', (done) => { + it('enters edit mode if file is not binary', (done) => { store.dispatch('createTempFile', { tree: store.state, name: 'test', @@ -392,13 +392,13 @@ describe('Multi-file store file actions', () => { }).catch(done.fail); }); - it('does not enter edit mode if file is base64', (done) => { + it('enters edit mode if file is binary', (done) => { store.dispatch('createTempFile', { tree: store.state, name: 'test', - base64: true, + binary: true, }).then(() => { - expect(store.state.editMode).toBeFalsy(); + expect(store.state.editMode).toBeTruthy(); done(); }).catch(done.fail); diff --git a/spec/serializers/blob_basic_entity_spec.rb b/spec/serializers/blob_basic_entity_spec.rb new file mode 100644 index 00000000000..cc262b15e75 --- /dev/null +++ b/spec/serializers/blob_basic_entity_spec.rb @@ -0,0 +1,18 @@ +require 'spec_helper' + +describe BlobBasicEntity do + let(:ref) { 'master' } + let(:user) { create(:user) } + let(:project) { create(:project, :repository) } + let(:commit) { project.commit(ref) } + let(:blob) { project.repository.blob_at(commit.id, 'README.md') } + let(:request) { double('request', ref: ref, commit: commit, project: project) } + let(:entity) { described_class.new(blob, request: request) } + + subject { entity.as_json } + + it do + expect(subject).to include(:id, :path, :name, :mode, :icon, :url) + expect(subject).not_to include(:last_commit) + end +end diff --git a/spec/serializers/blob_entity_spec.rb b/spec/serializers/blob_entity_spec.rb new file mode 100644 index 00000000000..ab2c5fe8060 --- /dev/null +++ b/spec/serializers/blob_entity_spec.rb @@ -0,0 +1,43 @@ +require 'spec_helper' + +describe BlobEntity do + let(:ref) { 'master' } + let(:user) { create(:user) } + let(:project) { create(:project, :repository) } + let(:commit) { project.commit(ref) } + let(:blob) { project.repository.blob_at(commit.id, 'README.md') } + let(:params) do + { + namespace_id: project.namespace, + project_id: project, + id: "#{ref}/#{blob.path}" + } + end + let(:request) { double('request', ref: ref, commit: commit, project: project, params: params) } + let(:entity) { described_class.new(blob, request: request) } + + subject { entity.as_json } + + it 'exposes correct elements' do + expect(subject).to include(:id, :path, :name, :mode, :icon, :url, :extension, :mime_type, :file_type, + :size, :binary, :simple_viewer, :rich_viewer, :auxiliary_viewer, :stored_externally, :expanded, + :raw_path, :blame_path, :commits_path, :tree_path, :permalink, :last_commit) + end + + ['simple', 'rich'].each do |viewer| + it "includes #{viewer} viewer for rich file" do + viewer = subject[:"#{viewer}_viewer"] + + expect(viewer).to include(:type, :name, :switcher_title, :switcher_icon, :server_side, :render_error, + :render_error_reason, :path) + end + end + + context 'binary file' do + let(:blob) { project.repository.blob_at(commit.id, 'Gemfile.zip') } + + it do + expect(subject[:rich_viewer]).to eq(nil) + end + end +end diff --git a/spec/serializers/blob_viewer_entity_spec.rb b/spec/serializers/blob_viewer_entity_spec.rb new file mode 100644 index 00000000000..af880eda8d0 --- /dev/null +++ b/spec/serializers/blob_viewer_entity_spec.rb @@ -0,0 +1,25 @@ +require 'spec_helper' + +describe BlobViewerEntity do + let(:ref) { 'master' } + let(:user) { create(:user) } + let(:project) { create(:project, :repository) } + let(:commit) { project.commit(ref) } + let(:blob) { project.repository.blob_at(commit.id, 'README.md') } + let(:params) do + { + namespace_id: project.namespace, + project_id: project, + id: "#{ref}/#{blob.path}" + } + end + let(:request) { double('request', ref: ref, commit: commit, project: project, params: params) } + let(:entity) { described_class.new(blob.rich_viewer, request: request) } + + subject { entity.as_json } + + it do + expect(subject).to include(:type, :name, :switcher_icon, :switcher_title, :server_side, + :render_error, :render_error_reason, :path) + end +end |