Merge branch 'szzh' of http://repository.trustie.net/xianbo/trustie2 into szzh
commit
3c810a0cee
@ -0,0 +1,8 @@
|
|||||||
|
class AddHostConfigToSettings < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
Setting.create(name: 'host_course', value: 'course.trustie.net')
|
||||||
|
Setting.create(name: 'host_contest', value: 'contest.trustie.net')
|
||||||
|
Setting.create(name: 'host_user', value: 'user.trustie.net')
|
||||||
|
Setting.create(name: 'host_repository', value: 'repository.trustie.net')
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,122 @@
|
|||||||
|
/*
|
||||||
|
* jQuery File Upload Validation Plugin 1.1.3
|
||||||
|
* https://github.com/blueimp/jQuery-File-Upload
|
||||||
|
*
|
||||||
|
* Copyright 2013, Sebastian Tschan
|
||||||
|
* https://blueimp.net
|
||||||
|
*
|
||||||
|
* Licensed under the MIT license:
|
||||||
|
* http://www.opensource.org/licenses/MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* global define, require, window */
|
||||||
|
|
||||||
|
(function (factory) {
|
||||||
|
'use strict';
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// Register as an anonymous AMD module:
|
||||||
|
define([
|
||||||
|
'jquery',
|
||||||
|
'./jquery.fileupload-process'
|
||||||
|
], factory);
|
||||||
|
} else if (typeof exports === 'object') {
|
||||||
|
// Node/CommonJS:
|
||||||
|
factory(require('jquery'));
|
||||||
|
} else {
|
||||||
|
// Browser globals:
|
||||||
|
factory(
|
||||||
|
window.jQuery
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}(function ($) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// Append to the default processQueue:
|
||||||
|
$.blueimp.fileupload.prototype.options.processQueue.push(
|
||||||
|
{
|
||||||
|
action: 'validate',
|
||||||
|
// Always trigger this action,
|
||||||
|
// even if the previous action was rejected:
|
||||||
|
always: true,
|
||||||
|
// Options taken from the global options map:
|
||||||
|
acceptFileTypes: '@',
|
||||||
|
maxFileSize: '@',
|
||||||
|
minFileSize: '@',
|
||||||
|
maxNumberOfFiles: '@',
|
||||||
|
disabled: '@disableValidation'
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// The File Upload Validation plugin extends the fileupload widget
|
||||||
|
// with file validation functionality:
|
||||||
|
$.widget('blueimp.fileupload', $.blueimp.fileupload, {
|
||||||
|
|
||||||
|
options: {
|
||||||
|
/*
|
||||||
|
// The regular expression for allowed file types, matches
|
||||||
|
// against either file type or file name:
|
||||||
|
acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
|
||||||
|
// The maximum allowed file size in bytes:
|
||||||
|
maxFileSize: 10000000, // 10 MB
|
||||||
|
// The minimum allowed file size in bytes:
|
||||||
|
minFileSize: undefined, // No minimal file size
|
||||||
|
// The limit of files to be uploaded:
|
||||||
|
maxNumberOfFiles: 10,
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Function returning the current number of files,
|
||||||
|
// has to be overriden for maxNumberOfFiles validation:
|
||||||
|
getNumberOfFiles: $.noop,
|
||||||
|
|
||||||
|
// Error and info messages:
|
||||||
|
messages: {
|
||||||
|
maxNumberOfFiles: 'Maximum number of files exceeded',
|
||||||
|
acceptFileTypes: 'File type not allowed',
|
||||||
|
maxFileSize: 'File is too large',
|
||||||
|
minFileSize: 'File is too small'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
processActions: {
|
||||||
|
|
||||||
|
validate: function (data, options) {
|
||||||
|
if (options.disabled) {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
var dfd = $.Deferred(),
|
||||||
|
settings = this.options,
|
||||||
|
file = data.files[data.index],
|
||||||
|
fileSize;
|
||||||
|
if (options.minFileSize || options.maxFileSize) {
|
||||||
|
fileSize = file.size;
|
||||||
|
}
|
||||||
|
if ($.type(options.maxNumberOfFiles) === 'number' &&
|
||||||
|
(settings.getNumberOfFiles() || 0) + data.files.length >
|
||||||
|
options.maxNumberOfFiles) {
|
||||||
|
file.error = settings.i18n('maxNumberOfFiles');
|
||||||
|
} else if (options.acceptFileTypes &&
|
||||||
|
!(options.acceptFileTypes.test(file.type) ||
|
||||||
|
options.acceptFileTypes.test(file.name))) {
|
||||||
|
file.error = settings.i18n('acceptFileTypes');
|
||||||
|
} else if (fileSize > options.maxFileSize) {
|
||||||
|
file.error = settings.i18n('maxFileSize');
|
||||||
|
} else if ($.type(fileSize) === 'number' &&
|
||||||
|
fileSize < options.minFileSize) {
|
||||||
|
file.error = settings.i18n('minFileSize');
|
||||||
|
} else {
|
||||||
|
delete file.error;
|
||||||
|
}
|
||||||
|
if (file.error || data.files.error) {
|
||||||
|
data.files.error = true;
|
||||||
|
dfd.rejectWith(this, [data]);
|
||||||
|
} else {
|
||||||
|
dfd.resolveWith(this, [data]);
|
||||||
|
}
|
||||||
|
return dfd.promise();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
}));
|
@ -0,0 +1,15 @@
|
|||||||
|
#coding=utf-8
|
||||||
|
#
|
||||||
|
FactoryGirl.define do
|
||||||
|
factory :course do
|
||||||
|
name 'name'
|
||||||
|
time '2015'
|
||||||
|
term 'term'
|
||||||
|
class_period 1
|
||||||
|
password '111'
|
||||||
|
description 'description'
|
||||||
|
is_public 1
|
||||||
|
open_student 1
|
||||||
|
association :teacher, factory: :user
|
||||||
|
end
|
||||||
|
end
|
@ -1,9 +1,9 @@
|
|||||||
|
|
||||||
FactoryGirl.define do
|
FactoryGirl.define do
|
||||||
factory :user do
|
factory :user do
|
||||||
login "ExampleUser"
|
login "factoryuser"
|
||||||
mail "user@example.com"
|
mail "user@example.com"
|
||||||
password "foobar"
|
password "foobar111"
|
||||||
password_confirmation "foobar"
|
password_confirmation "foobar111"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
After Width: | Height: | Size: 28 KiB |
@ -0,0 +1,48 @@
|
|||||||
|
require 'rails_helper'
|
||||||
|
require 'shared_account_spec'
|
||||||
|
|
||||||
|
RSpec.describe "课程", :type => :request do
|
||||||
|
let(:course){FactoryGirl.attributes_for(:course)}
|
||||||
|
describe "创建课程" do
|
||||||
|
include_context "create user"
|
||||||
|
before {
|
||||||
|
shared_register
|
||||||
|
shared_update_user
|
||||||
|
}
|
||||||
|
context "参数正确,成功创建课程" do
|
||||||
|
before{
|
||||||
|
# uu = current_user
|
||||||
|
# allow(User).to receive(:current).and_return(uu)
|
||||||
|
# allow(uu).to receive(:allowed_to?).and_return(123)
|
||||||
|
post courses_path,
|
||||||
|
"course[name]"=> course[:name],
|
||||||
|
"class_period"=> course[:class_period],
|
||||||
|
"time"=> course[:time],
|
||||||
|
"term"=> course[:term],
|
||||||
|
"course[password]"=>course[:password],
|
||||||
|
"course[description]"=> course[:description],
|
||||||
|
"course[is_public]"=> course[:is_public],
|
||||||
|
"course[open_student]"=> course[:open_student]
|
||||||
|
}
|
||||||
|
it{expect(assigns(:course)).to be_instance_of(Course)}
|
||||||
|
it{expect(response).to redirect_to(settings_course_url(assigns(:course), course_type: 1))}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "配置课程" do
|
||||||
|
let (:course) {FactoryGirl.create(:course)}
|
||||||
|
|
||||||
|
context "修改课程图片" do
|
||||||
|
include Rack::Test::Methods
|
||||||
|
let(:avatar) {Rack::Test::UploadedFile.new("#{Rails.root}/spec/fixtures/test.jpg",'image/jpg')}
|
||||||
|
context "正常图片上传成功" do
|
||||||
|
subject(:resp) {post upload_avatar_path(source_type: 'Course', source_id: course.id, format: :json),"avatar"=>{image: avatar}}
|
||||||
|
it{ expect(subject).to be_ok }
|
||||||
|
it{ expect(subject.body).not_to be_empty }
|
||||||
|
end
|
||||||
|
|
||||||
|
it "不是图片,上传失败"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
@ -0,0 +1,6 @@
|
|||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe "作业打包下载", :type => :request do
|
||||||
|
describe "单独下载某学生作业" do
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,18 @@
|
|||||||
|
if Role.count <= 0
|
||||||
|
ActiveRecord::Base.connection.execute(
|
||||||
|
|
||||||
|
%Q{
|
||||||
|
INSERT INTO `roles` (`id`, `name`, `position`, `assignable`, `builtin`, `permissions`, `issues_visibility`)
|
||||||
|
VALUES
|
||||||
|
(1,'Non member',1,1,1,'---\n- :upload_attachments\n- :memos_attachments_download\n- :add_project\n- :projects_attachments_download\n- :add_course\n- :course_attachments_download\n- :view_course_files\n- :add_messages\n- :delete_own_messages\n- :view_calendar\n- :view_documents\n- :view_files\n- :view_gantt\n- :view_issues\n- :save_queries\n- :comment_news\n- :browse_repository\n- :view_changesets\n- :view_time_entries\n- :view_wiki_pages\n- :view_wiki_edits\n','default'),
|
||||||
|
(2,'Anonymous',2,1,2,'---\n- :memos_attachments_download\n- :view_course_files\n- :view_calendar\n- :view_documents\n- :view_files\n- :view_gantt\n- :view_issues\n- :browse_repository\n- :view_changesets\n- :view_time_entries\n- :view_wiki_pages\n- :view_wiki_edits\n','default'),
|
||||||
|
(3,'Manager',3,1,0,'---\n- :upload_attachments\n- :memos_attachments_download\n- :add_project\n- :edit_project\n- :close_project\n- :select_project_modules\n- :manage_members\n- :manage_versions\n- :add_subprojects\n- :is_manager\n- :projects_attachments_download\n- :as_teacher\n- :add_course\n- :edit_course\n- :close_course\n- :select_course_modules\n- :view_course_journals_for_messages\n- :course_attachments_download\n- :view_course_files\n- :view_homework_attaches\n- :quote_project\n- :manage_boards\n- :add_messages\n- :edit_messages\n- :edit_own_messages\n- :delete_messages\n- :delete_own_messages\n- :view_calendar\n- :view_code_review\n- :add_code_review\n- :edit_code_review\n- :delete_code_review\n- :assign_code_review\n- :code_review_setting\n- :add_documents\n- :edit_documents\n- :delete_documents\n- :view_documents\n- :manage_files\n- :view_files\n- :view_gantt\n- :manage_categories\n- :view_issues\n- :add_issues\n- :edit_issues\n- :manage_issue_relations\n- :manage_subtasks\n- :set_issues_private\n- :set_own_issues_private\n- :add_issue_notes\n- :edit_issue_notes\n- :edit_own_issue_notes\n- :view_private_notes\n- :set_notes_private\n- :move_issues\n- :delete_issues\n- :manage_public_queries\n- :save_queries\n- :view_issue_watchers\n- :add_issue_watchers\n- :delete_issue_watchers\n- :manage_news\n- :comment_news\n- :manage_repository\n- :browse_repository\n- :view_changesets\n- :commit_access\n- :manage_related_issues\n- :log_time\n- :view_time_entries\n- :edit_time_entries\n- :edit_own_time_entries\n- :manage_project_activities\n- :manage_wiki\n- :rename_wiki_pages\n- :delete_wiki_pages\n- :view_wiki_pages\n- :export_wiki_pages\n- :view_wiki_edits\n- :edit_wiki_pages\n- :delete_wiki_pages_attachments\n- :protect_wiki_pages\n','all'),
|
||||||
|
(4,'Developer',4,1,0,'---\n- :add_project\n- :manage_members\n- :manage_versions\n- :projects_attachments_download\n- :add_course\n- :edit_course\n- :close_course\n- :select_course_modules\n- :view_course_journals_for_messages\n- :course_attachments_download\n- :view_course_files\n- :view_homework_attaches\n- :paret_in_homework\n- :select_contest_modules\n- :quote_project\n- :contest_attachments_download\n- :manage_contestnotifications\n- :notificationcomment_contestnotifications\n- :manage_boards\n- :add_messages\n- :edit_own_messages\n- :delete_own_messages\n- :view_calendar\n- :view_documents\n- :do_dts\n- :manage_files\n- :view_files\n- :view_gantt\n- :manage_categories\n- :view_issues\n- :add_issues\n- :edit_issues\n- :manage_issue_relations\n- :manage_subtasks\n- :set_issues_private\n- :set_own_issues_private\n- :add_issue_notes\n- :edit_own_issue_notes\n- :view_private_notes\n- :set_notes_private\n- :move_issues\n- :manage_public_queries\n- :save_queries\n- :view_issue_watchers\n- :add_issue_watchers\n- :delete_issue_watchers\n- :manage_news\n- :comment_news\n- :manage_repository\n- :browse_repository\n- :view_changesets\n- :commit_access\n- :manage_related_issues\n- :log_time\n- :view_time_entries\n- :edit_own_time_entries\n- :view_wiki_pages\n- :export_wiki_pages\n- :view_wiki_edits\n- :protect_wiki_pages\n','default'),
|
||||||
|
(5,'Reporter',5,1,0,'---\n- :upload_attachments\n- :memos_attachments_download\n- :add_project\n- :projects_attachments_download\n- :add_course\n- :edit_course\n- :close_course\n- :select_course_modules\n- :view_course_journals_for_messages\n- :course_attachments_download\n- :view_course_files\n- :view_homework_attaches\n- :manage_boards\n- :add_messages\n- :edit_own_messages\n- :delete_own_messages\n- :view_calendar\n- :view_code_review\n- :add_documents\n- :view_documents\n- :view_files\n- :view_gantt\n- :view_issues\n- :add_issues\n- :add_issue_notes\n- :edit_own_issue_notes\n- :save_queries\n- :comment_news\n- :browse_repository\n- :view_changesets\n- :log_time\n- :view_time_entries\n- :view_wiki_pages\n- :export_wiki_pages\n- :view_wiki_edits\n- :edit_wiki_pages\n- :delete_wiki_pages_attachments\n','default'),
|
||||||
|
(7,'TeachingAsistant',6,1,0,'---\n- :add_project\n- :edit_project\n- :manage_members\n- :projects_attachments_download\n- :as_teacher\n- :add_course\n- :edit_course\n- :close_course\n- :select_course_modules\n- :view_course_journals_for_messages\n- :course_attachments_download\n- :view_course_files\n- :view_homework_attaches\n- :manage_boards\n- :add_messages\n- :delete_own_messages\n- :view_calendar\n- :view_documents\n- :manage_files\n- :view_files\n- :view_gantt\n- :view_issues\n- :add_issues\n- :add_issue_notes\n- :save_queries\n- :manage_news\n- :comment_news\n- :browse_repository\n- :view_changesets\n- :view_time_entries\n- :view_wiki_pages\n- :export_wiki_pages\n- :view_wiki_edits\n- :edit_wiki_pages\n- :delete_wiki_pages_attachments\n','default'),
|
||||||
|
(9,'Teacher',7,1,0,'---\n- :upload_attachments\n- :memos_attachments_download\n- :add_project\n- :edit_project\n- :close_project\n- :select_project_modules\n- :manage_members\n- :manage_versions\n- :add_subprojects\n- :projects_attachments_download\n- :as_teacher\n- :add_course\n- :edit_course\n- :close_course\n- :select_course_modules\n- :view_course_journals_for_messages\n- :course_attachments_download\n- :view_course_files\n- :view_homework_attaches\n- :manage_boards\n- :add_messages\n- :edit_messages\n- :edit_own_messages\n- :delete_messages\n- :delete_own_messages\n- :view_calendar\n- :add_documents\n- :edit_documents\n- :delete_documents\n- :view_documents\n- :manage_files\n- :view_files\n- :view_gantt\n- :manage_categories\n- :view_issues\n- :add_issues\n- :edit_issues\n- :manage_issue_relations\n- :manage_subtasks\n- :set_issues_private\n- :set_own_issues_private\n- :add_issue_notes\n- :edit_own_issue_notes\n- :view_private_notes\n- :set_notes_private\n- :move_issues\n- :delete_issues\n- :manage_public_queries\n- :save_queries\n- :view_issue_watchers\n- :add_issue_watchers\n- :delete_issue_watchers\n- :manage_news\n- :comment_news\n- :manage_repository\n- :browse_repository\n- :view_changesets\n- :commit_access\n- :manage_related_issues\n- :log_time\n- :view_time_entries\n- :edit_time_entries\n- :edit_own_time_entries\n- :manage_project_activities\n- :manage_wiki\n- :rename_wiki_pages\n- :delete_wiki_pages\n- :view_wiki_pages\n- :export_wiki_pages\n- :view_wiki_edits\n- :edit_wiki_pages\n- :delete_wiki_pages_attachments\n- :protect_wiki_pages\n','default'),
|
||||||
|
(10,'Student',8,1,0,'---\n- :upload_attachments\n- :memos_attachments_download\n- :add_project\n- :projects_attachments_download\n- :as_student\n- :add_course\n- :edit_course\n- :close_course\n- :select_course_modules\n- :view_course_journals_for_messages\n- :course_attachments_download\n- :view_course_files\n- :view_homework_attaches\n- :paret_in_homework\n- :manage_boards\n- :add_messages\n- :edit_own_messages\n- :delete_own_messages\n- :view_calendar\n- :view_documents\n- :view_files\n- :view_gantt\n- :view_issues\n- :add_issues\n- :add_issue_notes\n- :save_queries\n- :comment_news\n- :browse_repository\n- :view_changesets\n- :view_time_entries\n- :view_wiki_pages\n- :view_wiki_edits\n','default');
|
||||||
|
}
|
||||||
|
|
||||||
|
)
|
||||||
|
end
|
@ -0,0 +1,42 @@
|
|||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.shared_context "create user" do
|
||||||
|
let(:user) {FactoryGirl.attributes_for(:user)}
|
||||||
|
def shared_register
|
||||||
|
post register_path, user: user
|
||||||
|
end
|
||||||
|
|
||||||
|
def shared_update_user
|
||||||
|
post my_account_url,
|
||||||
|
login: user[:login],
|
||||||
|
identity: 0,
|
||||||
|
technical_title: "教授",
|
||||||
|
no: '',
|
||||||
|
"user[lastname]" => 'lastname',
|
||||||
|
"user[firstname]" => 'firstname',
|
||||||
|
enterprise_name: '',
|
||||||
|
gender: 1,
|
||||||
|
province: '',
|
||||||
|
occupation: "",
|
||||||
|
"user[mail]" => user[:mail],
|
||||||
|
"user[language]" => "zh",
|
||||||
|
province: '',
|
||||||
|
city: '',
|
||||||
|
"user[mail_notification]" => "all",
|
||||||
|
"user_extensions[birthday]" => '',
|
||||||
|
"user_extensions[gender]" => 1,
|
||||||
|
"user_extensions[brief_introduction]" => '',
|
||||||
|
"user_extensions[location]" => '',
|
||||||
|
"user_extensions[occupation]" => '',
|
||||||
|
"user_extensions[work_experience]" => '',
|
||||||
|
"user_extensions[zip_code]" => ''
|
||||||
|
end
|
||||||
|
|
||||||
|
def shared_login
|
||||||
|
post signin_path, username: user[:login], password: user[:password]
|
||||||
|
end
|
||||||
|
|
||||||
|
def current_user
|
||||||
|
User.find(session[:user_id])
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in new issue