Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhil Hughes <me@iamphill.com>2017-11-15 15:35:59 +0300
committerPhil Hughes <me@iamphill.com>2017-11-21 14:27:56 +0300
commit315e1cf15caa2010eb03bd79a09d1a9559030360 (patch)
tree3c9d5a1fc9426a6aed8614f13c64fc12c2c9d989
parenteecd88dc84734ceab09af23e5542f24582f4bff2 (diff)
ruby specs
fixed up karma specs
-rw-r--r--app/assets/javascripts/repo/stores/actions/file.js2
-rw-r--r--app/controllers/concerns/renders_blob.rb2
-rw-r--r--app/serializers/blob_basic_entity.rb4
-rw-r--r--app/serializers/blob_entity.rb4
-rw-r--r--app/serializers/blob_viewer_entity.rb2
-rw-r--r--spec/controllers/projects/blob_controller_spec.rb76
-rw-r--r--spec/javascripts/repo/components/repo_editor_spec.js3
-rw-r--r--spec/javascripts/repo/components/viewers/html_spec.js6
-rw-r--r--spec/javascripts/repo/stores/actions/file_spec.js8
-rw-r--r--spec/serializers/blob_basic_entity_spec.rb18
-rw-r--r--spec/serializers/blob_entity_spec.rb43
-rw-r--r--spec/serializers/blob_viewer_entity_spec.rb25
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