Description:
- more test on user admin and authorization - fix more routing
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r754:4cbf294c126c - - 8 files changed: 140 inserted, 79 deleted

@@ -57,7 +57,11
57 else
57 else
58 flash[:notice] = 'Wrong site password'
58 flash[:notice] = 'Wrong site password'
59 redirect_to :controller => 'site', :action => 'login'
59 redirect_to :controller => 'site', :action => 'login'
60 end
60 end
61 end
61 end
62
62
63 + def logout
64 + redirect_to root_path
63 end
65 end
66 +
67 + end
@@ -18,12 +18,13
18 # NOTE: This method is not actually needed, 'config/routes.rb' has
18 # NOTE: This method is not actually needed, 'config/routes.rb' has
19 # assigned action login as a default action.
19 # assigned action login as a default action.
20 def index
20 def index
21 redirect_to :action => 'login'
21 redirect_to :action => 'login'
22 end
22 end
23
23
24 + #reset login, clear session
24 def login
25 def login
25 saved_notice = flash[:notice]
26 saved_notice = flash[:notice]
26 reset_session
27 reset_session
27 flash.now[:notice] = saved_notice
28 flash.now[:notice] = saved_notice
28
29
29 # EXPERIMENT:
30 # EXPERIMENT:
@@ -37,12 +38,17
37 # end
38 # end
38
39
39 @announcements = Announcement.frontpage
40 @announcements = Announcement.frontpage
40 render :action => 'login', :layout => 'empty'
41 render :action => 'login', :layout => 'empty'
41 end
42 end
42
43
44 + def logout
45 + reset_session
46 + redirect_to root_path
47 + end
48 +
43 def list
49 def list
44 prepare_list_information
50 prepare_list_information
45 end
51 end
46
52
47 def help
53 def help
48 @user = User.find(session[:user_id])
54 @user = User.find(session[:user_id])
@@ -18,12 +18,12
18 = "]"
18 = "]"
19 %br
19 %br
20 %strong View:
20 %strong View:
21 - if GraderConfiguration.show_grading_result
21 - if GraderConfiguration.show_grading_result
22 = link_to '[detailed result]', :action => 'result', :id => submission.id
22 = link_to '[detailed result]', :action => 'result', :id => submission.id
23 /= link_to "#{t 'main.cmp_msg'}", {:action => 'compiler_msg', :id => submission.id}, {popup: true,class: 'btn btn-xs btn-info'}
23 /= link_to "#{t 'main.cmp_msg'}", {:action => 'compiler_msg', :id => submission.id}, {popup: true,class: 'btn btn-xs btn-info'}
24 - = link_to "#{t 'main.cmp_msg'}", compiler_msg_submission_path(submission.id), {popup: true,remote: true,class: 'btn btn-xs btn-info'}
24 + = link_to "#{t 'main.cmp_msg'}", compiler_msg_submission_path(submission), {popup: true,remote: true,class: 'btn btn-xs btn-info'}
25 - = link_to "#{t 'main.src_link'}",{:action => 'source', :id => submission.id}, class: 'btn btn-xs btn-info'
25 + = link_to "#{t 'main.src_link'}",download_submission_path(submission), class: 'btn btn-xs btn-info'
26 = link_to "#{t 'main.submissions_link'}", problem_submissions_path(problem_id), class: 'btn btn-xs btn-info'
26 = link_to "#{t 'main.submissions_link'}", problem_submissions_path(problem_id), class: 'btn btn-xs btn-info'
27 - if GraderConfiguration.show_testcase
27 - if GraderConfiguration.show_testcase
28 = link_to "testcases", show_problem_testcases_path(problem_id), class: 'btn btn-xs btn-info'
28 = link_to "testcases", show_problem_testcases_path(problem_id), class: 'btn btn-xs btn-info'
29
29
@@ -14,12 +14,12
14 %td
14 %td
15 - if user.login!='root'
15 - if user.login!='root'
16 = link_to '[revoke]', :action => 'revoke_admin', :id => user.id
16 = link_to '[revoke]', :action => 'revoke_admin', :id => user.id
17 %hr
17 %hr
18
18
19 = form_tag :action => 'grant_admin' do
19 = form_tag :action => 'grant_admin' do
20 - Grant admin permission to:
20 + = label_tag :login, 'Grant admin permission to:'
21 - = text_field_tag 'login'
21 + = text_field_tag 'login',nil, class: 'input-field'
22 - = submit_tag 'Grant'
22 + = submit_tag 'Grant', class: 'btn btn-primary'
23
23
24 %hr/
24 %hr/
25 = link_to '[go back to index]', :action => 'index'
25 = link_to '[go back to index]', :action => 'index'
@@ -4,17 +4,14
4
4
5 root :to => 'main#login'
5 root :to => 'main#login'
6
6
7 #logins
7 #logins
8 match 'login/login', to: 'login#login', via: [:get,:post]
8 match 'login/login', to: 'login#login', via: [:get,:post]
9
9
10 -
11 resources :contests
10 resources :contests
12 -
13 resources :sites
11 resources :sites
14 -
15 resources :test
12 resources :test
16
13
17 resources :messages do
14 resources :messages do
18 collection do
15 collection do
19 get 'console'
16 get 'console'
20 end
17 end
@@ -100,12 +97,13
100 get 'user_stat'
97 get 'user_stat'
101 get 'import'
98 get 'import'
102 get 'new_list'
99 get 'new_list'
103 get 'admin'
100 get 'admin'
104 get 'active'
101 get 'active'
105 get 'mass_mailing'
102 get 'mass_mailing'
103 + get 'revoke_admin'
106 post 'grant_admin'
104 post 'grant_admin'
107 match 'create_from_list', via: [:get, :post]
105 match 'create_from_list', via: [:get, :post]
108 match 'random_all_passwords', via: [:get, :post]
106 match 'random_all_passwords', via: [:get, :post]
109 end
107 end
110 member do
108 member do
111 get 'clear_last_ip'
109 get 'clear_last_ip'
@@ -141,17 +139,19
141 #get 'report/problem_hof(/:id)', to: 'report#problem_hof', as: 'report_problem_hof'
139 #get 'report/problem_hof(/:id)', to: 'report#problem_hof', as: 'report_problem_hof'
142 #get "report/login"
140 #get "report/login"
143 #get 'report/max_score', to: 'report#max_score', as: 'report_max_score'
141 #get 'report/max_score', to: 'report#max_score', as: 'report_max_score'
144 #post 'report/show_max_score', to: 'report#show_max_score', as: 'report_show_max_score'
142 #post 'report/show_max_score', to: 'report#show_max_score', as: 'report_show_max_score'
145
143
146 resource :main, only: [], controller: 'main' do
144 resource :main, only: [], controller: 'main' do
145 + get 'login'
146 + get 'logout'
147 get 'list'
147 get 'list'
148 get 'submission(/:id)', action: 'submission', as: 'main_submission'
148 get 'submission(/:id)', action: 'submission', as: 'main_submission'
149 - post 'submit'
150 get 'announcements'
149 get 'announcements'
151 get 'help'
150 get 'help'
151 + post 'submit'
152 end
152 end
153 #main
153 #main
154 #get "main/list"
154 #get "main/list"
155 #get 'main/submission(/:id)', to: 'main#submission', as: 'main_submission'
155 #get 'main/submission(/:id)', to: 'main#submission', as: 'main_submission'
156 #post 'main/submit', to: 'main#submit'
156 #post 'main/submit', to: 'main#submit'
157 #get 'main/announcements', to: 'main#announcements'
157 #get 'main/announcements', to: 'main#announcements'
@@ -1,5 +1,5
1 - class ChangeSubmissionSourceSize < ActiveRecord::Migration
1 + class ChangeSubmissionSourceSize < ActiveRecord::Migration[4.2]
2 def change
2 def change
3 change_column :submissions, :source, :text, :limit => 1.megabyte
3 change_column :submissions, :source, :text, :limit => 1.megabyte
4 end
4 end
5 end
5 end
@@ -7,130 +7,130
7 # system, you should be using db:schema:load, not running all the migrations
7 # system, you should be using db:schema:load, not running all the migrations
8 # from scratch. The latter is a flawed and unsustainable approach (the more migrations
8 # from scratch. The latter is a flawed and unsustainable approach (the more migrations
9 # you'll amass, the slower it'll run and the greater likelihood for issues).
9 # you'll amass, the slower it'll run and the greater likelihood for issues).
10 #
10 #
11 # It's strongly recommended that you check this file into your version control system.
11 # It's strongly recommended that you check this file into your version control system.
12
12
13 - ActiveRecord::Schema.define(version: 20180612102327) do
13 + ActiveRecord::Schema.define(version: 2018_06_12_102327) do
14
14
15 - create_table "announcements", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
15 + create_table "announcements", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
16 t.string "author"
16 t.string "author"
17 - t.text "body", limit: 65535
17 + t.text "body"
18 t.boolean "published"
18 t.boolean "published"
19 t.datetime "created_at"
19 t.datetime "created_at"
20 t.datetime "updated_at"
20 t.datetime "updated_at"
21 t.boolean "frontpage", default: false
21 t.boolean "frontpage", default: false
22 t.boolean "contest_only", default: false
22 t.boolean "contest_only", default: false
23 t.string "title"
23 t.string "title"
24 t.string "notes"
24 t.string "notes"
25 end
25 end
26
26
27 - create_table "contests", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
27 + create_table "contests", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
28 t.string "title"
28 t.string "title"
29 t.boolean "enabled"
29 t.boolean "enabled"
30 t.datetime "created_at"
30 t.datetime "created_at"
31 t.datetime "updated_at"
31 t.datetime "updated_at"
32 t.string "name"
32 t.string "name"
33 end
33 end
34
34
35 - create_table "contests_problems", id: false, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
35 + create_table "contests_problems", id: false, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
36 t.integer "contest_id"
36 t.integer "contest_id"
37 t.integer "problem_id"
37 t.integer "problem_id"
38 end
38 end
39
39
40 - create_table "contests_users", id: false, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
40 + create_table "contests_users", id: false, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
41 t.integer "contest_id"
41 t.integer "contest_id"
42 t.integer "user_id"
42 t.integer "user_id"
43 end
43 end
44
44
45 - create_table "countries", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
45 + create_table "countries", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
46 t.string "name"
46 t.string "name"
47 t.datetime "created_at"
47 t.datetime "created_at"
48 t.datetime "updated_at"
48 t.datetime "updated_at"
49 end
49 end
50
50
51 - create_table "descriptions", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
51 + create_table "descriptions", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
52 - t.text "body", limit: 65535
52 + t.text "body"
53 t.boolean "markdowned"
53 t.boolean "markdowned"
54 t.datetime "created_at"
54 t.datetime "created_at"
55 t.datetime "updated_at"
55 t.datetime "updated_at"
56 end
56 end
57
57
58 - create_table "grader_configurations", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
58 + create_table "grader_configurations", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
59 t.string "key"
59 t.string "key"
60 t.string "value_type"
60 t.string "value_type"
61 t.string "value"
61 t.string "value"
62 t.datetime "created_at"
62 t.datetime "created_at"
63 t.datetime "updated_at"
63 t.datetime "updated_at"
64 - t.text "description", limit: 65535
64 + t.text "description"
65 end
65 end
66
66
67 - create_table "grader_processes", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
67 + create_table "grader_processes", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
68 t.string "host"
68 t.string "host"
69 t.integer "pid"
69 t.integer "pid"
70 t.string "mode"
70 t.string "mode"
71 t.boolean "active"
71 t.boolean "active"
72 t.datetime "created_at"
72 t.datetime "created_at"
73 t.datetime "updated_at"
73 t.datetime "updated_at"
74 t.integer "task_id"
74 t.integer "task_id"
75 t.string "task_type"
75 t.string "task_type"
76 t.boolean "terminated"
76 t.boolean "terminated"
77 - t.index ["host", "pid"], name: "index_grader_processes_on_host_and_pid", using: :btree
77 + t.index ["host", "pid"], name: "index_grader_processes_on_ip_and_pid"
78 end
78 end
79
79
80 - create_table "groups", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
80 + create_table "groups", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
81 t.string "name"
81 t.string "name"
82 t.string "description"
82 t.string "description"
83 end
83 end
84
84
85 - create_table "groups_problems", id: false, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
85 + create_table "groups_problems", id: false, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
86 t.integer "problem_id", null: false
86 t.integer "problem_id", null: false
87 t.integer "group_id", null: false
87 t.integer "group_id", null: false
88 - t.index ["group_id", "problem_id"], name: "index_groups_problems_on_group_id_and_problem_id", using: :btree
88 + t.index ["group_id", "problem_id"], name: "index_groups_problems_on_group_id_and_problem_id"
89 end
89 end
90
90
91 - create_table "groups_users", id: false, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
91 + create_table "groups_users", id: false, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
92 t.integer "group_id", null: false
92 t.integer "group_id", null: false
93 t.integer "user_id", null: false
93 t.integer "user_id", null: false
94 - t.index ["user_id", "group_id"], name: "index_groups_users_on_user_id_and_group_id", using: :btree
94 + t.index ["user_id", "group_id"], name: "index_groups_users_on_user_id_and_group_id"
95 end
95 end
96
96
97 - create_table "heart_beats", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
97 + create_table "heart_beats", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
98 t.integer "user_id"
98 t.integer "user_id"
99 t.string "ip_address"
99 t.string "ip_address"
100 - t.datetime "created_at"
100 + t.datetime "created_at", null: false
101 - t.datetime "updated_at"
101 + t.datetime "updated_at", null: false
102 t.string "status"
102 t.string "status"
103 - t.index ["updated_at"], name: "index_heart_beats_on_updated_at", using: :btree
103 + t.index ["updated_at"], name: "index_heart_beats_on_updated_at"
104 end
104 end
105
105
106 - create_table "languages", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
106 + create_table "languages", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
107 t.string "name", limit: 10
107 t.string "name", limit: 10
108 t.string "pretty_name"
108 t.string "pretty_name"
109 t.string "ext", limit: 10
109 t.string "ext", limit: 10
110 t.string "common_ext"
110 t.string "common_ext"
111 end
111 end
112
112
113 - create_table "logins", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
113 + create_table "logins", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
114 t.integer "user_id"
114 t.integer "user_id"
115 t.string "ip_address"
115 t.string "ip_address"
116 - t.datetime "created_at"
116 + t.datetime "created_at", null: false
117 - t.datetime "updated_at"
117 + t.datetime "updated_at", null: false
118 end
118 end
119
119
120 - create_table "messages", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
120 + create_table "messages", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
121 t.integer "sender_id"
121 t.integer "sender_id"
122 t.integer "receiver_id"
122 t.integer "receiver_id"
123 t.integer "replying_message_id"
123 t.integer "replying_message_id"
124 - t.text "body", limit: 65535
124 + t.text "body"
125 t.boolean "replied"
125 t.boolean "replied"
126 t.datetime "created_at"
126 t.datetime "created_at"
127 t.datetime "updated_at"
127 t.datetime "updated_at"
128 end
128 end
129
129
130 - create_table "problems", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
130 + create_table "problems", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
131 t.string "name", limit: 30
131 t.string "name", limit: 30
132 t.string "full_name"
132 t.string "full_name"
133 t.integer "full_score"
133 t.integer "full_score"
134 t.date "date_added"
134 t.date "date_added"
135 t.boolean "available"
135 t.boolean "available"
136 t.string "url"
136 t.string "url"
@@ -138,155 +138,154
138 t.boolean "test_allowed"
138 t.boolean "test_allowed"
139 t.boolean "output_only"
139 t.boolean "output_only"
140 t.string "description_filename"
140 t.string "description_filename"
141 t.boolean "view_testcase"
141 t.boolean "view_testcase"
142 end
142 end
143
143
144 - create_table "problems_tags", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
144 + create_table "problems_tags", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
145 t.integer "problem_id"
145 t.integer "problem_id"
146 t.integer "tag_id"
146 t.integer "tag_id"
147 - t.index ["problem_id", "tag_id"], name: "index_problems_tags_on_problem_id_and_tag_id", unique: true, using: :btree
147 + t.index ["problem_id", "tag_id"], name: "index_problems_tags_on_problem_id_and_tag_id", unique: true
148 - t.index ["problem_id"], name: "index_problems_tags_on_problem_id", using: :btree
148 + t.index ["problem_id"], name: "index_problems_tags_on_problem_id"
149 - t.index ["tag_id"], name: "index_problems_tags_on_tag_id", using: :btree
149 + t.index ["tag_id"], name: "index_problems_tags_on_tag_id"
150 end
150 end
151
151
152 - create_table "rights", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
152 + create_table "rights", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
153 t.string "name"
153 t.string "name"
154 t.string "controller"
154 t.string "controller"
155 t.string "action"
155 t.string "action"
156 end
156 end
157
157
158 - create_table "rights_roles", id: false, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
158 + create_table "rights_roles", id: false, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
159 t.integer "right_id"
159 t.integer "right_id"
160 t.integer "role_id"
160 t.integer "role_id"
161 - t.index ["role_id"], name: "index_rights_roles_on_role_id", using: :btree
161 + t.index ["role_id"], name: "index_rights_roles_on_role_id"
162 end
162 end
163
163
164 - create_table "roles", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
164 + create_table "roles", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
165 t.string "name"
165 t.string "name"
166 end
166 end
167
167
168 - create_table "roles_users", id: false, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
168 + create_table "roles_users", id: false, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
169 t.integer "role_id"
169 t.integer "role_id"
170 t.integer "user_id"
170 t.integer "user_id"
171 - t.index ["user_id"], name: "index_roles_users_on_user_id", using: :btree
171 + t.index ["user_id"], name: "index_roles_users_on_user_id"
172 end
172 end
173
173
174 - create_table "sessions", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
174 + create_table "sessions", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
175 t.string "session_id"
175 t.string "session_id"
176 - t.text "data", limit: 65535
176 + t.text "data"
177 t.datetime "updated_at"
177 t.datetime "updated_at"
178 - t.index ["session_id"], name: "index_sessions_on_session_id", using: :btree
178 + t.index ["session_id"], name: "index_sessions_on_session_id"
179 - t.index ["updated_at"], name: "index_sessions_on_updated_at", using: :btree
179 + t.index ["updated_at"], name: "index_sessions_on_updated_at"
180 end
180 end
181
181
182 - create_table "sites", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
182 + create_table "sites", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
183 t.string "name"
183 t.string "name"
184 t.boolean "started"
184 t.boolean "started"
185 t.datetime "start_time"
185 t.datetime "start_time"
186 t.datetime "created_at"
186 t.datetime "created_at"
187 t.datetime "updated_at"
187 t.datetime "updated_at"
188 t.integer "country_id"
188 t.integer "country_id"
189 t.string "password"
189 t.string "password"
190 end
190 end
191
191
192 - create_table "submission_view_logs", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
192 + create_table "submission_view_logs", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
193 t.integer "user_id"
193 t.integer "user_id"
194 t.integer "submission_id"
194 t.integer "submission_id"
195 - t.datetime "created_at"
195 + t.datetime "created_at", null: false
196 - t.datetime "updated_at"
196 + t.datetime "updated_at", null: false
197 end
197 end
198
198
199 - create_table "submissions", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
199 + create_table "submissions", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
200 t.integer "user_id"
200 t.integer "user_id"
201 t.integer "problem_id"
201 t.integer "problem_id"
202 t.integer "language_id"
202 t.integer "language_id"
203 t.text "source", limit: 16777215
203 t.text "source", limit: 16777215
204 - t.binary "binary", limit: 65535
204 + t.binary "binary"
205 t.datetime "submitted_at"
205 t.datetime "submitted_at"
206 t.datetime "compiled_at"
206 t.datetime "compiled_at"
207 - t.text "compiler_message", limit: 65535
207 + t.text "compiler_message"
208 t.datetime "graded_at"
208 t.datetime "graded_at"
209 t.integer "points"
209 t.integer "points"
210 - t.text "grader_comment", limit: 65535
210 + t.text "grader_comment"
211 t.integer "number"
211 t.integer "number"
212 t.string "source_filename"
212 t.string "source_filename"
213 - t.float "max_runtime", limit: 24
213 + t.float "max_runtime"
214 t.integer "peak_memory"
214 t.integer "peak_memory"
215 t.integer "effective_code_length"
215 t.integer "effective_code_length"
216 t.string "ip_address"
216 t.string "ip_address"
217 - t.index ["user_id", "problem_id", "number"], name: "index_submissions_on_user_id_and_problem_id_and_number", unique: true, using: :btree
217 + t.index ["user_id", "problem_id", "number"], name: "index_submissions_on_user_id_and_problem_id_and_number", unique: true
218 - t.index ["user_id", "problem_id"], name: "index_submissions_on_user_id_and_problem_id", using: :btree
218 + t.index ["user_id", "problem_id"], name: "index_submissions_on_user_id_and_problem_id"
219 end
219 end
220
220
221 - create_table "tags", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
221 + create_table "tags", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
222 t.string "name", null: false
222 t.string "name", null: false
223 - t.text "description", limit: 65535
223 + t.text "description"
224 t.boolean "public"
224 t.boolean "public"
225 t.datetime "created_at", null: false
225 t.datetime "created_at", null: false
226 t.datetime "updated_at", null: false
226 t.datetime "updated_at", null: false
227 end
227 end
228
228
229 - create_table "tasks", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
229 + create_table "tasks", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
230 t.integer "submission_id"
230 t.integer "submission_id"
231 t.datetime "created_at"
231 t.datetime "created_at"
232 t.integer "status"
232 t.integer "status"
233 t.datetime "updated_at"
233 t.datetime "updated_at"
234 - t.index ["submission_id"], name: "index_tasks_on_submission_id", using: :btree
234 + t.index ["submission_id"], name: "index_tasks_on_submission_id"
235 end
235 end
236
236
237 - create_table "test_pairs", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
237 + create_table "test_pairs", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
238 t.integer "problem_id"
238 t.integer "problem_id"
239 t.text "input", limit: 16777215
239 t.text "input", limit: 16777215
240 t.text "solution", limit: 16777215
240 t.text "solution", limit: 16777215
241 t.datetime "created_at"
241 t.datetime "created_at"
242 t.datetime "updated_at"
242 t.datetime "updated_at"
243 end
243 end
244
244
245 - create_table "test_requests", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
245 + create_table "test_requests", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
246 t.integer "user_id"
246 t.integer "user_id"
247 t.integer "problem_id"
247 t.integer "problem_id"
248 t.integer "submission_id"
248 t.integer "submission_id"
249 t.string "input_file_name"
249 t.string "input_file_name"
250 t.string "output_file_name"
250 t.string "output_file_name"
251 t.string "running_stat"
251 t.string "running_stat"
252 t.integer "status"
252 t.integer "status"
253 t.datetime "updated_at"
253 t.datetime "updated_at"
254 t.datetime "submitted_at"
254 t.datetime "submitted_at"
255 t.datetime "compiled_at"
255 t.datetime "compiled_at"
256 - t.text "compiler_message", limit: 65535
256 + t.text "compiler_message"
257 t.datetime "graded_at"
257 t.datetime "graded_at"
258 t.string "grader_comment"
258 t.string "grader_comment"
259 t.datetime "created_at"
259 t.datetime "created_at"
260 - t.float "running_time", limit: 24
260 + t.float "running_time"
261 t.string "exit_status"
261 t.string "exit_status"
262 t.integer "memory_usage"
262 t.integer "memory_usage"
263 - t.index ["user_id", "problem_id"], name: "index_test_requests_on_user_id_and_problem_id", using: :btree
263 + t.index ["user_id", "problem_id"], name: "index_test_requests_on_user_id_and_problem_id"
264 end
264 end
265
265
266 - create_table "testcases", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
266 + create_table "testcases", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
267 t.integer "problem_id"
267 t.integer "problem_id"
268 t.integer "num"
268 t.integer "num"
269 t.integer "group"
269 t.integer "group"
270 t.integer "score"
270 t.integer "score"
271 t.text "input", limit: 4294967295
271 t.text "input", limit: 4294967295
272 t.text "sol", limit: 4294967295
272 t.text "sol", limit: 4294967295
273 t.datetime "created_at"
273 t.datetime "created_at"
274 t.datetime "updated_at"
274 t.datetime "updated_at"
275 - t.index ["problem_id"], name: "index_testcases_on_problem_id", using: :btree
275 + t.index ["problem_id"], name: "index_testcases_on_problem_id"
276 end
276 end
277
277
278 - create_table "user_contest_stats", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
278 + create_table "user_contest_stats", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
279 t.integer "user_id"
279 t.integer "user_id"
280 t.datetime "started_at"
280 t.datetime "started_at"
281 t.datetime "created_at"
281 t.datetime "created_at"
282 t.datetime "updated_at"
282 t.datetime "updated_at"
283 - t.boolean "forced_logout"
284 end
283 end
285
284
286 - create_table "users", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
285 + create_table "users", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
287 t.string "login", limit: 50
286 t.string "login", limit: 50
288 t.string "full_name"
287 t.string "full_name"
289 t.string "hashed_password"
288 t.string "hashed_password"
290 t.string "salt", limit: 5
289 t.string "salt", limit: 5
291 t.string "alias"
290 t.string "alias"
292 t.string "email"
291 t.string "email"
@@ -296,12 +295,12
296 t.datetime "created_at"
295 t.datetime "created_at"
297 t.datetime "updated_at"
296 t.datetime "updated_at"
298 t.string "section"
297 t.string "section"
299 t.boolean "enabled", default: true
298 t.boolean "enabled", default: true
300 t.string "remark"
299 t.string "remark"
301 t.string "last_ip"
300 t.string "last_ip"
302 - t.index ["login"], name: "index_users_on_login", unique: true, using: :btree
301 + t.index ["login"], name: "index_users_on_login", unique: true
303 end
302 end
304
303
305 add_foreign_key "problems_tags", "problems"
304 add_foreign_key "problems_tags", "problems"
306 add_foreign_key "problems_tags", "tags"
305 add_foreign_key "problems_tags", "tags"
307 end
306 end
@@ -38,12 +38,64
38 fill_in 'Remark', with: 'section 2'
38 fill_in 'Remark', with: 'section 2'
39 click_on 'Update User'
39 click_on 'Update User'
40
40
41 assert_text 'section 2'
41 assert_text 'section 2'
42 end
42 end
43
43
44 + test "add multiple users" do
45 + login 'admin', 'admin'
46 + within 'header' do
47 + click_on 'Manage'
48 + click_on 'Users', match: :first
49 + end
50 +
51 + click_on 'New list of users', match: :first
52 + find(:css, 'textarea').fill_in with:"abc1,Boaty McBoatface,abcdef,alias1,remark1,\nabc2,Boaty2 McSecond,acbdef123,aias2,remark2"
53 + click_on 'create users'
54 +
55 + assert_text('remark1')
56 + assert_text('remark2')
57 + end
58 +
59 + test "grant admin right" do
60 + login 'admin', 'admin'
61 + within 'header' do
62 + click_on 'Manage'
63 + click_on 'Users', match: :first
64 + end
65 +
66 + click_on "View administrator"
67 + fill_in 'login', with: 'john'
68 + click_on "Grant"
69 +
70 + visit logout_main_path
71 + login 'john','hello'
72 + within 'header' do
73 + click_on 'Manage'
74 + click_on 'Problem', match: :first
75 + end
76 + assert_text "Turn off all problems"
77 + end
78 +
79 + test "try using admin from normal user" do
80 + login 'admin','admin'
81 + visit bulk_manage_user_admin_index_path
82 + assert_current_path bulk_manage_user_admin_index_path
83 + visit logout_main_path
84 +
85 + login 'jack','morning'
86 + visit bulk_manage_user_admin_index_path
87 + assert_current_path root_path
88 + assert_text 'You are not authorized'
89 +
90 + login 'james','morning'
91 + visit new_list_user_admin_index_path
92 + assert_current_path root_path
93 + assert_text 'You are not authorized'
94 + end
95 +
44 def login(username,password)
96 def login(username,password)
45 visit root_path
97 visit root_path
46 fill_in "Login", with: username
98 fill_in "Login", with: username
47 fill_in "Password", with: password
99 fill_in "Password", with: password
48 click_on "Login"
100 click_on "Login"
49 end
101 end
You need to be logged in to leave comments. Login now