Skip to content

Commit a54c512

Browse files
committed
wip2
1 parent 882de52 commit a54c512

File tree

3 files changed

+122
-18
lines changed

3 files changed

+122
-18
lines changed

spec/factories/execution_environment.rb

Lines changed: 74 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,27 @@
11
# frozen_string_literal: true
22

33
FactoryBot.define do
4+
factory :coffee_script, class: 'ExecutionEnvironment' do
5+
created_by_teacher
6+
default_memory_limit
7+
default_cpu_limit
8+
docker_image { 'hklement/ubuntu-coffee:latest' }
9+
file_type { association :dot_coffee, user: }
10+
help
11+
name { 'CoffeeScript' }
12+
network_enabled { false }
13+
privileged_execution { false }
14+
permitted_execution_time { 10.seconds }
15+
pool_size { 0 }
16+
run_command { 'coffee' }
17+
singleton_execution_environment
18+
end
19+
420
factory :html, class: 'ExecutionEnvironment' do
521
created_by_teacher
622
default_memory_limit
723
default_cpu_limit
8-
docker_image { 'openhpi/co_execenv_ruby:latest' }
24+
docker_image { 'hklement/ubuntu-html:latest' }
925
file_type { association :dot_html, user: }
1026
help
1127
name { 'HTML5' }
@@ -37,11 +53,29 @@
3753
testing_framework { 'JunitAdapter' }
3854
end
3955

56+
factory :jruby, class: 'ExecutionEnvironment' do
57+
created_by_teacher
58+
default_memory_limit
59+
default_cpu_limit
60+
docker_image { 'hklement/ubuntu-jruby:latest' }
61+
file_type { association :dot_rb, user: }
62+
help
63+
name { 'JRuby 1.7' }
64+
network_enabled { false }
65+
privileged_execution { false }
66+
permitted_execution_time { 10.seconds }
67+
pool_size { 0 }
68+
run_command { 'jruby %{filename}' }
69+
singleton_execution_environment
70+
test_command { 'rspec %{filename} --format documentation' }
71+
testing_framework { 'RspecAdapter' }
72+
end
73+
4074
factory :node_js, class: 'ExecutionEnvironment' do
4175
created_by_teacher
4276
default_memory_limit
4377
default_cpu_limit
44-
docker_image { 'openhpi/co_execenv_node:latest' }
78+
docker_image { 'hklement/ubuntu-node:latest' }
4579
file_type { association :dot_js, user: }
4680
help
4781
name { 'Node.js' }
@@ -75,7 +109,7 @@
75109
created_by_teacher
76110
default_memory_limit
77111
default_cpu_limit
78-
docker_image { 'openhpi/co_execenv_ruby:latest' }
112+
docker_image { 'hklement/ubuntu-ruby:latest' }
79113
file_type { association :dot_rb, user: }
80114
help
81115
name { 'Ruby 2.2' }
@@ -89,6 +123,43 @@
89123
testing_framework { 'RspecAdapter' }
90124
end
91125

126+
factory :sinatra, class: 'ExecutionEnvironment' do
127+
created_by_teacher
128+
default_memory_limit
129+
default_cpu_limit
130+
docker_image { 'hklement/ubuntu-sinatra:latest' }
131+
file_type { association :dot_rb, user: }
132+
exposed_ports { [4567] }
133+
help
134+
name { 'Sinatra' }
135+
network_enabled { true }
136+
privileged_execution { false }
137+
permitted_execution_time { 15.minutes }
138+
pool_size { 0 }
139+
run_command { 'ruby %{filename}' }
140+
singleton_execution_environment
141+
test_command { 'rspec %{filename} --format documentation' }
142+
testing_framework { 'RspecAdapter' }
143+
end
144+
145+
factory :sqlite, class: 'ExecutionEnvironment' do
146+
created_by_teacher
147+
default_memory_limit
148+
default_cpu_limit
149+
docker_image { 'hklement/ubuntu-sqlite:latest' }
150+
file_type { association :dot_sql, user: }
151+
help
152+
name { 'SQLite' }
153+
network_enabled { false }
154+
privileged_execution { false }
155+
permitted_execution_time { 1.minute }
156+
pool_size { 0 }
157+
run_command { 'sqlite3 /database.db -init %{filename} -html' }
158+
singleton_execution_environment
159+
test_command { 'ruby %{filename}' }
160+
testing_framework { 'SqlResultSetComparatorAdapter' }
161+
end
162+
92163
trait :default_memory_limit do
93164
memory_limit { ExecutionEnvironment::DEFAULT_MEMORY_LIMIT }
94165
end

spec/factories/exercise.rb

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,20 @@ def create_seed_file(exercise, path, file_attributes = {})
158158
end
159159
end
160160

161+
factory :sql_select, class: 'Exercise' do
162+
created_by_teacher
163+
description { 'Learn to use the SELECT statement.' }
164+
execution_environment { association :sqlite, user: }
165+
instructions { "Write a query which selects the full rows for all people with the last name 'Doe'." }
166+
title { 'SELECT' }
167+
168+
after(:create) do |exercise|
169+
create_seed_file(exercise, 'sql_select/exercise.sql', role: 'main_file')
170+
create_seed_file(exercise, 'sql_select/comparator.rb', feedback_message: 'Your solution is not correct yet.', hidden: true, role: 'teacher_defined_test')
171+
create_seed_file(exercise, 'sql_select/reference.sql', hidden: true, role: 'reference_implementation')
172+
end
173+
end
174+
161175
factory :tdd, class: 'Exercise' do
162176
created_by_teacher
163177
description { 'Learn to appreciate test-driven development.' }
@@ -171,6 +185,18 @@ def create_seed_file(exercise, path, file_attributes = {})
171185
end
172186
end
173187

188+
factory :web_app, class: 'Exercise' do
189+
created_by_teacher
190+
description { 'Build a simple Web application with Sinatra.' }
191+
execution_environment { association :sinatra, user: }
192+
instructions
193+
title { 'A Simple Web Application' }
194+
195+
after(:create) do |exercise|
196+
create_seed_file(exercise, 'web_app/app.rb', role: 'main_file')
197+
end
198+
end
199+
174200
trait :instructions do
175201
instructions { Forgery(:lorem_ipsum).words(Forgery(:basic).number(at_least: 50, at_most: 100)) }
176202
end

spec/system/exercises_system_spec.rb

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,17 @@
1919
visit(sign_in_path)
2020
fill_in('email', with: teacher.email)
2121
fill_in('password', with: attributes_for(:teacher)[:password])
22-
click_button(I18n.t('sessions.new.link'))
22+
click_on(I18n.t('sessions.new.link'))
23+
wait_for_ajax
24+
click_on('Administration')
25+
click_on('Exercises')
26+
all('a', text: 'Exercises').last.click
27+
click_on('Add Exercise')
28+
2329
wait_for_ajax
2430
end
2531

2632
it 'creates a minimal exercise' do
27-
visit new_exercise_path
28-
2933
fill_in :exercise_title, with: 'Ruby challenge'
3034
fill_in :exercise_internal_title, with: 'Project Ruby first challenge'
3135

@@ -41,19 +45,11 @@
4145

4246
submission_deadline = 3.months.from_now
4347

44-
chosen_select('exercise_submission_deadline_1i', submission_deadline.year.to_s)
45-
chosen_select('exercise_submission_deadline_2i', submission_deadline.strftime('%B'))
46-
chosen_select('exercise_submission_deadline_3i', submission_deadline.day.to_s)
47-
chosen_select('exercise_submission_deadline_4i', submission_deadline.hour.to_s)
48-
chosen_select('exercise_submission_deadline_5i', submission_deadline.min.to_s)
48+
chosen_date_time_select('Submission Deadline', submission_deadline)
4949

5050
late_submission_deadline = submission_deadline + 1.week
5151

52-
chosen_select('exercise_late_submission_deadline_1i', late_submission_deadline.year.to_s)
53-
chosen_select('exercise_late_submission_deadline_2i', late_submission_deadline.strftime('%B'))
54-
chosen_select('exercise_late_submission_deadline_3i', late_submission_deadline.day.to_s)
55-
chosen_select('exercise_late_submission_deadline_4i', late_submission_deadline.hour.to_s)
56-
chosen_select('exercise_late_submission_deadline_5i', late_submission_deadline.min.to_s)
52+
chosen_date_time_select('Late Submission Deadline', submission_deadline)
5753

5854
check 'Public'
5955

@@ -69,7 +65,7 @@
6965
chosen_select('File Type', 'Ruby')
7066
chosen_select('Role', 'Main File')
7167

72-
select('Read-only')
68+
check('Read-only')
7369

7470
all('input').last.set(Rails.root.join('db/seeds/fibonacci/reference.rb'))
7571
end
@@ -80,10 +76,21 @@
8076
end
8177

8278
def chosen_select(name, value)
83-
id = find('label', text: name)[:for]
79+
id = first('label', text: name)[:for]
80+
8481
set_value_for_chosen_element(id, value)
8582
end
8683

84+
def chosen_date_time_select(name, date)
85+
id = first('label', text: name)[:for]
86+
87+
set_value_for_chosen_element("#{id}_1i", date.year.to_s)
88+
set_value_for_chosen_element("#{id}_2i", date.strftime('%B'))
89+
set_value_for_chosen_element("#{id}_3i", date.day.to_s)
90+
set_value_for_chosen_element("#{id}_4i", date.hour.to_s)
91+
set_value_for_chosen_element("#{id}_5i", date.min.to_s)
92+
end
93+
8794
def set_value_for_chosen_element(id, value)
8895
element = find_by_id("#{id}_chosen")
8996
element.click

0 commit comments

Comments
 (0)