Description:
[web] improving readability of test_interface, re: ticket #10
git-svn-id: http://theory.cpe.ku.ac.th/grader/web/trunk@141 6386c4cd-e34a-4fa8-8920-d93eb39b512e
Commit status:
[Not Reviewed]
References:
Diff options:
Comments:
0 Commit comments
0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
r64:f6cdb5f921b2 - - 5 files changed: 6 inserted, 5 deleted
@@ -1,34 +1,35 | |||||
|
1 | class TestController < ApplicationController |
|
1 | class TestController < ApplicationController |
|
2 |
|
2 | ||
|
3 | before_filter :authenticate |
|
3 | before_filter :authenticate |
|
4 |
|
4 | ||
|
5 | verify :method => :post, :only => [:test_submit], |
|
5 | verify :method => :post, :only => [:test_submit], |
|
6 | :redirect_to => { :action => :index } |
|
6 | :redirect_to => { :action => :index } |
|
7 |
|
7 | ||
|
8 | def index |
|
8 | def index |
|
9 | @user = User.find(session[:user_id]) |
|
9 | @user = User.find(session[:user_id]) |
|
10 | prepare_index_information |
|
10 | prepare_index_information |
|
|
11 | + @test_requests = @user.test_requests | ||
|
11 | end |
|
12 | end |
|
12 |
|
13 | ||
|
13 | def submit |
|
14 | def submit |
|
14 | @user = User.find(session[:user_id]) |
|
15 | @user = User.find(session[:user_id]) |
|
15 | test_request = TestRequest.new_from_form_params(@user,params[:test_request]) |
|
16 | test_request = TestRequest.new_from_form_params(@user,params[:test_request]) |
|
16 | if test_request.save |
|
17 | if test_request.save |
|
17 | redirect_to :action => 'index' |
|
18 | redirect_to :action => 'index' |
|
18 | else |
|
19 | else |
|
19 | flash[:notice] = 'Error saving your test submission' |
|
20 | flash[:notice] = 'Error saving your test submission' |
|
20 | redirect_to :action => 'index' |
|
21 | redirect_to :action => 'index' |
|
21 | end |
|
22 | end |
|
22 | end |
|
23 | end |
|
23 |
|
24 | ||
|
24 | def read |
|
25 | def read |
|
25 | user = User.find(session[:user_id]) |
|
26 | user = User.find(session[:user_id]) |
|
26 | test_request = TestRequest.find(params[:id]) |
|
27 | test_request = TestRequest.find(params[:id]) |
|
27 | if test_request.user_id != user.id |
|
28 | if test_request.user_id != user.id |
|
28 | flash[:notice] = 'Invalid output' |
|
29 | flash[:notice] = 'Invalid output' |
|
29 | redirect_to :action => 'index' |
|
30 | redirect_to :action => 'index' |
|
30 | return |
|
31 | return |
|
31 | end |
|
32 | end |
|
32 | if test_request.output_file_name!=nil |
|
33 | if test_request.output_file_name!=nil |
|
33 | data = File.open(test_request.output_file_name).read(2048) |
|
34 | data = File.open(test_request.output_file_name).read(2048) |
|
34 | if data==nil |
|
35 | if data==nil |
@@ -1,31 +1,31 | |||||
|
1 | require 'digest/sha1' |
|
1 | require 'digest/sha1' |
|
2 |
|
2 | ||
|
3 | class User < ActiveRecord::Base |
|
3 | class User < ActiveRecord::Base |
|
4 |
|
4 | ||
|
5 | has_and_belongs_to_many :roles |
|
5 | has_and_belongs_to_many :roles |
|
6 |
|
6 | ||
|
7 |
- has_many :test_requests, :order => " |
|
7 | + has_many :test_requests, :order => "submitted_at DESC" |
|
8 |
|
8 | ||
|
9 | validates_presence_of :login |
|
9 | validates_presence_of :login |
|
10 | validates_presence_of :full_name |
|
10 | validates_presence_of :full_name |
|
11 | validates_length_of :full_name, :minimum => 1 |
|
11 | validates_length_of :full_name, :minimum => 1 |
|
12 |
|
12 | ||
|
13 | validates_presence_of :password, :if => :password_required? |
|
13 | validates_presence_of :password, :if => :password_required? |
|
14 | validates_length_of :password, :within => 4..20, :if => :password_required? |
|
14 | validates_length_of :password, :within => 4..20, :if => :password_required? |
|
15 | validates_confirmation_of :password, :if => :password_required? |
|
15 | validates_confirmation_of :password, :if => :password_required? |
|
16 |
|
16 | ||
|
17 | attr_accessor :password |
|
17 | attr_accessor :password |
|
18 |
|
18 | ||
|
19 | before_save :encrypt_new_password |
|
19 | before_save :encrypt_new_password |
|
20 |
|
20 | ||
|
21 | def self.authenticate(login, password) |
|
21 | def self.authenticate(login, password) |
|
22 | user = find_by_login(login) |
|
22 | user = find_by_login(login) |
|
23 | return user if user && user.authenticated?(password) |
|
23 | return user if user && user.authenticated?(password) |
|
24 | end |
|
24 | end |
|
25 |
|
25 | ||
|
26 | def authenticated?(password) |
|
26 | def authenticated?(password) |
|
27 | hashed_password == User.encrypt(password,self.salt) |
|
27 | hashed_password == User.encrypt(password,self.salt) |
|
28 | end |
|
28 | end |
|
29 |
|
29 | ||
|
30 | def admin? |
|
30 | def admin? |
|
31 | self.roles.detect {|r| r.name == 'admin' } |
|
31 | self.roles.detect {|r| r.name == 'admin' } |
@@ -1,11 +1,11 | |||||
|
1 | %tr{:class => (test_request_counter%2==0) ? "info-even" : "info-odd"} |
|
1 | %tr{:class => (test_request_counter%2==0) ? "info-even" : "info-odd"} |
|
2 | %td= test_request_counter +1 |
|
2 | %td= test_request_counter +1 |
|
3 | %td= test_request.problem.full_name |
|
3 | %td= test_request.problem.full_name |
|
4 | %td= test_request.submission.number |
|
4 | %td= test_request.submission.number |
|
5 | %td= test_request.status_str |
|
5 | %td= test_request.status_str |
|
6 | - %td= test_request.running_stat or '' |
|
6 | + %td= simple_format((test_request.running_stat or '')) |
|
7 | %td |
|
7 | %td |
|
8 | - if test_request.output_file_name!=nil |
|
8 | - if test_request.output_file_name!=nil |
|
9 | = link_to '[output]', :action => 'read', :id => test_request.id |
|
9 | = link_to '[output]', :action => 'read', :id => test_request.id |
|
10 | %td= test_request.grader_comment or '' |
|
10 | %td= test_request.grader_comment or '' |
|
11 | - %td= test_request.compiler_message or '' |
|
11 | + %td= simple_format((test_request.compiler_message or '')) |
@@ -45,29 +45,29 | |||||
|
45 | <tr> |
|
45 | <tr> |
|
46 | <td>Input data:</td> |
|
46 | <td>Input data:</td> |
|
47 | <td><%= f.file_field :input_file %></td> |
|
47 | <td><%= f.file_field :input_file %></td> |
|
48 | <tr> |
|
48 | <tr> |
|
49 | <td colspan="2"> |
|
49 | <td colspan="2"> |
|
50 | <%= submit_tag 'submit' %> |
|
50 | <%= submit_tag 'submit' %> |
|
51 | </td> |
|
51 | </td> |
|
52 | </tr> |
|
52 | </tr> |
|
53 | </table> |
|
53 | </table> |
|
54 | <% end %> |
|
54 | <% end %> |
|
55 |
|
55 | ||
|
56 | <h3>Previous requests</h3> |
|
56 | <h3>Previous requests</h3> |
|
57 |
|
57 | ||
|
58 | <table class="info"> |
|
58 | <table class="info"> |
|
59 | <tr class="info-head"> |
|
59 | <tr class="info-head"> |
|
60 | <th></td> |
|
60 | <th></td> |
|
61 | <th>problem</th> |
|
61 | <th>problem</th> |
|
62 | <th>#</th> |
|
62 | <th>#</th> |
|
63 | <th>status</th> |
|
63 | <th>status</th> |
|
64 | <th>running stat</th> |
|
64 | <th>running stat</th> |
|
65 | <th>output (first 2kb)</th> |
|
65 | <th>output (first 2kb)</th> |
|
66 | <th>grading comment</th> |
|
66 | <th>grading comment</th> |
|
67 | <th>compiler message</th> |
|
67 | <th>compiler message</th> |
|
68 | </tr> |
|
68 | </tr> |
|
69 |
- <%= render :partial => 'test_request', :collection => @ |
|
69 | + <%= render :partial => 'test_request', :collection => @test_requests %> |
|
70 | </table> |
|
70 | </table> |
|
71 |
|
71 | ||
|
72 | <% end %> |
|
72 | <% end %> |
|
73 |
|
73 |
@@ -1,28 +1,28 | |||||
|
1 |
|
1 | ||
|
2 | require File.dirname(__FILE__) + '/../spec_helper' |
|
2 | require File.dirname(__FILE__) + '/../spec_helper' |
|
3 |
|
3 | ||
|
4 | - describe Submission do |
|
4 | + describe Submission, "when verifying user submission" do |
|
5 |
|
5 | ||
|
6 | before(:each) do |
|
6 | before(:each) do |
|
7 | @submission = Submission.new |
|
7 | @submission = Submission.new |
|
8 | @submission.source = <<SOURCE |
|
8 | @submission.source = <<SOURCE |
|
9 | /* |
|
9 | /* |
|
10 | LANG: C++ |
|
10 | LANG: C++ |
|
11 | TASK: testproblem |
|
11 | TASK: testproblem |
|
12 | */ |
|
12 | */ |
|
13 | SOURCE |
|
13 | SOURCE |
|
14 | end |
|
14 | end |
|
15 |
|
15 | ||
|
16 | it "should find language in source" do |
|
16 | it "should find language in source" do |
|
17 | langcpp = stub(Language, :name => 'cpp', :ext => 'cpp') |
|
17 | langcpp = stub(Language, :name => 'cpp', :ext => 'cpp') |
|
18 | Language.should_receive(:find_by_name).with('C++').and_return(langcpp) |
|
18 | Language.should_receive(:find_by_name).with('C++').and_return(langcpp) |
|
19 | Submission.find_language_in_source(@submission.source).should == langcpp |
|
19 | Submission.find_language_in_source(@submission.source).should == langcpp |
|
20 | end |
|
20 | end |
|
21 |
|
21 | ||
|
22 | it "should find problem in source, when there is any" do |
|
22 | it "should find problem in source, when there is any" do |
|
23 | problem = stub(Problem, :name => 'testproblem') |
|
23 | problem = stub(Problem, :name => 'testproblem') |
|
24 | Problem.should_receive(:find_by_name).with('testproblem').and_return(problem) |
|
24 | Problem.should_receive(:find_by_name).with('testproblem').and_return(problem) |
|
25 | Submission.find_problem_in_source(@submission.source).should == problem |
|
25 | Submission.find_problem_in_source(@submission.source).should == problem |
|
26 | end |
|
26 | end |
|
27 |
|
27 | ||
|
28 | it "should return nil when it cannot find problem in source" do |
|
28 | it "should return nil when it cannot find problem in source" do |
You need to be logged in to leave comments.
Login now