Skip to content
Snippets Groups Projects
Commit 0f060bf4 authored by winniehell's avatar winniehell
Browse files

Replace static issue fixtures by script (!6059)

parent 8afc2873
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -249,7 +249,7 @@ teaspoon:
- curl --silent --location https://deb.nodesource.com/setup_6.x | bash -
- apt-get install --assume-yes nodejs
- npm install --global istanbul
- teaspoon
- rake teaspoon
artifacts:
name: coverage-javascript
expire_in: 31d
Loading
Loading
Loading
Loading
@@ -154,6 +154,7 @@ Please view this file on the master branch, on stable branches it's out of date.
- Only update issuable labels if they have been changed
- Take filters in account in issuable counters. !6496
- Use custom Ruby images to test builds (registry.dev.gitlab.org/gitlab/gitlab-build-images:*)
- Replace static issue fixtures by script !6059 (winniehell)
- Append issue template to existing description !6149 (Joseph Frazier)
- Trending projects now only show public projects and the list of projects is cached for a day
- Memoize Gitlab Shell's secret token (!6599, Justin DiPierro)
Loading
Loading
Rake::Task['teaspoon'].clear if Rake::Task.task_defined?('teaspoon')
namespace :teaspoon do
desc 'GitLab | Teaspoon | Generate fixtures for JavaScript tests'
RSpec::Core::RakeTask.new(:fixtures) do |t|
ENV['NO_KNAPSACK'] = 'true'
t.pattern = 'spec/javascripts/fixtures/*.rb'
t.rspec_opts = '--format documentation'
end
desc 'GitLab | Teaspoon | Run JavaScript tests'
task :tests do
require "teaspoon/console"
options = {}
abort('rake teaspoon:tests failed') if Teaspoon::Console.new(options).failures?
end
end
desc 'GitLab | Teaspoon | Shortcut for teaspoon:fixtures and teaspoon:tests'
task :teaspoon do
Rake::Task['teaspoon:fixtures'].invoke
Rake::Task['teaspoon:tests'].invoke
end
*.html.raw
require 'spec_helper'
describe Projects::IssuesController, '(JavaScript fixtures)', type: :controller do
include JavaScriptFixturesHelpers
let(:admin) { create(:admin) }
let(:project) { create(:project_empty_repo) }
render_views
before(:all) do
clean_frontend_fixtures('issues/')
end
before(:each) do
sign_in(admin)
end
it 'issues/open-issue.html.raw' do |example|
render_issue(example.description, create(:issue, project: project))
end
it 'issues/closed-issue.html.raw' do |example|
render_issue(example.description, create(:closed_issue, project: project))
end
it 'issues/issue-with-task-list.html.raw' do |example|
issue = create(:issue, project: project)
issue.update(description: '- [ ] Task List Item')
render_issue(example.description, issue)
end
private
def render_issue(fixture_file_name, issue)
get :show,
namespace_id: project.namespace.to_param,
project_id: project.to_param,
id: issue.to_param
expect(response).to be_success
store_frontend_fixture(response, fixture_file_name)
end
end
:css
.hidden { display: none !important; }
.flash-container.flash-container-page
.flash-alert
.flash-notice
.status-box.status-box-open Open
.status-box.status-box-closed.hidden Closed
%a.btn-close{"href" => "http://gitlab.com/issues/6/close"} Close
%a.btn-reopen.hidden{"href" => "http://gitlab.com/issues/6/reopen"} Reopen
.detail-page-description
.description.js-task-list-container
.wiki
%ul.task-list
%li.task-list-item
%input.task-list-item-checkbox{type: 'checkbox'}
Task List Item
%textarea.js-task-list-field
\- [ ] Task List Item
%form.js-issuable-update{action: '/foo'}
Loading
Loading
@@ -7,6 +7,10 @@
var INVALID_URL = 'http://goesnowhere.nothing/whereami';
var $boxClosed, $boxOpen, $btnClose, $btnReopen;
 
fixture.preload('issues/closed-issue.html');
fixture.preload('issues/issue-with-task-list.html');
fixture.preload('issues/open-issue.html');
function expectErrorMessage() {
var $flashMessage = $('div.flash-alert');
expect($flashMessage).toExist();
Loading
Loading
@@ -55,33 +59,33 @@
}
 
describe('Issue', function() {
return describe('task lists', function() {
fixture.preload('issues_show.html');
describe('task lists', function() {
fixture.load('issues/issue-with-task-list.html');
beforeEach(function() {
fixture.load('issues_show.html');
return this.issue = new Issue();
this.issue = new Issue();
});
it('modifies the Markdown field', function() {
spyOn(jQuery, 'ajax').and.stub();
$('input[type=checkbox]').attr('checked', true).trigger('change');
return expect($('.js-task-list-field').val()).toBe('- [x] Task List Item');
expect($('.js-task-list-field').val()).toBe('- [x] Task List Item');
});
return it('submits an ajax request on tasklist:changed', function() {
it('submits an ajax request on tasklist:changed', function() {
spyOn(jQuery, 'ajax').and.callFake(function(req) {
expect(req.type).toBe('PATCH');
expect(req.url).toBe('/foo');
return expect(req.data.issue.description).not.toBe(null);
expect(req.url).toBe('https://fixture.invalid/namespace3/project3/issues/1.json');
expect(req.data.issue.description).not.toBe(null);
});
return $('.js-task-list-field').trigger('tasklist:changed');
$('.js-task-list-field').trigger('tasklist:changed');
});
});
});
 
describe('close issue', function() {
fixture.preload('issues_show.html');
beforeEach(function() {
fixture.load('issues_show.html');
fixture.load('issues/open-issue.html');
findElements();
this.issue = new Issue();
 
Loading
Loading
@@ -134,15 +138,12 @@
});
 
describe('reopen issue', function() {
fixture.preload('issues_show.html');
beforeEach(function() {
fixture.load('issues_show.html');
fixture.load('issues/closed-issue.html');
findElements();
this.issue = new Issue();
 
// TODO: fixture is an open issue, we should replace it by a closed issue
expectIssueState(true);
expectIssueState(false);
});
 
it('reopens an issue', function() {
Loading
Loading
Loading
Loading
@@ -9,7 +9,7 @@ require 'shoulda/matchers'
require 'sidekiq/testing/inline'
require 'rspec/retry'
 
if ENV['CI']
if ENV['CI'] && !ENV['NO_KNAPSACK']
require 'knapsack'
Knapsack::Adapters::RSpecAdapter.bind
end
Loading
Loading
require 'fileutils'
require 'gitlab/popen'
module JavaScriptFixturesHelpers
include Gitlab::Popen
FIXTURE_PATH = 'spec/javascripts/fixtures'
# Public: Removes all fixture files from given directory
#
# directory_name - directory of the fixtures (relative to FIXTURE_PATH)
#
def clean_frontend_fixtures(directory_name)
directory_name = File.expand_path(directory_name, FIXTURE_PATH)
Dir[File.expand_path('*.html.raw', directory_name)].each do |file_name|
FileUtils.rm(file_name)
end
end
# Public: Store a response object as fixture file
#
# response - response object to store
# fixture_file_name - file name to store the fixture in (relative to FIXTURE_PATH)
#
def store_frontend_fixture(response, fixture_file_name)
fixture_file_name = File.expand_path(fixture_file_name, FIXTURE_PATH)
fixture = response.body
response_mime_type = Mime::Type.lookup(response.content_type)
if response_mime_type.html?
doc = Nokogiri::HTML::DocumentFragment.parse(fixture)
scripts = doc.css('script')
scripts.remove
fixture = doc.to_html
# replace relative links
fixture.gsub!(%r{="/}, '="https://fixture.invalid/')
end
FileUtils.mkdir_p(File.dirname(fixture_file_name))
File.write(fixture_file_name, fixture)
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment